AR以及对战房间部分代码重构

This commit is contained in:
lishuo committed 2023-03-10 14:22:41 +08:00
1 parent fb4da81ce2
commit a149a7c08e
13 files changed
+280 -262

No files matched your search

+2 -3
View File
@@ -100,15 +100,14 @@ namespace Assets.AR
if (arObject.TimeTransforms != null && arObject.TimeTransforms.Length > 1)
arObject.UpdateByTimeDefinitions(videoFrame);
arObject.UpdateVisibility(videoFrame, visibilityRear, visibilityFront, this.IsMultilap);
bool flag = this.IsObjectActive(arObject);
var flag = this.IsObjectActive(arObject);
arObject.gameObject.SetActive(flag);
}
}
protected virtual bool IsObjectActive(ARGameObject arObject) => (double)arObject.VisibilityLevel > 0.0 ;
protected virtual Material GetTrajectoryMaterial() => this.matShadow;
protected virtual void Update()
{
+1
View File
@@ -390,6 +390,7 @@ namespace Assets.AR
}
if (index1 + 1 == this.ShadowIntensities.Length)
return this.ShadowIntensities[this.ShadowIntensities.Length - 1];
float t = Mathf.InverseLerp(this.ShadowIntensityFrames[index1], this.ShadowIntensityFrames[index1 + 1], distance);
return Mathf.Lerp(this.ShadowIntensities[index1], this.ShadowIntensities[index1 + 1], t);
}
+90 -61
View File
@@ -5,6 +5,7 @@ using UnityEngine;
using RenderHeads.Media.AVProVideo;
using Assets.Scripts.Scenes.VideoRide;
using Assets.Scenes.Ride.Scripts.Model.RiderModels;
using UnityEngine.Assertions;
namespace Assets.AR
{
@@ -27,6 +28,7 @@ namespace Assets.AR
private VideoGameManager manager;
public int VisibleModels { get; private set; }
private int visibleModelsLimit = 20;
public int VisibleRiderTitlesLimit => this.VisibleModelsLimit + 10;
public int VisibleModelsLimit
{
get => this.visibleModelsLimit;
@@ -83,77 +85,104 @@ namespace Assets.AR
protected override void Update()
{
if (this.videoPlayer == null)
return;
if (videoPlayer == null ) return;
timers -= Time.deltaTime;
while (timers <= 0)
{
foreach (var dic in manager.rideObjs)
{
var item = dic.Value;
if (!this.arObjects.Contains(item))
this.arObjects.Add(item);
if (!this.riderObjects.ContainsKey(item.UserId))
this.riderObjects.Add(item.UserId, item);
item.PreSpeed = item.Speed;
item.Speed = (float)dic.Key.OnlineSpeed;
item.DeltaDistance = (float)(dic.Key.EndDistance - dic.Key.PreDistance);
item.Route = Route;
item.VideoSync = videoPointsSync;
item.IsAtFinish = dic.Key.EndDistance >= manager.GetMapRoute().Distance*1000f;
if (dic.Key.UserId == manager.CurrentUserId)
{
mainRiderObject = item;
//如果速度为0就停止播放视频
if (item.DeltaDistance == 0 || item.Speed == 0)
{
item.DeltaDistance = 0;
videoPlayer.Pause();
}
else
{
videoPlayer.Resume();
}
}
}
this.arObjects.RemoveAll(c => !manager.rideObjs.Select(m => m.Key.UserId.ToString()).Contains(c.UserId.ToString()));
var keys = riderObjects.Keys.ToList();
foreach (var item in keys)
{
if (!manager.rideObjs.Keys.Where(c => c.UserId == item).Any())
{
riderObjects.Remove(item);
}
}
UpdateRiders();
RemoveRiders();
timers += 0.2f;
}
if (mainRiderObject == null || Route == null)
{
videoPlayer?.Pause();
videoPlayer.Pause();
return;
}
var delta = Time.deltaTime;
foreach (var obj in this.riderObjects.Values)
{
if(obj.DeltaDistance == 0 )continue;
obj.Distance = Mathf.Lerp(obj.Distance, obj.Distance + obj.DeltaDistance, delta);
obj.RouteDistance = Mathf.Lerp(obj.RouteDistance, obj.RouteDistance + obj.DeltaDistance, delta);
}
this.PlayFrameDistance();
VideoPlayerControl.UpdateVideoPlayRate(mainRiderObject.PreSpeed, mainRiderObject.Distance);
this.FrameIndexDistanceCorrection = this.VideoPlayerControl.FrameIndexDistanceCorrection;
//this.FollowedRiderId = mainObject.Id;
this.UpdateCameraFollowDistance();
base.Update();
this.UpdateRidersVisibility();
this.UpdateRidersLean();
this.UpdateBackLight();
this.SetUpVideoControlMode();
}
/// <summary>
/// 更新骑行者的实时数据
/// </summary>
private void UpdateRiders()
{
foreach (var dic in manager.rideObjs)
{
var item = dic.Value;
if (!this.arObjects.Contains(item))
this.arObjects.Add(item);
if (!this.riderObjects.ContainsKey(item.UserId))
this.riderObjects.Add(item.UserId, item);
item.PreSpeed = item.Speed;
item.Speed = (float)dic.Key.OnlineSpeed;
item.DeltaDistance = (float)(dic.Key.EndDistance - dic.Key.PreDistance);
item.Route = Route;
item.VideoSync = videoPointsSync;
item.IsAtFinish = dic.Key.EndDistance >= manager.GetMapRoute().Distance*1000f;
if (dic.Key.UserId != manager.CurrentUserId) continue;
mainRiderObject = item;
//如果速度为0就停止播放视频
if (item.DeltaDistance == 0 || item.Speed == 0)
{
item.DeltaDistance = 0;
videoPlayer.Pause();
}
else
{
videoPlayer.Resume();
}
}
}
/// <summary>
/// 移除不可见的骑行者
/// </summary>
private void RemoveRiders()
{
this.arObjects.RemoveAll(c => !manager.rideObjs.Select(m => m.Key.UserId.ToString()).Contains(c.UserId.ToString()));
var keys = riderObjects.Keys.ToList();
foreach (var item in keys)
{
if (!manager.rideObjs.Keys.Where(c => c.UserId == item).Any())
{
riderObjects.Remove(item);
}
}
}
/// <summary>
/// 将每秒的距离转换为每帧的距离
/// </summary>
private void PlayFrameDistance()
{
var delta = Time.deltaTime;
foreach (var obj in this.riderObjects.Values.Where(obj => obj.DeltaDistance != 0))
{
obj.Distance = Mathf.Lerp(obj.Distance, obj.Distance + obj.DeltaDistance, delta);
obj.RouteDistance = Mathf.Lerp(obj.RouteDistance, obj.RouteDistance + obj.DeltaDistance, delta);
}
}
/// <summary>
/// 设置camera的跟随距离
/// </summary>
private void SetUpVideoControlMode()
{
if (Input.GetKeyDown(KeyCode.F))
this.SetVideoControlMode(VideoPlayMode.Front);
if (Input.GetKeyDown(KeyCode.P))
@@ -162,7 +191,10 @@ namespace Assets.AR
return;
this.SetVideoControlMode(VideoPlayMode.Rear);
}
//创建
/// <summary>
/// 设置光线
/// </summary>
private void SetUpLight()
{
this.arLight.type = LightType.Directional;
@@ -170,7 +202,7 @@ namespace Assets.AR
this.arLight.shadows = LightShadows.Soft;
this.arLight.shadowStrength = 1f;
GameObject gameObject2 = new GameObject("ARBackLight");
var gameObject2 = new GameObject("ARBackLight");
gameObject2.layer = this.gameObject.layer;
gameObject2.transform.SetParent(this.transform);
this.arBackLight = gameObject2.AddComponent<Light>();
@@ -178,9 +210,8 @@ namespace Assets.AR
this.arBackLight.transform.rotation = Quaternion.Euler(0.0f, 0.0f, 0.0f);
this.arBackLight.shadows = LightShadows.None;
this.arBackLight.intensity = 0.5f;
//this.arBackLight.cullingMask = 512;
}
//设置video显示模式
public void SetVideoControlMode(VideoPlayMode mode)
{
if (mode == this.VideoControlMode)
@@ -196,7 +227,6 @@ namespace Assets.AR
//更新摄像机的位置
private void UpdateCameraFollowDistance()
{
//this.NearViewMode = this.RiderCameraDistance == AR.CameraDistance.Near;
var cameraFollowDistance = GetCameraFollowDistance(this.RiderCameraDistance);
this.VideoPlayerControl.CameraFollowDistance = cameraFollowDistance;
}
@@ -442,7 +472,6 @@ namespace Assets.AR
}
}
}
public int VisibleRiderTitlesLimit => this.VisibleModelsLimit + 10;
private void UpdateVisibleRiders()
{
var visibilityModels = ARGameObject.MaxDistanceVisibilityModels;