对战与AR骑行相关逻辑修改

This commit is contained in:
lishuo committed 2022-08-24 18:43:43 +08:00
1 parent 3bcb3ee83e
commit 89b5275efd
64 files changed
+50131 -29495

No files matched your search

@@ -52,6 +52,10 @@ namespace Assets.Scripts.Scenes.VideoRide
Camera camera { get; set; }
float currenPlayerHeight;
Transform bone_bottle_2 { get; set; }
//切换视角
public double offsetX = 0d;
public double offsetY = 0d;
public double offsetZ = 0d;
protected virtual void Start()
{
@@ -142,15 +146,25 @@ namespace Assets.Scripts.Scenes.VideoRide
{
if (animator != null)
{
animator.SetFloat("preSpeed", (float)preSpeed);
animator.SetFloat("speed", (float)speed);
animator.SetFloat("grade", (float)currentSlope);
animator.SetFloat("power", (float)power);
//播放喝水和回头的动画
var headBack = ticks % 60 == 0 && speed > 0;
var drink = ticks % 125 == 0 && speed > 0;
animator.SetBool("headBack", headBack);
animator.SetBool("drinking", drink);
if (manager._viewMode == VideoGameManager.ViewMode.FIRST &&manager.CurrentPlayer.UserId == App.CurrentUser.Id)
{
animator.SetFloat("preSpeed", (float)preSpeed);
animator.SetFloat("speed", (float)Math.Min(speed,30));
animator.SetFloat("grade", (float)currentSlope);
animator.SetFloat("power", (float)power);
}
else
{
animator.SetFloat("preSpeed", (float)preSpeed);
animator.SetFloat("speed", (float)speed);
animator.SetFloat("grade", (float)currentSlope);
animator.SetFloat("power", (float)power);
//播放喝水和回头的动画
var headBack = ticks % 60 == 0 && speed > 0;
var drink = ticks % 125 == 0 && speed > 0;
animator.SetBool("headBack", headBack);
animator.SetBool("drinking", drink);
}
}
}
protected virtual int GetCurrentFrame()
@@ -59,7 +59,8 @@ namespace Assets.Scripts.Scenes.VideoRide
{
timer -= Time.deltaTime;
while (timer < 0) {
rideNum.text = $"{MapUDPService.GetAllOnlineUserCount()}";
var list = MapUDPService.GetOnlineUsers(App.RouteIdParam);//最新列表
rideNum.text = $"{list.Count}";
btnRideNum.text = rideNum.text;
if (manager._aRMode == VideoGameManager.ARMode.RIDE)
{
@@ -22,11 +22,11 @@ namespace Assets.Scripts.Scenes.VideoRide
protected override void Update()
{
base.Update();
//如果当前用户是被观察则控制视频播放
if (manager.CurrentPlayer.UserId == UserId)
{
manager.Play(manager.CurrentPlayer.totalDistance);
}
////如果当前用户是被观察则控制视频播放
//if (manager.CurrentPlayer.UserId == UserId)
//{
// manager.Play(manager.CurrentPlayer.totalDistance);
//}
}
//计算
@@ -55,6 +55,8 @@ namespace Assets.Scripts.Scenes.VideoRide
protected override void Turn()
{
base.Turn();
if (manager.CurrentPlayer.UserId == UserId)
return;
//计算前后位移
var current = manager.CurrentPlayer;
var interval = this.currentFrame - manager.GetCurrentFrame();
@@ -29,7 +29,7 @@ namespace Assets.Scripts.Scenes.VideoRide
if (videoPlayer != null)
{
nameLabel.text = videoPlayer.UserName;
distanceLabel.text = videoPlayer.totalDistance.ToString("f1");
distanceLabel.text = "0M";///videoPlayer.totalDistance.ToString("f1");
Id = videoPlayer.UserId.ToString();
}
timer += 1f;
@@ -87,6 +87,14 @@ namespace Assets.Scripts.Scenes.VideoRide
RIDE,
INSPECT
}
public enum ViewMode
{
THIRD,
FIRST,
}
//当前是第一人称还是第三人称
public ViewMode _viewMode { get; set; }
//当前是观察者视角还是骑行者视角
public ARMode _aRMode { get; set; }
public int RankingId { get; set; }
@@ -281,17 +289,25 @@ namespace Assets.Scripts.Scenes.VideoRide
SetCyclingModel(CyclingModel.Single);
}
}
GameObject videoPlayer;
//初始化人物模型
public void InitCurrentPlayer()
{
GameObject videoPlayer;
//初始化位置
var firstpoint = mockDirection.FirstOrDefault();
//videoPlayer.transform.DOMove(, 0);
var p = new Vector3(firstpoint.PositionX, firstpoint.PositionY, firstpoint.PositionZ);
if (App.CurrentUser.Sex == 1)
{
videoPlayer = Instantiate(Resources.Load<GameObject>("UI/Prefab/AR/VidePlayer"),transform);
var playerprefab = Resources.Load<GameObject>("UI/Prefab/AR/VidePlayer");
playerprefab.transform.position = p;
videoPlayer = Instantiate(playerprefab, transform);
}
else
{
videoPlayer = Instantiate(Resources.Load<GameObject>("UI/Prefab/AR/VidePlayer_NV"), transform);
var playerprefabNV = Resources.Load<GameObject>("UI/Prefab/AR/VidePlayer_NV");
playerprefabNV.transform.position = p;
videoPlayer = Instantiate(playerprefabNV, transform);
}
CurrentPlayer = videoPlayer.GetComponent<VideoPlayer>();
}
@@ -371,9 +387,9 @@ namespace Assets.Scripts.Scenes.VideoRide
private void MockDirection()
{
//var arr = mapRoute.ARConfig.Replace("\r\n", " ").Split(' ');
var text = Resources.Load<TextAsset>("UI/direction");
var arr = text.text.Replace("\r\n", " ").Split(' ');
var arr = mapRoute.ARConfig.Replace("\r\n", " ").Split(' ');
//var text = Resources.Load<TextAsset>("UI/direction");
//var arr = text.text.Replace("\r\n", " ").Split(' ');
foreach (var item in arr)
{
if (string.IsNullOrEmpty(item))
@@ -433,7 +449,7 @@ namespace Assets.Scripts.Scenes.VideoRide
//设置当前视频播放速度
public void Play(double totalDistance)
{
if (!isStart)
if (!isStart && _aRMode == ARMode.RIDE)
return;
if (mediaPlayer != null)
{
@@ -455,14 +471,6 @@ namespace Assets.Scripts.Scenes.VideoRide
{
isStart = !isStart;
isStop = !isStop;
//if (isStop)
//{
// mediaPlayer?.Pause();
//}
//else
//{
// mediaPlayer?.Play();
//}
}
//退出骑行
public void Quit()
@@ -117,7 +117,7 @@ namespace Assets.Scripts.Scenes.VideoRide
if (File.Exists(filepath))
{
watch.SetActive(true);
//TODO:暂时隐藏watch.SetActive(true);
slider.value = 100;
download.gameObject.SetActive(false);
manager.SetMedia(filepath);
+11 -7
View File
@@ -57,10 +57,13 @@ namespace Assets.Scripts.Scenes.VideoRide
{
base.Turn();
//控制人物的前后左右
var l = new Vector3(pre.PositionX, pre.PositionY, pre.PositionZ);
var s = new Vector3(next.PositionX, next.PositionY, next.PositionZ);
var pos = Vector3.Lerp(l, s, t);
transform.DOMove(pos, 0);
if (manager._viewMode != VideoGameManager.ViewMode.FIRST)
{
var l = new Vector3(pre.PositionX, pre.PositionY, pre.PositionZ);
var s = new Vector3(next.PositionX, next.PositionY, next.PositionZ);
var pos = Vector3.Lerp(l, s, t);
transform.DOMove(pos, 0);
}
//控制光线
var z = new Vector3(50, pre.LightY, 0);
var c = new Vector3(50, next.LightY, 0);
@@ -72,11 +75,11 @@ namespace Assets.Scripts.Scenes.VideoRide
heartRate = manager.UpDateHeart();
power = manager.UpdatePower();
cadance = manager.UpdateCadence();
#if UNITY_EDITOR
//#if !UNITY_EDITOR
power = 280;
cadance = 70;
heartRate = 160;
#endif
//#endif
weight = App.CurrentUser.Weight;
bicycleWeight = App.CurrentUser.BicycleWeight;
wkg = Math.Round(power / weight, 2);
@@ -84,7 +87,7 @@ namespace Assets.Scripts.Scenes.VideoRide
var result = manager.mockDirection.Where(c => c.Start < mainFrame && c.End > mainFrame).FirstOrDefault();
bearing = result?.RotationY ?? 0;
//发送阻力
manager.TrackResistance(currentSlope);
manager.TrackResistance(currentSlope * App.RideSetting.Sensitivity / 100);
base.ComputePlayer();
//比人先完成触发关门时间
HandleForGameRoom();
@@ -116,6 +119,7 @@ namespace Assets.Scripts.Scenes.VideoRide
protected override void ComputeRecord()
{
var mapData = manager.GetMapData();
//Debug.Log($"ticks:{manager.GetCurrentFrame()}:{manager.GetMapData().List[currentIndex].Elevation}");
//Debug.Log($"ticks:{ticks}-{manager.GetCurrentFrame()}-endistance:{totalDistance}-totalDistance:{mapData.TotalDistance}-index:{currentIndex}-speed:{speed}-currentSlope:{currentSlope}-GetCurrentFrame:{manager.GetCurrentFrame()}-currentlatLon:{bearing}");
//记录骑行数据
var recorderData = manager.cyclingController.recorderData;
@@ -6,6 +6,7 @@ using UnityEngine.UI;
using DG.Tweening;
using UnityEngine.SceneManagement;
using Assets.Scenes.Ride.Scripts.Model.CyclingModels;
using static Assets.Scripts.Scenes.VideoRide.VideoGameManager;
namespace Assets.Scripts.Scenes.VideoRide
{
@@ -31,7 +32,7 @@ namespace Assets.Scripts.Scenes.VideoRide
Image left { get; set; }
Image right { get; set; }
//ToolBarPanel
GameObject pauseBtn { get; set; }
GameObject settingBtn { get; set; }
GameObject deviceBtn { get; set; }
GameObject changeViewBtn { get; set; }
GameObject quitBtn { get; set; }
@@ -50,14 +51,7 @@ namespace Assets.Scripts.Scenes.VideoRide
GameObject ftpPanel { get; set; }
Image ftpImage { get; set; }
Text wkg { get; set; }
public enum ViewMode
{
THIRD,
FIRST,
}
//当前是第一人称还是第三人称
public ViewMode _viewMode { get; set; }
// Start is called before the first frame update
void Start()
{
@@ -83,7 +77,7 @@ namespace Assets.Scripts.Scenes.VideoRide
heartRate.text = Math.Round((manager.CurrentPlayer.heartRate ?? 0d)).ToString();
cadance.text = Math.Round(manager.CurrentPlayer.cadance).ToString();
playerTimer.text = Helper.FormatTicks(manager.CurrentPlayer.ticks);
distance.text = $"{Math.Round((manager.CurrentPlayer.totalDistance))}KM";
distance.text = $"{Math.Round((manager.CurrentPlayer.totalDistance),2)}KM";
left.fillAmount = (float)(Math.Round(manager.CurrentPlayer.power) / MAXPOWER_RATE);
right.fillAmount = (float)(Math.Round((manager.CurrentPlayer.heartRate ?? 0f)) / MAXHEARRATE);
SetSlopePanel();
@@ -123,7 +117,7 @@ namespace Assets.Scripts.Scenes.VideoRide
left = transform.Find("Panel/ComputerPanel/Left").GetComponent<Image>();
right = transform.Find("Panel/ComputerPanel/Right").GetComponent<Image>();
//ToolBarPanel
pauseBtn = transform.Find("Panel/ToolBarPanel/StartOrPauseButton").gameObject;
settingBtn = transform.Find("Panel/ToolBarPanel/SettingButton").gameObject;
quitBtn = transform.Find("Panel/ToolBarPanel/ExitButton").gameObject;
changeViewBtn = transform.Find("Panel/ToolBarPanel/ChangeView").gameObject;
deviceBtn = transform.Find("Panel/ToolBarPanel/DeviceButton").gameObject;
@@ -145,7 +139,7 @@ namespace Assets.Scripts.Scenes.VideoRide
//
explosive = transform.Find("Panel/Explosive").gameObject;
//toolbar 事件注册
UIManager.AddEvent(pauseBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, PauseClick);
UIManager.AddEvent(settingBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, PauseClick);
UIManager.AddEvent(changeViewBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, ChangeViewClick);
UIManager.AddEvent(deviceBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, DeviceClick);
UIManager.AddEvent(quitBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, QuitClick);
@@ -188,7 +182,8 @@ namespace Assets.Scripts.Scenes.VideoRide
private void PauseClick(BaseEventData e)
{
manager.Pause();
settingPanel.SetActive(true);
settingPanel.transform.SetAsLastSibling();
}
private void DeviceClick(BaseEventData e)
{
@@ -201,26 +196,18 @@ namespace Assets.Scripts.Scenes.VideoRide
var nearByScript = FindObjectOfType<NearByScript>();
var rankingScript = FindObjectOfType<RankingScript>();
var currentPlayer = manager.CurrentPlayer == null ? videoPlayer.transform : manager.CurrentPlayer.transform;
_viewMode = _viewMode == ViewMode.THIRD ? ViewMode.FIRST : ViewMode.THIRD;
manager._viewMode = manager._viewMode == ViewMode.THIRD ? ViewMode.FIRST : ViewMode.THIRD;
var cameraImage = changeViewBtn.transform.Find("Camera").gameObject;
if (_viewMode == ViewMode.FIRST)
if (manager._viewMode == ViewMode.FIRST)
{
currentPlayer.DOMoveZ(-0.09f, 0f);
currentPlayer.DOMoveX(0f, 0f);
currentPlayer.DOMoveZ(-0.1f, 0f);
currentPlayer.DOMoveY(-0.85f, 0f);
ftpPanel.SetActive(true);
nearByScript.Hidehandler(null);
rankingScript.Hidehandler(null);
cameraImage.SetActive(true);
}
else
{
ftpPanel.SetActive(false);
currentPlayer.DOMoveZ(4, 0f);
currentPlayer.DOMoveY(-1f, 0f);
nearByScript.Showhandler(null);
rankingScript.Showhandler(null);
cameraImage.SetActive(false);
}
}
public void ShowResultPanel()