AR视频direction文件相关调整

This commit is contained in:
lishuo committed 2022-05-25 18:40:47 +08:00
1 parent d876c20def
commit 17c2a44e40
62 files changed
+120845 -42066

No files matched your search

@@ -76,7 +76,7 @@ namespace Assets.Scripts.Scenes.VideoRide
timer -= Time.deltaTime;
CreateHeadImage();
while (timer <= 0)
{
try
@@ -141,26 +141,35 @@ namespace Assets.Scripts.Scenes.VideoRide
}
private bool animated = false;
private float offset = 0;
private Vector3 rotation = Vector3.zero;
protected CustomRange currentRange { get; set; }
//控制角色进行向左或向右
protected virtual void Turn()
{
var currentFrame = GetCurrentFrame();
var result = manager.mockDirection.Where(c => c.Start < currentFrame && c.End > currentFrame).FirstOrDefault();
if (result != null)
currentRange = manager.mockDirection.Where(c => c.Start < currentFrame && c.End > currentFrame).FirstOrDefault();
if (currentRange != null)
{
bearing = result.Value;
bearing = currentRange.RotationY;
rotation.y = currentRange.RotationY;
rotation.z = currentRange.RotationZ;
}
else
{
rotation.y = 0;
rotation.z = 0;
bearing = 0;
}
animator.SetFloat("bearing", bearing);
var headBack = ticks % 60 == 0 && speed > 0 && bearing == 0;
var drink = ticks % 125 == 0 && speed > 0 && bearing == 0;
animator.SetFloat("bearing", bearing);
animator.SetBool("headBack", headBack);
animator.SetBool("drinking", drink);
var waiting = ratio == 0 ? 1 : 1 / ratio;
//直角拐弯
if (Math.Abs(bearing) > 30)
{
if (!animated)
@@ -181,6 +190,7 @@ namespace Assets.Scripts.Scenes.VideoRide
}
else
{
//直角拐弯回正
if (offset != 0)
{
var cpoffset = offset;
@@ -193,11 +203,31 @@ namespace Assets.Scripts.Scenes.VideoRide
};
offset = 0;
}
//正常拐弯
else
{
transform.DORotate(new Vector3(0, bearing, -bearing), waiting);
transform.DORotate(rotation, 0.6f);
}
}
}
Vector3 current;
Vector3 forward;
//0-90 右转弯 -90-0左转弯
protected virtual void TurnAround()
{
StartCoroutine(MoveTo());
}
protected virtual IEnumerator MoveTo()
{
float t = 0;
while (t < 1)
{
t += Time.deltaTime;
Vector3 v = Vector3.Lerp(current, forward, t);
current = v;
transform.DORotate(v, 0);
yield return new WaitForEndOfFrame();
}
}
//计算人物当前属性
@@ -269,6 +299,9 @@ namespace Assets.Scripts.Scenes.VideoRide
}
if (manager.CurrentPlayer != null && manager.CurrentPlayer.UserId != UserId)
return;
manager.Play(ratio);
if (ratio > 1)
{
ratio = Math.Min(ratio, 1.2f);
@@ -283,8 +316,6 @@ namespace Assets.Scripts.Scenes.VideoRide
{
animator.speed = ratio;
}
manager.Play(ratio);
}
protected virtual void ComputeRecord() { }
@@ -1,8 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DG.Tweening;
using UnityEngine;
@@ -84,7 +81,7 @@ namespace Assets.Scripts.Scenes.VideoRide
if (manager.CurrentPlayer == null || manager.CurrentPlayer.UserId != UserId)
{
var result = manager.mockDirection.Where(c => c.Start < currentFrame && c.End > currentFrame).FirstOrDefault();
bearing = result?.Value ?? 0;
bearing = result?.RotationY ?? 0;
animator.SetFloat("bearing", bearing);
}
}
@@ -24,14 +24,34 @@ namespace Assets.Scripts.Scenes.VideoRide
{
public class CustomRange
{
public int Start { get; set; }
public int End { get; set; }
public int Value { get; set; }
public int Start { get; set; }//起始帧
public int End { get; set; }//结束帧
public int PositionX { get; set; }
public int PositionY { get; set; }
public int PositionZ { get; set; }
public int RotationY { get; set; }
public int RotationZ { get; set; }
public int ShadowDirection { get; set; }
public static CustomRange Read(string s)
{
//243~573:-15,13,12
var result = s.Split(':');
var range = result[0].Split('~');
var v = result[1].Split(',');
CustomRange r = new CustomRange()
{
Start = Convert.ToInt32(range[0]),
End = Convert.ToInt32(range[1]),
RotationY = Convert.ToInt32(v[0]),
RotationZ = Convert.ToInt32(v[1]),
PositionX = Convert.ToInt32(v[2]),
};
return r;
}
}
public class VideoGameManager : DeviceServiceMonoBase
{
[SerializeField]
public VideoPlayer videoPlayer;
public AbstractVideoPlayer CurrentPlayer { get; set; }
private MapDataModel mapData { get; set; }
private MediaPlayer mediaPlayer { get; set; }
@@ -49,6 +69,7 @@ namespace Assets.Scripts.Scenes.VideoRide
public List<float> slots = new List<float>();
GameObject infoPanel;
GameObject OnlinePlayer;
GameObject OnlinePlayer_NV;
private bool isStop { get; set; }
public enum ARMode
{
@@ -69,7 +90,8 @@ namespace Assets.Scripts.Scenes.VideoRide
recordId = Guid.NewGuid().ToString();
MockDirection();
infoPanel = Resources.Load<GameObject>("UI/Prefab/AR/VideoPlayerHead");
OnlinePlayer = Resources.Load<GameObject>("UI/Prefab/OnlineVideoPlayer");
OnlinePlayer = Resources.Load<GameObject>("UI/Prefab/AR/OnlineVideoPlayer");
OnlinePlayer_NV = Resources.Load<GameObject>("UI/Prefab/AR/OnlineVideoPlayer_NV");
StartCoroutine(Init());
}
void Start()
@@ -152,7 +174,15 @@ namespace Assets.Scripts.Scenes.VideoRide
if (currentPlayer != null)
{
var onlineRider = currentPlayer as OnlineRiderModel;
var obj = Instantiate(OnlinePlayer, transform);
GameObject obj;
if (onlineRider.Sex == 1)
{
obj = Instantiate(OnlinePlayer, transform);
}
else
{
obj = Instantiate(OnlinePlayer_NV, transform);
}
var online = obj.GetComponent<OnlineVideoPlayer>();
online.SetPlayer(onlineRider.NickName, onlineRider.EndDistance-onlineRider.PreDistance, onlineRider.EndDistance, onlineRider.Cadence, onlineRider.HeartRate, onlineRider.TotalTicks, onlineRider.UserId, onlineRider.Power, onlineRider.EndDistance,onlineRider.FrameRate.Value);
obj.transform.DOMoveX(0, 1);
@@ -196,7 +226,15 @@ namespace Assets.Scripts.Scenes.VideoRide
var diff = item.EndDistance % mapData.TotalDistance - currentPlayerInfo.EndDistance % mapData.TotalDistance;
if (Math.Abs(diff * 1000) <= 50)
{
var obj = Instantiate(OnlinePlayer, transform);
GameObject obj;
if (currentPlayerInfo.Sex == 1)
{
obj = Instantiate(OnlinePlayer, transform);
}
else
{
obj = Instantiate(OnlinePlayer_NV, transform);
}
var online = obj.GetComponent<OnlineVideoPlayer>();
online.SetPlayer(onlineRider.NickName, onlineRider.EndDistance - onlineRider.PreDistance, onlineRider.EndDistance, item.Cadence, item.HeartRate, onlineRider.WeightKg, item.UserId, onlineRider.Power, currentPlayerInfo.EndDistance, onlineRider.FrameRate.Value);
obj.transform.DOMoveX(slots[currentOnlineCount], 1);
@@ -212,19 +250,28 @@ namespace Assets.Scripts.Scenes.VideoRide
_aRMode = aRMode;
var uimanager = FindObjectOfType<VideoUIManager>();
uimanager.SetCurrentMode(aRMode);
if (_aRMode == ARMode.INSPECT)
if (_aRMode != ARMode.INSPECT)
{
videoPlayer?.gameObject.SetActive(false);
}
else
{
videoPlayer?.gameObject.SetActive(true);
CurrentPlayer = videoPlayer;
InitCurrentPlayer();
ContinueAsync();
}
}
//初始化人物模型
public void InitCurrentPlayer()
{
GameObject videoPlayer;
if (App.CurrentUser.Sex == 1)
{
videoPlayer = Instantiate(Resources.Load<GameObject>("UI/Prefab/AR/VidePlayer"),transform);
}
else
{
videoPlayer = Instantiate(Resources.Load<GameObject>("UI/Prefab/AR/VidePlayer_NV"), transform);
}
CurrentPlayer = videoPlayer.GetComponent<VideoPlayer>();
}
Vector3 origin = new Vector3(0, -1, 4);
Vector3 origin = new Vector3(0, -1, 3);
//切换人物
public void ChangePlayer(int userId)
{
@@ -300,18 +347,13 @@ namespace Assets.Scripts.Scenes.VideoRide
private void MockDirection()
{
var text = Resources.Load<TextAsset>("UI/direction");
var arr = text.text.Replace("\r\n", ",").Split(',');
var arr = text.text.Replace("\r\n", " ").Split(' ');
foreach (var item in arr)
{
if (string.IsNullOrEmpty(item))
continue;
var result = item.Split(':');
var range = result[0].Split('~');
mockDirection.Add(new CustomRange() {
Start = Convert.ToInt32(range[0]),
End = Convert.ToInt32(range[1]),
Value = Convert.ToInt32(result[1]),
});
var c = CustomRange.Read(item);
mockDirection.Add(c);
}
}
//设置骑行模式
@@ -521,5 +563,10 @@ namespace Assets.Scripts.Scenes.VideoRide
return new Vector2d(0, 0);
}
}
private void OnDestroy()
{
App.gameRoomDetail = null;
}
}
}
@@ -234,6 +234,8 @@ namespace Assets.Scripts.Scenes.VideoRide
protected void Download(BaseEventData baseEvent)
{
var path = PFConstants.VideoFolder;
var filepath = path + $"/{route.FileName}";
StartCoroutine(Utils.DownloadVideo(route.FileName, route.Url
, (p, req) =>
{
@@ -249,7 +251,7 @@ namespace Assets.Scripts.Scenes.VideoRide
else
{
slider.value = 100;
manager.SetMedia(p);
manager.SetMedia(filepath);
}
}
));
+34 -4
View File
@@ -1,5 +1,6 @@
using Assets.Scenes.Ride.Scripts;
using Assets.Scenes.Ride.Scripts.Model;
using Assets.Scenes.Ride.Scripts.Model.CyclingModels;
using DG.Tweening;
using System;
using System.Linq;
@@ -44,14 +45,26 @@ namespace Assets.Scripts.Scenes.VideoRide
{
base.ComputeAnimator();
}
protected override void Turn()
{
base.Turn();
if (currentRange != null)
{
transform.DOMoveX(currentRange.PositionX, 0.8f);
}
else
{
transform.DOMoveX(1, 0.8f);
}
}
protected override void ComputePlayer()
{
heartRate = manager.UpDateHeart();
power = manager.UpdatePower();
cadance = manager.UpdateCadence();
//#if UNITY_EDITOR
power = 350;
cadance = 150;
power = 100;
cadance = 70;
heartRate = 160;
//#endif
weight = App.CurrentUser.Weight;
@@ -59,10 +72,27 @@ namespace Assets.Scripts.Scenes.VideoRide
wkg = Math.Round(power / weight, 2);
var mainFrame = manager.GetCurrentFrame();
var result = manager.mockDirection.Where(c => c.Start < mainFrame && c.End > mainFrame).FirstOrDefault();
bearing = result?.Value ?? 0;
bearing = result?.RotationY ?? 0;
//发送阻力
manager.TrackResistance(currentSlope);
base.ComputePlayer();
HandleForGameRoom();
}
private bool gameRoomHandled { get; set; }
private void HandleForGameRoom()
{
var model = manager.cyclingController as GameModel;
if (model != null && model.FirstEndTime.HasValue && !gameRoomHandled)
{
gameRoomHandled = true;
var gap = model.FirstEndTime.Value - UIManager.Now.GetDateTime();
var seconds = Math.Floor(gap.TotalSeconds);
UIManager.ShowGameRoomCountDownPanel((int)seconds, () => {
Upload();
var uiManager = FindObjectOfType<VideoUIManager>();
uiManager.ShowResultPanel();
});
}
}
//控制视频播放速度
protected override void ComputeVideo()
@@ -89,7 +119,7 @@ namespace Assets.Scripts.Scenes.VideoRide
_TotalClimb = totalClimb,
_FrameRate = manager.GetCurrentFrame()
};
var preDistance = totalDistance >= mapData.TotalDistance ? targetData._Distance : targetData._Distance - distance;
var preDistance = targetData._Distance - distance;//totalDistance >= mapData.TotalDistance ? targetData._Distance : targetData._Distance - distance;
recorderData.PreDistance = Math.Round(preDistance, 6, MidpointRounding.AwayFromZero);
recorderData.EndDistance = Math.Round(targetData._Distance, 6, MidpointRounding.AwayFromZero);
recorderData.RiderDatas.Add(targetData);
@@ -216,6 +216,15 @@ namespace Assets.Scripts.Scenes.VideoRide
cameraImage.SetActive(false);
}
}
public void ShowResultPanel()
{
resultPanel.SetActive(true);
resultPanel.transform.SetAsLastSibling();
var videoResultScript = resultPanel.GetComponent<VideoResultScript>();
videoResultScript.InjectController(manager);
videoResultScript.SetDataSource(manager.cyclingController.recorderData);
}
private void QuitClick(BaseEventData e)
{
if (manager._aRMode == VideoGameManager.ARMode.RIDE)