AR以及对战房间部分代码重构
This commit is contained in:
1 parent
fb4da81ce2
commit
a149a7c08e
13 files changed
+280
-262
No files matched your search
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user