AR第二个视频发布

This commit is contained in:
lishuo 2023-04-28 20:23:37 +08:00
parent 573aa2ff4c
commit 431d128ad8
19 changed files with 3813 additions and 2975 deletions

View File

@ -1,4 +1,5 @@
using UnityEngine;
using System;
using UnityEngine;
namespace Assets.AR
{
@ -14,7 +15,7 @@ namespace Assets.AR
public float RouteDistance { get; set; }//线路上的距离
public float Lane { get; set; }//车道上的位置
public float Lane { get; set; } //车道上的位置
public float BaseOffset { get; set; }//基准偏移量
@ -38,6 +39,8 @@ namespace Assets.AR
public int TestPower { get; set; }
public float ZOffset { get; set; }
//重置碰撞检测参数
public void ResetCollisionDetectionParameters()
{
@ -56,13 +59,14 @@ namespace Assets.AR
{
PositionOffset = Vector3.up * route.CameraHeight * (-1);
var cameraRotation = this.GetCameraRotation(this.frame - this.FrameIndexDistanceCorrection);
var normalizeCameraRotation = Quaternion.Euler(new Vector3(cameraRotation.eulerAngles.x, cameraRotation.eulerAngles.y, cameraRotation.eulerAngles.z+ZOffset));
var filteredCameraPosition = this.GetFilteredCameraPosition(this.frame - this.FrameIndexDistanceCorrection);
var vector3 = Vector3.left * (this.route.LeftHanded ? -1f : 1f) * (this.LaneWidth * (this.Lane + this.LaneCamera) - this.BaseOffset);
var targetPos = filteredCameraPosition + cameraRotation * (vector3 + this.PositionOffset);
var targetPos = filteredCameraPosition + normalizeCameraRotation * (vector3 + this.PositionOffset);
this.transform.position = targetPos;
this.transform.rotation = cameraRotation * Quaternion.Euler(this.RotationOffset) * Quaternion.Euler(this.Lean);
this.transform.rotation = normalizeCameraRotation * Quaternion.Euler(this.RotationOffset) * Quaternion.Euler(this.Lean);
this.transform.localScale = this.Scale;
}
}

View File

@ -34,7 +34,7 @@ namespace Assets.AR
{
var frame = 100f;
this.StartRegionRouteWidth = this.GetRouteLeftOffset(frame) + this.GetRouteRightOffset(frame);
this.RiderCountInStartRow = Mathf.Max(1, Mathf.CeilToInt(this.StartRegionRouteWidth / 0.7f));
this.RiderCountInStartRow = Mathf.Max(2, Mathf.CeilToInt(this.StartRegionRouteWidth / 0.7f));
}
protected override void UpdateGameObjects(
@ -233,10 +233,13 @@ namespace Assets.AR
{
if (!this.AllowStartOrder || (double)routeDistance >= 200.0)
return routeDistance;
var num = Mathf.Lerp((float)((double)(RiderCountInStartRow == 0 ? 0 :(startPosition - 1) / this.RiderCountInStartRow) * 2.2000000476837158 + 6.0) + this.GetStartOffset(startPosition).y, 0.0f, routeDistance / 200f);
var start = (float)((RiderCountInStartRow == 0 ? 0 : (startPosition - 1) / this.RiderCountInStartRow) * 2.2000000476837158 + 6.0) + this.GetStartOffset(startPosition).y;
var num = Mathf.Lerp(start , 0.0f, routeDistance / 200f);
return routeDistance + num;
}
//计算碰撞距离
protected static float GetCollisionParameter(
float distSource,

View File

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using UnityEngine;
using UnityEngine.Rendering;
@ -58,6 +59,8 @@ namespace Assets.AR
public int VideoFrameOffset { get; set; }
public float CameraHeight { get; set; }
public float ZOffset { get; set; }
public float RiderScale { get; set; } = 1f;
@ -428,9 +431,17 @@ namespace Assets.AR
public void LoadData(ARRouteData data)
{
// //todo:修改rotation z
// foreach (var rotation in data.CameraRotations)
// {
// rotation.z += 4f;
// }
//
// var str = JsonConvert.SerializeObject(data);
this.Visibility = data.Visibility;
this.VideoFrameOffset = data.VideoFrameOffset;
this.LeftHanded = data.LeftHanded;
this.ZOffset = data.Zoffset;
this.SlamSegments = data.SlamSegments;
this.CameraHeight = data.CameraHeight;
this.RiderScale = (double)data.RiderScale != 0.0 ? data.RiderScale : 1f;

View File

@ -248,6 +248,7 @@ namespace Assets.AR
public int VideoFrameOffsetMac = -1;
public float CameraHeight;
public float RiderScale = 1f;
public float Zoffset = 0f;
public int[] LeftSideOffsetFrames;
public float[] LeftSideOffsets;
public int[] RightSideOffsetFrames;

View File

@ -101,16 +101,27 @@ namespace Assets.AR
return;
}
this.PlayFrameDistance();
PlayFrameDistance();
VideoPlayerControl.UpdateVideoPlayRate(mainRiderObject.PreSpeed, mainRiderObject.Distance);
this.FrameIndexDistanceCorrection = this.VideoPlayerControl.FrameIndexDistanceCorrection;
this.UpdateCameraFollowDistance();
FrameIndexDistanceCorrection = this.VideoPlayerControl.FrameIndexDistanceCorrection;
UpdateCameraFollowDistance();
base.Update();
this.UpdateRidersVisibility();
this.UpdateRidersLean();
this.UpdateBackLight();
this.SetUpVideoControlMode();
UpdateRidersVisibility();
UpdateRidersLean();
UpdateBackLight();
SetUpVideoControlMode();
UpdateRemainingTime();
}
/// <summary>
/// 处理人物快倒计时
/// </summary>
private void UpdateRemainingTime()
{
if (mainRiderObject == null) return;
var remainingDistance = Math.Round(manager.GetMapRoute().Distance * 1000f - mainRiderObject.Distance);
manager.ShowUpRemainTime(remainingDistance);
}
/// <summary>
@ -247,7 +258,7 @@ namespace Assets.AR
case AR.CameraDistance.Near:
return 1.5f;
case AR.CameraDistance.Middle:
return 5f;
return 8f;
case AR.CameraDistance.Far:
return 10f;
default:

View File

@ -1,5 +1,6 @@

using System;
using Assets.Scripts.Scenes.VideoRide;
using UnityEngine;
namespace Assets.AR
@ -98,12 +99,14 @@ namespace Assets.AR
protected override void Start()
{
base.Start();
SetZOffset();
}
protected override void Update()
{
if (this.route == null)
return;
SetMainRiderLane();
base.Update();
var num = this.Speed;
this.Paused = this.Speed == 0;
@ -169,7 +172,24 @@ namespace Assets.AR
this.lastVisibilitylevel = this.VisibilityLevel;
}
private void SetZOffset()
{
var manager = FindObjectOfType<VideoGameManager>();
var map = manager.GetMapRoute();
this.ZOffset = map.Id == 6296 ? -4f : 0f;
}
private void SetMainRiderLane()
{
if (IsMain)
{
var manager = FindObjectOfType<VideoGameManager>();
var map = manager.GetMapRoute();
if(map.Id == 6296)
Lane = -2f;
}
}
private void FixedUpdate()
{

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

View File

@ -0,0 +1,140 @@
fileFormatVersion: 2
guid: 596384dff8e4ac74792efb98a7050735
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 512
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 512
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Windows Store Apps
maxTextureSize: 512
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 512
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 512
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,428 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &8821672318626816366
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8821672318626816367}
- component: {fileID: 8821672318626816365}
- component: {fileID: 8821672318626816364}
- component: {fileID: 4827865455385428039}
m_Layer: 5
m_Name: Distance
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8821672318626816367
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8821672318626816366}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 8821672319793893522}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 377, y: -110}
m_SizeDelta: {x: 364, y: 168}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8821672318626816365
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8821672318626816366}
m_CullTransparentMesh: 0
--- !u!114 &8821672318626816364
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8821672318626816366}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: f878f11ea5771c548ac255f4e39b8e4b, type: 3}
m_FontSize: 168
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 1
m_MaxSize: 168
m_Alignment: 0
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 1
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: 200
--- !u!114 &4827865455385428039
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8821672318626816366}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: cc35dd113658adb47867d8c21c22fb4a, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &8821672319010268339
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8821672319010268336}
- component: {fileID: 8821672319010268350}
- component: {fileID: 8821672319010268337}
- component: {fileID: 8821672319010268351}
m_Layer: 5
m_Name: Remain
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8821672319010268336
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8821672319010268339}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 8821672319793893522}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8821672319010268350
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8821672319010268339}
m_CullTransparentMesh: 0
--- !u!114 &8821672319010268337
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8821672319010268339}
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 0.392}
m_RaycastTarget: 1
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!225 &8821672319010268351
CanvasGroup:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8821672319010268339}
m_Enabled: 1
m_Alpha: 0
m_Interactable: 1
m_BlocksRaycasts: 1
m_IgnoreParentGroups: 0
--- !u!1 &8821672319686553709
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8821672319686553706}
- component: {fileID: 8821672319686553704}
- component: {fileID: 8821672319686553707}
- component: {fileID: 8821672319686553705}
m_Layer: 5
m_Name: Title
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8821672319686553706
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8821672319686553709}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 8821672319793893522}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 405, y: -207.5}
m_SizeDelta: {x: 254, y: 45}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8821672319686553704
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8821672319686553709}
m_CullTransparentMesh: 0
--- !u!114 &8821672319686553707
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8821672319686553709}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: f878f11ea5771c548ac255f4e39b8e4b, type: 3}
m_FontSize: 45
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 1
m_MaxSize: 168
m_Alignment: 1
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 1
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: REMAINING
--- !u!114 &8821672319686553705
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8821672319686553709}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e47f6ee11b78f3247a0b474b6c36e2cd, type: 3}
m_Name:
m_EditorClassIdentifier:
key:
--- !u!1 &8821672319793893525
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8821672319793893522}
- component: {fileID: 8821672319793893520}
- component: {fileID: 8821672319793893523}
m_Layer: 5
m_Name: Bg
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8821672319793893522
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8821672319793893525}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 8821672318626816367}
- {fileID: 8821672320381656758}
- {fileID: 8821672319686553706}
m_Father: {fileID: 8821672319010268336}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0}
m_AnchorMax: {x: 0.5, y: 0}
m_AnchoredPosition: {x: 0, y: 275}
m_SizeDelta: {x: 810, y: 266}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8821672319793893520
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8821672319793893525}
m_CullTransparentMesh: 0
--- !u!114 &8821672319793893523
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8821672319793893525}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: 596384dff8e4ac74792efb98a7050735, type: 3}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &8821672320381656713
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8821672320381656758}
- component: {fileID: 8821672320381656756}
- component: {fileID: 8821672320381656759}
m_Layer: 5
m_Name: Unit
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8821672320381656758
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8821672320381656713}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 8821672319793893522}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 182.5, y: -6}
m_SizeDelta: {x: 57, y: 75}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8821672320381656756
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8821672320381656713}
m_CullTransparentMesh: 0
--- !u!114 &8821672320381656759
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8821672320381656713}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: f878f11ea5771c548ac255f4e39b8e4b, type: 3}
m_FontSize: 75
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 1
m_MaxSize: 168
m_Alignment: 6
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 1
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: M

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 30146295accb0944a815749fc20e4f73
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -115,9 +115,9 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 1}
m_AnchorMax: {x: 0.5, y: 1}
m_AnchoredPosition: {x: -28.5, y: -405.3}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 90, y: 6}
m_Pivot: {x: 0.5, y: 0.5}
m_Pivot: {x: 0.25, y: 1}
--- !u!222 &4542661629369906579
CanvasRenderer:
m_ObjectHideFlags: 0

