From 71b61559466afa4c16a4a2dab940bb5e63cd325e Mon Sep 17 00:00:00 2001 From: lishuo Date: Mon, 20 Feb 2023 18:31:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B9=E6=B3=95=E9=87=8D=E5=91=BD=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/AR/ARGameObjectFactory.cs | 58 ++++++++--------- Assets/AR/ARGameObjectsController.cs | 36 +++++------ Assets/AR/ARLaneGameObject.cs | 7 +-- Assets/AR/ARLaneGameObjectsController.cs | 8 +-- Assets/AR/ARTrainingController.cs | 80 ++++++++---------------- Assets/AR/ARVideoPlayerControl.cs | 19 +++--- Assets/AR/TestPlayer.cs | 8 +-- 7 files changed, 88 insertions(+), 128 deletions(-) diff --git a/Assets/AR/ARGameObjectFactory.cs b/Assets/AR/ARGameObjectFactory.cs index 0d116ced..16481867 100644 --- a/Assets/AR/ARGameObjectFactory.cs +++ b/Assets/AR/ARGameObjectFactory.cs @@ -32,45 +32,45 @@ namespace Assets.AR ARGameObjectFactory.CreateVertices(frame, route, lOffset, rOffset, out left, out right, margin); if (ARGameObjectFactory.IsValidVertex(left) && ARGameObjectFactory.IsValidVertex(right)) { - Vector3[] vector3Array2 = vector3Array1; - int index1 = num2; - int num4 = index1 + 1; - Vector3 vector3_1 = left; + var vector3Array2 = vector3Array1; + var index1 = num2; + var num4 = index1 + 1; + var vector3_1 = left; vector3Array2[index1] = vector3_1; - Vector3[] vector3Array3 = vector3Array1; - int index2 = num4; + var vector3Array3 = vector3Array1; + var index2 = num4; num2 = index2 + 1; Vector3 vector3_2 = right; vector3Array3[index2] = vector3_2; - int[] numArray1 = indices; - int index3 = num3; - int num5 = index3 + 1; - int num6 = num2 - 3; + var numArray1 = indices; + var index3 = num3; + var num5 = index3 + 1; + var num6 = num2 - 3; numArray1[index3] = num6; - int[] numArray2 = indices; - int index4 = num5; - int num7 = index4 + 1; - int num8 = num2 - 4; + var numArray2 = indices; + var index4 = num5; + var num7 = index4 + 1; + var num8 = num2 - 4; numArray2[index4] = num8; - int[] numArray3 = indices; - int index5 = num7; - int num9 = index5 + 1; - int num10 = num2 - 1; + var numArray3 = indices; + var index5 = num7; + var num9 = index5 + 1; + var num10 = num2 - 1; numArray3[index5] = num10; - int[] numArray4 = indices; - int index6 = num9; - int num11 = index6 + 1; - int num12 = num2 - 4; + var numArray4 = indices; + var index6 = num9; + var num11 = index6 + 1; + var num12 = num2 - 4; numArray4[index6] = num12; - int[] numArray5 = indices; - int index7 = num11; - int num13 = index7 + 1; - int num14 = num2 - 2; + var numArray5 = indices; + var index7 = num11; + var num13 = index7 + 1; + var num14 = num2 - 2; numArray5[index7] = num14; - int[] numArray6 = indices; - int index8 = num13; + var numArray6 = indices; + var index8 = num13; num3 = index8 + 1; - int num15 = num2 - 1; + var num15 = num2 - 1; numArray6[index8] = num15; } } diff --git a/Assets/AR/ARGameObjectsController.cs b/Assets/AR/ARGameObjectsController.cs index 8f1eac96..1cc24697 100644 --- a/Assets/AR/ARGameObjectsController.cs +++ b/Assets/AR/ARGameObjectsController.cs @@ -24,7 +24,7 @@ namespace Assets.AR protected Dictionary trajectorySegments = new Dictionary(); protected int lapCount = 1; protected double lapLength; - + public bool AR360Version { get; private set; } public Camera UnityCamera { get; protected set; } @@ -87,7 +87,7 @@ namespace Assets.AR //this.trajectoryObject.layer = 9; } - protected virtual void UpdateObjects( + protected virtual void UpdateGameObjects( float videoFrame, float visibilityRear, float visibilityFront) @@ -97,22 +97,14 @@ namespace Assets.AR arObject.CameraPositionOffset = this.cameraPositionOffset; if (arObject is ARLaneGameObject arLaneObject) arLaneObject.FrameIndexDistanceCorrection = this.FrameIndexDistanceCorrection; - //if (this.SelectedPanorama != null && (arObject.ObjectType == ARObjectType.Box || arObject.ObjectType == ARObjectType.Sphere)) - //{ - // arObject.gameObject.SetActive(false); - //} - //else - { - if (arObject.TimeTransforms != null && arObject.TimeTransforms.Length > 1) - arObject.UpdateByTimeDefinitions(videoFrame); - arObject.UpdateVisibility(videoFrame, visibilityRear, visibilityFront, this.IsMultilap); - bool flag = this.IsArObjectActive(arObject); - arObject.gameObject.SetActive(flag); - } + if (arObject.TimeTransforms != null && arObject.TimeTransforms.Length > 1) + arObject.UpdateByTimeDefinitions(videoFrame); + arObject.UpdateVisibility(videoFrame, visibilityRear, visibilityFront, this.IsMultilap); + bool flag = this.IsObjectActive(arObject); } } - protected virtual bool IsArObjectActive(ARGameObject arObject) => (double)arObject.VisibilityLevel > 0.0 ; + protected virtual bool IsObjectActive(ARGameObject arObject) => (double)arObject.VisibilityLevel > 0.0 ; protected virtual Material GetTrajectoryMaterial() => this.matShadow; @@ -123,23 +115,23 @@ namespace Assets.AR if (this.Route == null) return; - float num1 = this.videoPlayer.CurrentFrame - (float)this.Route.VideoFrameOffset; + var num1 = this.videoPlayer.CurrentFrame - (float)this.Route.VideoFrameOffset; { this.cameraPositionOffset = this.Route.GetCameraPosition(num1) - this.CameraOriginOffset; - Camera.main.transform.position = this.CameraOriginOffset; - Camera.main.transform.rotation = this.Route.GetCameraRotation(num1); + UnityCamera.transform.position = this.CameraOriginOffset; + UnityCamera.transform.rotation = this.Route.GetCameraRotation(num1); //this.Route.SetCameraProjection(num1, Camera.main); //TODO:暂时注释掉 } this.CameraDistance = this.videoSync.GetDistanceForVideoFrame(num1 + this.FrameIndexDistanceCorrection); - float num2 = Mathf.Min(float.MaxValue, this.Route.GetVisibility(num1)); - float num3 = num2; - float visibilityRear = 200f; + var num2 = Mathf.Min(float.MaxValue, this.Route.GetVisibility(num1)); + var num3 = num2; + var visibilityRear = 200f; if ((double)num3 == 0.0) num3 = 600f; if ((double)visibilityRear == 0.0) visibilityRear = 600f; this.UpdateTrajectory(num1, num3);//更新轨迹 - this.UpdateObjects(num1, visibilityRear, num3);//更新骑手等位置 + this.UpdateGameObjects(num1, visibilityRear, num3);//更新骑手等位置 } diff --git a/Assets/AR/ARLaneGameObject.cs b/Assets/AR/ARLaneGameObject.cs index e4df6379..a85c1b08 100644 --- a/Assets/AR/ARLaneGameObject.cs +++ b/Assets/AR/ARLaneGameObject.cs @@ -1,5 +1,4 @@ using UnityEngine; -using DG.Tweening; namespace Assets.AR { @@ -56,9 +55,9 @@ namespace Assets.AR public override void UpdateTransform() { PositionOffset = Vector3.up * route.CameraHeight * (-1); - Quaternion cameraRotation = this.GetCameraRotation(this.frame - this.FrameIndexDistanceCorrection); - Vector3 filteredCameraPosition = this.GetFilteredCameraPosition(this.frame - this.FrameIndexDistanceCorrection); - Vector3 vector3 = Vector3.left * (this.route.LeftHanded ? -1f : 1f) * (this.LaneWidth * (this.Lane + this.LaneCamera) - this.BaseOffset); + var cameraRotation = this.GetCameraRotation(this.frame - this.FrameIndexDistanceCorrection); + 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); this.transform.position = targetPos; this.transform.rotation = cameraRotation * Quaternion.Euler(this.RotationOffset) * Quaternion.Euler(this.Lean); diff --git a/Assets/AR/ARLaneGameObjectsController.cs b/Assets/AR/ARLaneGameObjectsController.cs index a2de26b9..e1d6e6da 100644 --- a/Assets/AR/ARLaneGameObjectsController.cs +++ b/Assets/AR/ARLaneGameObjectsController.cs @@ -37,12 +37,12 @@ namespace Assets.AR this.RiderCountInStartRow = Mathf.Max(1, Mathf.CeilToInt(this.StartRegionRouteWidth / 0.7f)); } - protected override void UpdateObjects( + protected override void UpdateGameObjects( float videoFrame, float visibilityRear, float visibilityFront) { - base.UpdateObjects(videoFrame, visibilityRear, visibilityFront);//控制3d物体显示隐藏 + base.UpdateGameObjects(videoFrame, visibilityRear, visibilityFront);//控制3d物体显示隐藏 if (this.Route == null || this.videoSync == null) return; this.DetectRidersCollisions(this.CameraDistance);//计算3d物体的位置和转向 @@ -68,7 +68,7 @@ namespace Assets.AR { if ((double)collision.RouteDistance < 200.0) { - collision.Distance = this.GetModelRouteDistance(collision.StartPosition, collision.RouteDistance); + collision.Distance = this.GetRouteDistance(collision.StartPosition, collision.RouteDistance); collision.DistanceSort = collision.Distance; } } @@ -229,7 +229,7 @@ namespace Assets.AR return startOffset; } - public float GetModelRouteDistance(int startPosition, float routeDistance) + public float GetRouteDistance(int startPosition, float routeDistance) { if (!this.AllowStartOrder || (double)routeDistance >= 200.0) return routeDistance; diff --git a/Assets/AR/ARTrainingController.cs b/Assets/AR/ARTrainingController.cs index bc2dd23d..26283847 100644 --- a/Assets/AR/ARTrainingController.cs +++ b/Assets/AR/ARTrainingController.cs @@ -143,7 +143,7 @@ namespace Assets.AR this.FrameIndexDistanceCorrection = this.VideoPlayerControl.FrameIndexDistanceCorrection; //this.FollowedRiderId = mainObject.Id; this.UpdateCameraFollowDistance(); - VideoPlayerControl.UpdateVideoPlaybackSpeed(mainRiderObject.PreSpeed, mainRiderObject.Distance); + VideoPlayerControl.UpdateVideoPlayRate(mainRiderObject.PreSpeed, mainRiderObject.Distance); base.Update(); this.UpdateRidersVisibility(); this.UpdateRidersLean(); @@ -207,9 +207,9 @@ namespace Assets.AR this.VideoPlayerControl.CameraFollowDistance = cameraFollowDistance; } //人物是否显示 - protected override bool IsArObjectActive(ARGameObject arObject) + protected override bool IsObjectActive(ARGameObject arObject) { - bool flag = base.IsArObjectActive(arObject); + var flag = base.IsObjectActive(arObject); if ((UnityEngine.Object)arObject != (UnityEngine.Object)this.mainRiderObject) return flag; if ((double)this.VideoPlayerControl.CameraFollowDistance > 0.0 || this.AR360Version) @@ -451,23 +451,18 @@ namespace Assets.AR public int VisibleRiderTitlesLimit => this.VisibleModelsLimit + 10; private void UpdateVisibleRiders() { - float visibilityModels = ARGameObject.MaxDistanceVisibilityModels; - float visibilityDistance = this.MaximumVisibilityDistance; - float routeDistance = this.CameraDistance; - bool flag = this.AllowStartOrder && (double)routeDistance < 200.0; - float num1 = flag ? visibilityModels : visibilityDistance; - float a1 = this.videoPlayer.IsRear ? visibilityDistance : 1f; - int riderTitlesLimit = this.VisibleRiderTitlesLimit; - int a2 = 5; - //if (this.SelectedPanorama != null && this.RouteVideo.Rider != null) - //{ - // routeDistance = this.GetModelRouteDistance(this.RouteVideo.Rider.Id, (float)this.RouteVideo.Rider.LapDistance); - // a1 = flag ? visibilityModels : visibilityDistance; - // a2 = riderTitlesLimit / 2; - //} - float num2 = Mathf.Max(a1, this.GetOvertakingThreshold(routeDistance) + 1f); - float distance1 = routeDistance - num2; - float distance2 = routeDistance + num1; + var visibilityModels = ARGameObject.MaxDistanceVisibilityModels; + var visibilityDistance = this.MaximumVisibilityDistance; + var routeDistance = this.CameraDistance; + var flag = this.AllowStartOrder && (double)routeDistance < 200.0; + var num1 = flag ? visibilityModels : visibilityDistance; + var a1 = this.videoPlayer.IsRear ? visibilityDistance : 1f; + var riderTitlesLimit = this.VisibleRiderTitlesLimit; + var a2 = 5; + + var num2 = Mathf.Max(a1, this.GetOvertakingThreshold(routeDistance) + 1f); + var distance1 = routeDistance - num2; + var distance2 = routeDistance + num1; float num3; if (flag) { @@ -475,33 +470,23 @@ namespace Assets.AR } else { - float videoFrameAtDistance1 = this.videoSync.GetVideoFrameAtDistance(distance1); - float videoFrameAtDistance2 = this.videoSync.GetVideoFrameAtDistance(distance2); + var videoFrameAtDistance1 = this.videoSync.GetVideoFrameAtDistance(distance1); + var videoFrameAtDistance2 = this.videoSync.GetVideoFrameAtDistance(distance2); num3 = (float)(0.5 * ((double)(this.Route.GetLeftSideOffset(videoFrameAtDistance1) + this.Route.GetRightSideOffset(videoFrameAtDistance1)) + (double)(this.Route.GetLeftSideOffset(videoFrameAtDistance2) + this.Route.GetRightSideOffset(videoFrameAtDistance2)))); } - float num4 = num3 / 0.7f; - float num5 = this.paused ? 0.0f : 0.5f; - float maxLane = Math.Max(0.0f, num4 - num5); - List visibleRiderItemList1 = new List(); - List visibleRiderItemList2 = new List(); - //if (this.SelectedPanorama == null || this.RouteVideo.Rider == null || this.RouteVideo.Rider.Id != this.panoramaRidersPivotId) - //{ - // this.panoramaRiders = (List)null; - // this.panoramaRidersPivotId = -1; - //} - //if (this.panoramaRidersPivotId != -1 && this.riderObjects.ContainsKey(this.panoramaRidersPivotId) && ((!(this.riderObjects[this.panoramaRidersPivotId] is BaseRenderer riderObject) ? 0 : (riderObject.Paused ? 1 : 0)) != 0 || this.riders[this.panoramaRidersPivotId].Speed == 0.0)) - //{ - // this.panoramaRiders = (List)null; - // this.panoramaRidersPivotId = -1; - //} + var num4 = num3 / 0.7f; + var num5 = this.paused ? 0.0f : 0.5f; + var maxLane = Math.Max(0.0f, num4 - num5); + var visibleRiderItemList1 = new List(); + var visibleRiderItemList2 = new List(); + var routeRiders = this.riders.Values; - //if (this.SelectedPanorama != null && this.panoramaRiders != null) - // routeRiders = (IEnumerable)this.panoramaRiders; + foreach (var rider in routeRiders) { if (!rider.IsFinished) { - float modelRouteDistance = this.GetModelRouteDistance(0, (float)rider.RouteDistance); + float modelRouteDistance = this.GetRouteDistance(0, (float)rider.RouteDistance); float num6 = modelRouteDistance - routeDistance; if (this.IsMultilap) { @@ -558,14 +543,9 @@ namespace Assets.AR visibleRiderItemList2.Sort((Comparison)((p1, p2) => p1.DeltaDistance.CompareTo(p2.DeltaDistance))); this.RemoveRidersOutside(visibleRiderItemList1, maxLane); this.RemoveRidersOutside(visibleRiderItemList2, maxLane); - //if (this.GroupLeaderUserId > 0) - //{ - // this.PrioritizeRider(visibleRiderItemList1, (Predicate)(i => this.IsGroupLeader(i.Rider))); - // this.PrioritizeRider(visibleRiderItemList2, (Predicate)(i => this.IsGroupLeader(i.Rider))); - //} this.PrioritizeRider(visibleRiderItemList1, (Predicate)(i => this.IsMainRider(i.Rider))); this.PrioritizeRider(visibleRiderItemList2, (Predicate)(i => this.IsMainRider(i.Rider))); - List visibleRiderItemList3 = new List(); + var visibleRiderItemList3 = new List(); if (!this.videoPlayer.IsRear) { int num8 = Mathf.Min(a2, visibleRiderItemList1.Count); @@ -606,12 +586,6 @@ namespace Assets.AR } } this.VisibleModels = num12; - //if (this.SelectedPanorama == null || this.RouteVideo.Rider == null || this.panoramaRiders != null) - // return; - //this.panoramaRiders = new List(); - //foreach (VisibleRiderItem visibleRiderItem in this.visibleRiders.Values) - // this.panoramaRiders.Add(visibleRiderItem.Rider); - //this.panoramaRidersPivotId = this.RouteVideo.Rider.Id; } private void PrioritizeRider( @@ -621,7 +595,7 @@ namespace Assets.AR int index = list.FindIndex(predicate); if (index == -1) return; - VisibleRiderItem visibleRiderItem = list[index]; + var visibleRiderItem = list[index]; list.RemoveAt(index); list.Insert(0, visibleRiderItem); } diff --git a/Assets/AR/ARVideoPlayerControl.cs b/Assets/AR/ARVideoPlayerControl.cs index 9ff19f70..9df22374 100644 --- a/Assets/AR/ARVideoPlayerControl.cs +++ b/Assets/AR/ARVideoPlayerControl.cs @@ -82,7 +82,7 @@ namespace Assets.AR private void SkipVideoToFrame(long frame) => this.VideoPlayer.Seek(frame); - public void UpdateVideoPlaybackSpeed(float speed, float routeDistance) + public void UpdateVideoPlayRate(float speed, float routeDistance) { if (!this.AllowUpdate) return; @@ -138,22 +138,22 @@ namespace Assets.AR } else { - double totalSeconds = DateTime.UtcNow.Subtract(this.lastPlaybackSpeedChange).TotalSeconds; + var totalSeconds = DateTime.UtcNow.Subtract(this.lastPlaybackSpeedChange).TotalSeconds; if (totalSeconds >= 0.0 && totalSeconds < 0.20000000298023224) return; - float num3 = (float)totalSeconds; - float num4 = num3 * speed; + var num3 = (float)totalSeconds; + var num4 = num3 * speed; var offset = this.VideoSyncSource.GetDistanceForVideoFrame((float)((double)this.VideoPlayer.CurrentFrame - (double)this.VideoFrameOffset + (double)num3 * (double)this.VideoPlayer.PlaybackSpeed * (double)this.VideoPlayer.FrameRate)); var left = (double)Math.Abs(distance + num4 - offset); var right = (double)Math.Abs(this.CameraDistanceError); if (left <= right) return; - float videoFrameAtDistance2 = this.VideoSyncSource.GetVideoFrameAtDistance(routeDistance + num4); - float num5 = this.VideoSyncSource.AverageVideoSpeed(videoFrameAtDistance1, videoFrameAtDistance2); + var videoFrameAtDistance2 = this.VideoSyncSource.GetVideoFrameAtDistance(routeDistance + num4); + var num5 = this.VideoSyncSource.AverageVideoSpeed(videoFrameAtDistance1, videoFrameAtDistance2); var ratio = ((double)num5 != 0.0 ? speed / num5 : 0.0f); var deltaRatio = (float)(((double)frame - ((double)this.VideoPlayer.CurrentFrame - (double)this.VideoFrameOffset)) / 2.0) / this.VideoPlayer.FrameRate; - float playbackSpeed = Mathf.Clamp(ratio + deltaRatio, 0.0f, 1.5f); + var playbackSpeed = Mathf.Clamp(ratio + deltaRatio, 0.0f, 1.5f); //Debug.Log(playbackSpeed); if ((double)playbackSpeed == (double)this.VideoPlayer.PlaybackSpeed || !this.VideoPlayer.SetPlaybackSpeed(playbackSpeed)) return; @@ -161,10 +161,5 @@ namespace Assets.AR } } } - - internal void UpdateVideoPlaybackSpeed(double speed, float distance) - { - throw new NotImplementedException(); - } } } diff --git a/Assets/AR/TestPlayer.cs b/Assets/AR/TestPlayer.cs index e709f653..92cd4045 100644 --- a/Assets/AR/TestPlayer.cs +++ b/Assets/AR/TestPlayer.cs @@ -126,7 +126,7 @@ namespace Assets.Scripts.Scenes.VideoRide } } this.UpdateCameraFollowDistance(); - VideoPlayerControl.UpdateVideoPlaybackSpeed(mainObject.Speed, mainObject.distance); + VideoPlayerControl.UpdateVideoPlayRate(mainObject.Speed, mainObject.distance); Fps.text = this.mediaPlayer.Control.GetCurrentTimeFrames().ToString(); this.FollowedRiderId = 1; base.Update(); @@ -163,12 +163,12 @@ namespace Assets.Scripts.Scenes.VideoRide { this.RiderCameraDistance = AR.CameraDistance.Middle; this.NearViewMode = this.RiderCameraDistance == AR.CameraDistance.Near; - float cameraFollowDistance = GetCameraFollowDistance(this.RiderCameraDistance); + var cameraFollowDistance = GetCameraFollowDistance(this.RiderCameraDistance); this.VideoPlayerControl.CameraFollowDistance = cameraFollowDistance; } - protected override bool IsArObjectActive(ARGameObject arObject) + protected override bool IsObjectActive(ARGameObject arObject) { - bool flag = base.IsArObjectActive(arObject); + var flag = base.IsObjectActive(arObject); if ((UnityEngine.Object)arObject != (UnityEngine.Object)this.mainObject) return flag; if ((double)this.VideoPlayerControl.CameraFollowDistance > 0.0 || this.AR360Version)