AR第二个视频发布
This commit is contained in:
1 parent
573aa2ff4c
commit
431d128ad8
19 files changed
+3813
-2975
No files matched your search
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user