View File

@ -872,7 +872,6 @@ MonoBehaviour:
newNav: {fileID: 0}
PowerSlider: {fileID: 7737392489142060261}
PowerText: {fileID: 7737392488336084295}
manager: {fileID: 0}
--- !u!1 &7043703429314443876
GameObject:
m_ObjectHideFlags: 0
@ -2036,7 +2035,7 @@ MonoBehaviour:
m_HandleRect: {fileID: 7737392487993312576}
m_Direction: 0
m_MinValue: 0
m_MaxValue: 2000
m_MaxValue: 800
m_WholeNumbers: 0
m_Value: 0
m_OnValueChanged:

View File

@ -1,5 +1,6 @@
{
"zh": {
"REMAINING": "距离终点",
"HOT ROUTES": "热门线路",
"Ride Now": "开始",
"Back": "返回",
@ -443,6 +444,7 @@
"CancelReadyToQuit":"请取消准备后再退出!"
},
"en": {
"REMAINING": "REMAINING",
"HOT ROUTES": "HOT ROUTES",
"Ride Now": "Ride Now",
"Back": "Back",

File diff suppressed because it is too large Load Diff

View File

@ -63,6 +63,8 @@ namespace Assets.Scripts.Scenes.VideoRide
private static readonly int AnimatorSpeed = Animator.StringToHash("speed");
private static readonly int Grade = Animator.StringToHash("grade");
private static readonly int Power = Animator.StringToHash("power");
private Camera mainCamera;
protected virtual void Start()
{
@ -71,6 +73,7 @@ namespace Assets.Scripts.Scenes.VideoRide
mapData = manager.GetMapData();
ComputeNextSlope();//初始化坡度等
bone_bottle_2 = transform.Find("bone_cable_20");
mainCamera = Camera.main;
}
protected virtual void Update()
{
@ -247,19 +250,34 @@ namespace Assets.Scripts.Scenes.VideoRide
headWkg = head.transform.Find("wkg").GetComponent<Text>();
}
}
if (head != null)
{
//它们的乘积就是高度
Vector3 worldPosition = new Vector3(bone_bottle_2.position.x, bone_bottle_2.position.y+1.0f, bone_bottle_2.position.z);
var playerScreenPos = Camera.main.WorldToScreenPoint(worldPosition);
head.transform.position = playerScreenPos;
ftpImage.fillAmount = (float)(wkg / 6);
headName.text = UserName;
headWkg.text = $"{wkg}W/KG";
head.SetActive(bone_bottle_2.position.z > 0);
}
UpdateHead();
}
private void UpdateHead()
{
if (head == null) return;
//update position
var position = bone_bottle_2.position;
var worldPosition = new Vector3(position.x, position.y + transform.localScale.y, position.z);
var playerScreenPos = mainCamera.WorldToScreenPoint(worldPosition);
playerScreenPos.y += 16f;
head.transform.position = playerScreenPos;
//update info
ftpImage.fillAmount = (float)(wkg / 6);
headName.text = UserName;
headWkg.text = $"{wkg}W/KG";
}
private void OnBecameInvisible()
{
head.SetActive(false);
}
private void OnBecameVisible()
{
head.SetActive(true);
}
public void SetStartDistance(double distance)
{
this.StartDistance = distance *1000;

View File

@ -65,10 +65,12 @@ namespace Assets.Scripts.Scenes.VideoRide
public Dictionary<IRider, PlayerRenderer> rideObjs = new Dictionary<IRider, PlayerRenderer>();
private VideoUIManager _uiManager { get; set; }
protected override void Awake()
{
base.Awake();
_uiManager = FindObjectOfType<VideoUIManager>();
trainingController = GetComponent<ARTrainingController>();
mediaPlayer = FindObjectOfType<MediaPlayer>();
DeviceCache.Init(PFConstants.DeviceCacheFolder);
@ -192,19 +194,19 @@ namespace Assets.Scripts.Scenes.VideoRide
var players = FindObjectsOfType<OnlineVideoPlayer>();
foreach (var item in players)
{
var currentItem = list.Where(c => c.UserId == item.UserId).FirstOrDefault();
var currentItem = list.FirstOrDefault(c => c.UserId == item.UserId);
if (currentItem == null)
{
rideObjs.Remove(item);
visibleRiders.Remove(item);
}
}
var currentPlayerInfo = list.Where(c => c.IsSelf).FirstOrDefault();
var currentPlayerInfo = list.FirstOrDefault(c => c.IsSelf);
var needUpdateList = list.OrderByDescending(c => c.IsSelf).ToList();
//如果当前为观察者模式且currentPlayerInfo为null随机选择以为用户观察
if (currentPlayerInfo == null)
{
currentPlayerInfo = needUpdateList.Where(c => c.UserId == CurrentUserId).FirstOrDefault();
currentPlayerInfo = needUpdateList.FirstOrDefault(c => c.UserId == CurrentUserId);
if(currentPlayerInfo == null)
currentPlayerInfo = needUpdateList.FirstOrDefault();
}
@ -212,7 +214,7 @@ namespace Assets.Scripts.Scenes.VideoRide
foreach (var item in needUpdateList)
{
var onlineRider = item as OnlineRiderModel;
var visibleItem = visibleRiders.Where(c => c.UserId == item.UserId).FirstOrDefault();
var visibleItem = visibleRiders.FirstOrDefault(c => c.UserId == item.UserId);
if (visibleItem != null)
{
visibleItem.SetPlayer(onlineRider.NickName, onlineRider.Speed, onlineRider.PreDistance, onlineRider.EndDistance, item.Cadence, item.HeartRate, onlineRider.WeightKg, item.UserId, onlineRider.Power, currentPlayerInfo.EndDistance, onlineRider.FrameRate.Value);
@ -267,6 +269,7 @@ namespace Assets.Scripts.Scenes.VideoRide
CurrentUserId = App.CurrentUser.Id;
CurrentPlayer = videoPlayer.GetComponent<AbstractVideoPlayer>();
var vp = videoPlayer.GetComponent<VideoPlayer>();
vp.SetEndDistance(item.EndDistance);
CurrentPlayer.SetStartDistance(item.EndDistance);
@ -290,8 +293,7 @@ namespace Assets.Scripts.Scenes.VideoRide
public void SetCurrentMode(ARMode aRMode)
{
_aRMode = aRMode;
var uimanager = FindObjectOfType<VideoUIManager>();
uimanager.SetCurrentMode(aRMode);
_uiManager.SetCurrentMode(aRMode);
if (_aRMode != ARMode.INSPECT)
{
CurrentUserId = App.CurrentUser.Id;
@ -422,6 +424,13 @@ namespace Assets.Scripts.Scenes.VideoRide
}
return mapRoute;
}
public void ShowUpRemainTime(double remain)
{
_uiManager.ShowUpRemainTime(remain);
}
//保存骑行记录
public void SaveData(double totalDistance)
{

View File

@ -1,18 +1,22 @@
using Assets.Scenes.Ride.Scripts.Model;
using Assets.Scenes.Ride.Scripts.Model.CyclingModels;
using System;
using System.Collections;
using UnityEngine;
namespace Assets.Scripts.Scenes.VideoRide
{
public class VideoPlayer : AbstractVideoPlayer
{
private bool isSingle = true;
VideoUIManager _uimanager;
protected override void Start()
{
base.Start();
animator.Play("idle");
userId = App.CurrentUser.Id;
userName = App.CurrentUser.Nickname;
_uimanager= FindObjectOfType<VideoUIManager>();
}
public void SetEndDistance(double distance)
@ -25,12 +29,14 @@ namespace Assets.Scripts.Scenes.VideoRide
public void Complete()
{
start = false;
StartCoroutine(ShowResult());
}
private IEnumerator ShowResult()
{
yield return new WaitForSeconds(2f);
UIManager.CloseGameRoomCountDownPanel();
var uimanager= FindObjectOfType<VideoUIManager>();
if (uimanager!= null)
{
uimanager.SaveAndShowResult();
}
_uimanager?.SaveAndShowResult();
}
public override void ComputePlayer()
@ -42,8 +48,8 @@ namespace Assets.Scripts.Scenes.VideoRide
if (mockpower > 0)
{
power = mockpower;
cadance = 50;
heartRate = 160;
// cadance = 50;
// heartRate = 160;
}
//#endif
weight = App.CurrentUser.Weight;
@ -102,6 +108,7 @@ namespace Assets.Scripts.Scenes.VideoRide
recorderData.PreDistance = Math.Round(preDistance, 6, MidpointRounding.AwayFromZero);
recorderData.EndDistance = Math.Round(targetData._Distance, 6, MidpointRounding.AwayFromZero);
recorderData.RiderDatas.Add(targetData);
//默认启用多圈
if (isSingle && totalDistance >= mapData.TotalDistance)
{
@ -109,6 +116,8 @@ namespace Assets.Scripts.Scenes.VideoRide
}
}
private double RemainingDistance => Math.Round((mapData.TotalDistance - totalDistance) * 1000);
public override void Forward()
{
base.Forward();

View File

@ -166,7 +166,7 @@ namespace Assets.Scripts.Scenes.VideoRide
avHeatrate.text = record.RiderDatas.Average(c => c._HeartRate.GetValueOrDefault(0)).ToString("f0");
avSpeed.text = record.RiderDatas.Average(c => c._Speed).ToString("f1");
maxSpeed.text = record.RiderDatas.Max(c => c._Speed).ToString("f1");
//wkgText.text = Math.Round(power / record.CurrentUser.Weight, 2).ToString();
wkgText.text = Math.Round(power / record.CurrentUser.Weight, 2).ToString();
avCadence.text = record.RiderDatas.Average(c => c._Cadence).GetValueOrDefault(0).ToString("f0");
DNF.gameObject.SetActive(!record.IsCompleted);

View File

@ -14,6 +14,7 @@ namespace Assets.Scripts.Scenes.VideoRide
public class VideoUIManager : MonoBehaviour
{
GameObject button;
GameObject remainTime;
VideoGameManager manager;
VideoPlayer videoPlayer;
const float MAXPOWER = 450f;
@ -92,6 +93,29 @@ namespace Assets.Scripts.Scenes.VideoRide
}
}
}
public void ShowUpRemainTime(double remain)
{
if (remain > 110) return;
remain -= 20;
var canvas = remainTime.GetComponent<CanvasGroup>();
if (remain <= 0)
{
if (canvas.alpha == 1)
canvas.DOFade(0, 1).onComplete = () => { remainTime.SetActive(false); };
}
else
{
remainTime.SetActive(true);
remainTime.transform.Find("Bg/Distance").GetComponent<Text>().text = remain.ToString().PadLeft(2,'0');
if (canvas.alpha == 0)
canvas.DOFade(1, 1f);
}
}
private const float MAX_HEART_RATIO = 0.9f;
private float ComputeHearRateRatio(int heartRate)
{
@ -124,6 +148,7 @@ namespace Assets.Scripts.Scenes.VideoRide
GameObject explosive { get; set; }
private void Init()
{
remainTime = transform.Find("Panel/Remain").gameObject;
infoText = transform.Find("InfoText").GetComponentInChildren<Text>();
ComputerPanel = transform.Find("Panel/ComputerPanel").gameObject;
WatchPanel = transform.Find("Panel/WatchPanel").gameObject;