AR骑行loading页面&附近的人距离延迟问题

This commit is contained in:
lishuo 2022-04-19 18:47:26 +08:00
parent 8150b99411
commit 3532978762
8 changed files with 3072 additions and 3348 deletions

View File

@ -18226,7 +18226,7 @@ GameObject:
- component: {fileID: 4544646319704206804}
- component: {fileID: -6554056549816092667}
m_Layer: 0
m_Name: OnlineVideoPlayer1
m_Name: OnlineVideoPlayer
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@ -18240,7 +18240,7 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7920966205500188480}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: -1, z: 3}
m_LocalPosition: {x: 0, y: -1, z: 0}
m_LocalScale: {x: 0.75, y: 0.75, z: 0.75}
m_Children:
- {fileID: 3808671237483285868}
@ -18596,6 +18596,8 @@ MonoBehaviour:
distance: 0
totalClimb: 0
currentIndex: 0
bearing: 0
target: {fileID: 0}
diff: 0
frames: 0
--- !u!1 &7930809532632780446

View File

@ -7,24 +7,26 @@
2800~2942:3
3058~3171:-3
3300~3390:35
6000~6150:10
7708~7793:2
6000~6150:5
7708~7793:3
7793~7911:-3
8610~8707:3
8842~8920:2
8920~9165:-2
8842~8920:3
8920~9165:-3
9272~9461:3
9494~9641:-3
9295~9460:2
9510~9600:-2
11822~12064:-2
12200~12514:2
12514~12644:-2
13072~13388:2
13400~13600:8
14000~14090:8
14524~14660:8
14839~14920:8
16350~16440:-8
16563~16700:-8
18250~18310:2
9295~9460:3
9510~9600:-3
11400~11600:3
11822~12064:-3
12200~12514:3
12514~12644:-3
13072~13388:3
13400~13600:5
14000~14100:5
14524~14660:5
14839~14920:5
15600~15650:-3
16350~16440:-5
16563~16700:-5
18250~18310:3

File diff suppressed because it is too large Load Diff

View File

@ -81,7 +81,6 @@ namespace Assets.Scripts.Scenes.VideoRide
{
try
{
ComputeAnimator();//控制动画
ComputeNextSlope();//计算下一个坡度
ComputePlayer();//计算人物属性
if (GetStart())
@ -93,7 +92,7 @@ namespace Assets.Scripts.Scenes.VideoRide
RayCastHit();
Turn();
}
ComputeAnimator();//控制动画
timer += 1f;
}
catch (Exception e)

View File

@ -72,6 +72,7 @@ namespace Assets.Scripts.Scenes.VideoRide
//var currenList = FindObjectsOfType<ListItem>();//当前列表
var currenList = GetComponentsInChildren<ListItem>(true);
var list = MapUDPService.GetOnlineUsers(App.RouteIdParam);//最新列表
var currentPlayerInfo = list.Where(c => c.Id.ToString() == manager.CurrentPlayer.UserId.ToString()).FirstOrDefault();
list = list.Where(c => c.Id != App.CurrentUser.Id).ToList();
if (currenList.Count() == 0 && list.Count() > 0)
{
@ -91,9 +92,9 @@ namespace Assets.Scripts.Scenes.VideoRide
if (currentPlayer.UserId.ToString() == o.Id)
continue;
var needUpdate = list.Where(c => c.Id.ToString() == o.Id).FirstOrDefault();
if (needUpdate != null)
if (needUpdate != null && currentPlayerInfo != null)
{
var left = Math.Round((needUpdate.EndDistance - manager.CurrentPlayer.totalDistance) * 1000);
var left = Math.Round((needUpdate.EndDistance - currentPlayerInfo.EndDistance) * 1000);
o.UpdateItem(needUpdate.Name, left.ToString() + "M", needUpdate.Id.ToString());
o.gameObject.SetActive(true);
}

View File

@ -10,6 +10,7 @@ namespace Assets.Scripts.Scenes.VideoRide
{
public class OnlineVideoPlayer : AbstractVideoPlayer
{
public Transform target;
public double diff;
public int frames;
protected override void Update()
@ -37,14 +38,14 @@ namespace Assets.Scripts.Scenes.VideoRide
{
base.Turn();
var current = manager.CurrentPlayer;
var z = current.transform.position.z + diff * 0.5f;
var z = current.transform.position.z + diff*1000 * 0.5f;
transform.DOMoveZ((float)z, 1f);
//x轴位移
//z轴位移
//var x = bearing + current.bearing;
//transform.DOMove(new Vector3(x, transform.position.y, (float)z), 1); // ((float)z, 1f);
//人物转向
//transform.Rotate(new Vector3(0,1,0), bearing);
//z轴位移
//try
//{
@ -108,7 +109,7 @@ namespace Assets.Scripts.Scenes.VideoRide
}
//设置当前玩家属性
public void SetPlayer(string name, double distance, double totalDistance, double cadance,double heartRate, double wkg, int userId,double power)
public void SetPlayer(string name, double distance, double totalDistance, double cadance,double heartRate, double wkg, int userId,double power,double currentPlayerDistance)
{
this.wkg = wkg;
this.UserName = name;
@ -118,6 +119,7 @@ namespace Assets.Scripts.Scenes.VideoRide
this.UserId = userId;
this.power = power;
this.speed = distance * 3600;
this.diff = currentPlayerDistance - totalDistance;
}
}
}

View File

@ -121,7 +121,7 @@ namespace Assets.Scripts.Scenes.VideoRide
}
VideoLoading videoLoading { get; set; }
// Update is called once per frame
float timer = 1f;
float timer = 0.5f;
void Update()
{
timer -= Time.deltaTime;
@ -137,7 +137,7 @@ namespace Assets.Scripts.Scenes.VideoRide
{
Debug.Log(e.Message);
}
timer += 1f;
timer += 0.5f;
}
}
MapRouteRankingList rankingList;
@ -165,13 +165,15 @@ namespace Assets.Scripts.Scenes.VideoRide
var onlineRider = currentPlayer as OnlineRiderModel;
var obj = Instantiate(OnlinePlayer, 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);
online.SetPlayer(onlineRider.NickName, onlineRider.EndDistance-onlineRider.PreDistance, onlineRider.EndDistance, onlineRider.Cadence, onlineRider.HeartRate, onlineRider.TotalTicks, onlineRider.UserId, onlineRider.Power, onlineRider.EndDistance);
obj.transform.DOMoveX(0, 1);
ChangePlayer(currentPlayer.UserId);
CurrentPlayer = online;
}
}
//list = list.Where(c => c.UserId != CurrentPlayer?.UserId).ToList();
var onlinelist = MapUDPService.GetOnlineUsers(App.RouteIdParam);//最新列表
var currentPlayerInfo = onlinelist.Where(c => c.Id == CurrentPlayer.UserId).FirstOrDefault();
var players = FindObjectsOfType<OnlineVideoPlayer>();
//移除
@ -196,22 +198,25 @@ namespace Assets.Scripts.Scenes.VideoRide
{
var online = exsit.GetComponent<OnlineVideoPlayer>();
online.SetPlayer(onlineRider.NickName, onlineRider.EndDistance - onlineRider.PreDistance, onlineRider.EndDistance, item.Cadence, item.HeartRate, onlineRider.WeightKg, item.UserId, onlineRider.Power);
online.SetPlayer(onlineRider.NickName, onlineRider.EndDistance - onlineRider.PreDistance, onlineRider.EndDistance, item.Cadence, item.HeartRate, onlineRider.WeightKg, item.UserId, onlineRider.Power, currentPlayerInfo.EndDistance);
}
else
{
var diff = item.EndDistance % mapData.TotalDistance - CurrentPlayer.totalDistance % mapData.TotalDistance;
if (Math.Abs(diff*1000) <= 50)
if (currentPlayerInfo != null)
{
var diff = item.EndDistance % mapData.TotalDistance - currentPlayerInfo.EndDistance % mapData.TotalDistance;
if (Math.Abs(diff * 1000) <= 50)
{
var obj = Instantiate(OnlinePlayer, 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);
online.SetPlayer(onlineRider.NickName, onlineRider.EndDistance - onlineRider.PreDistance, onlineRider.EndDistance, item.Cadence, item.HeartRate, onlineRider.WeightKg, item.UserId, onlineRider.Power, currentPlayerInfo.EndDistance);
obj.transform.DOMoveX(slots[currentOnlineCount], 1);
currentOnlineCount++;
}
}
}
}
}
//设置当前是骑行模式还是观察模式
public void SetCurrentMode(ARMode aRMode)
{
@ -255,7 +260,7 @@ namespace Assets.Scripts.Scenes.VideoRide
var onlineRider = currentPlayer as OnlineRiderModel;
var obj = Instantiate(OnlinePlayer, transform);
var online = obj.GetComponent<OnlineVideoPlayer>();
online.SetPlayer(onlineRider.NickName, onlineRider.EndDistance-onlineRider.PreDistance, onlineRider.EndDistance, onlineRider.Cadence, onlineRider.HeartRate, 0, onlineRider.UserId, onlineRider.Power);
online.SetPlayer(onlineRider.NickName, onlineRider.EndDistance-onlineRider.PreDistance, onlineRider.EndDistance, onlineRider.Cadence, onlineRider.HeartRate, 0, onlineRider.UserId, onlineRider.Power, onlineRider.EndDistance);
obj.transform.position = origin;
CurrentPlayer = online;
var currentFrames = DistanceToFrames(CurrentPlayer.totalDistance);

View File

@ -16,10 +16,8 @@ namespace Assets.Scripts.Scenes.VideoRide
{
public class VideoLoading : MonoBehaviour
{
Button download { get; set; }
UnityWebRequest request { get; set; }
VideoGameManager manager { get; set; }
// Start is called before the first frame update
protected Text mapName;
protected RawImage mapRouteImage;
@ -34,6 +32,8 @@ namespace Assets.Scripts.Scenes.VideoRide
protected Text elevaction;
protected Text slope;
protected GameObject panel;
protected GameObject download;
protected GameObject watch;
protected GameObject loadingPanel { get; set; }
@ -50,7 +50,10 @@ namespace Assets.Scripts.Scenes.VideoRide
protected float process = 0;//0-100 %
public float targetAlpha = 0f;
public float alphaSpeed = 2.0f;
private bool depressFlag = false;
protected Transform ui;
protected MapRoute route;
private void Awake()
{
@ -59,62 +62,8 @@ namespace Assets.Scripts.Scenes.VideoRide
void Start()
{
manager = FindObjectOfType<VideoGameManager>();
var button = transform.Find("Panel/Button").GetComponent<Button>();
var Start = transform.Find("Panel/Start").GetComponent<Button>();
var Back = transform.Find("Panel/Back").GetComponent<Button>();
var Inspect = transform.Find("Panel/Inspect").gameObject;
UIManager.AddEvent(Inspect, UnityEngine.EventSystems.EventTriggerType.PointerClick, InspectHandler);
var canvasGroup = transform.GetComponent<CanvasGroup>();
var ui = manager.GetCanvasTransform();
var route = manager.GetMapRoute();
var text = transform.GetComponentInChildren<Text>();
var fileName = route.FileName;// "12067924_720p.mp4";
var url = route.Url; //@"http://192.168.0.97:6031/12067924_720p.mp4";
var currentPath = "";
var path = PFConstants.VideoFolder;
var filepath = path + "/" + fileName;
if (File.Exists(filepath))
{
button.gameObject.SetActive(false);
Start.gameObject.SetActive(true);
manager.SetMedia(filepath);
}
else
{
//检查本地文件是否存在 如果存在直接设置mediaPlayer 否则显示下载按钮
button.onClick.AddListener(() =>
{
StartCoroutine(Utils.DownloadVideo(fileName, url
, (p, req) =>
{
text.text = Math.Round(p * 100, 2).ToString() + "%";
request = req;
}
, (p) =>
{
text.text = "100%";
currentPath = p;
Start.gameObject.SetActive(true);
manager.SetMedia(p);
}
));
});
}
var g = gameObject;
Start.onClick.AddListener(() =>
{
canvasGroup.DOFade(0, 1).onComplete+=()=> {
g.SetActive(false);
manager.SetCurrentMode(VideoGameManager.ARMode.RIDE);
ui.Find("Panel").gameObject.SetActive(true);
};
});
Back.onClick.AddListener(() =>
{
SceneManager.LoadScene("MainScene");
});
ui = manager.GetCanvasTransform();
route = manager.GetMapRoute();
}
public void Init()
@ -122,17 +71,6 @@ namespace Assets.Scripts.Scenes.VideoRide
InitGameObject();
InitGameObjectData();
}
//进入观察模式
private void InspectHandler(BaseEventData data)
{
manager.SetCurrentMode(VideoGameManager.ARMode.INSPECT);
var canvasGroup = transform.GetComponent<CanvasGroup>();
var ui = manager.GetCanvasTransform();
canvasGroup.DOFade(0, 1).onComplete += () => {
gameObject.SetActive(false);
ui.Find("Panel").gameObject.SetActive(true);
};
}
private void InitGameObject()
{
@ -143,7 +81,7 @@ namespace Assets.Scripts.Scenes.VideoRide
slope = panel.transform.Find("Slope").GetComponent<Text>();
mapRouteImage = panel.transform.Find("MapRouteImage").GetComponent<RawImage>();
slider = panel.transform.Find("Process").GetComponent<Slider>();
slider.gameObject.SetActive(false);
slider.gameObject.SetActive(true);
processText = panel.transform.Find("ProcessText").GetComponent<Text>();
processText.gameObject.SetActive(false);
mapDescText = panel.transform.Find("MapDesc").GetComponent<Text>();
@ -157,6 +95,30 @@ namespace Assets.Scripts.Scenes.VideoRide
processText.text = $"{(f).ToString("#0")}%";
});
download = transform.Find("Panel/Download").gameObject;
watch = transform.Find("Panel/Watch").gameObject;
UIManager.AddEvent(watch, UnityEngine.EventSystems.EventTriggerType.PointerClick, WatchHandler);
canvasGroup = transform.GetComponent<CanvasGroup>();
var fileName = route.FileName;// "12067924_720p.mp4";
var url = route.Url; //@"http://192.168.0.97:6031/12067924_720p.mp4";
var path = PFConstants.VideoFolder;
var filepath = path + "/" + fileName;
if (File.Exists(filepath))
{
slider.value = 100;
download.gameObject.SetActive(false);
manager.SetMedia(filepath);
}
else
{
//检查本地文件是否存在 如果存在直接设置mediaPlayer 否则显示下载按钮
UIManager.AddEvent(download.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, Download);
}
#region
level = panel.transform.Find("level/Text").GetComponent<Text>();
rideNum = panel.transform.Find("RideNum").GetComponent<Text>();
uploadByUserName = panel.transform.Find("UploadByUserName").GetComponent<Text>();
@ -166,16 +128,50 @@ namespace Assets.Scripts.Scenes.VideoRide
altitudeGraph = panel.transform.Find("AltitudeGraph").GetComponent<RawImage>();
mapRanking = panel.transform.Find("MapRanking");
mapId = panel.transform.Find("MapId").GetComponent<Text>();
UIManager.RemoveEvent(distance.gameObject);
UIManager.RemoveEvent(slope.gameObject);
UIManager.RemoveEvent(elevaction.gameObject);
UIManager.RemoveEvent(rideNum.gameObject);
UIManager.AddEvent(distance.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerEnter, b =>
{
panel.transform.Find("DistanceTip").GetComponent<CanvasGroup>().DOFade(1, 0.5f);
});
UIManager.AddEvent(distance.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerExit, b =>
{
panel.transform.Find("DistanceTip").GetComponent<CanvasGroup>().DOFade(0, 0.5f);
});
UIManager.AddEvent(slope.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerEnter, b =>
{
panel.transform.Find("SlopeTip").GetComponent<CanvasGroup>().DOFade(1, 0.5f);
});
UIManager.AddEvent(slope.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerExit, b =>
{
panel.transform.Find("SlopeTip").GetComponent<CanvasGroup>().DOFade(0, 0.5f);
});
UIManager.AddEvent(elevaction.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerEnter, b =>
{
panel.transform.Find("ElevactionTip").GetComponent<CanvasGroup>().DOFade(1, 0.5f);
});
UIManager.AddEvent(elevaction.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerExit, b =>
{
panel.transform.Find("ElevactionTip").GetComponent<CanvasGroup>().DOFade(0, 0.5f);
});
UIManager.AddEvent(rideNum.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerEnter, b =>
{
panel.transform.Find("RideTip").GetComponent<CanvasGroup>().DOFade(1, 0.5f);
});
UIManager.AddEvent(rideNum.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerExit, b =>
{
panel.transform.Find("RideTip").GetComponent<CanvasGroup>().DOFade(0, 0.5f);
});
#endregion
}
protected void InitGameObjectData()
{
var route = manager.mapRoute;
#region
//mapName.text = route.Name;
#if UNITY_IOS || UNITY_ANDROID
enable3D = panel.transform.Find("Enable3D").gameObject;
enable3D.SetActive(route.Enable3D);
#endif
mapName.text = GetMaxString(route.Name, 40);
level.text = route.Hard;
elevaction.text = Math.Round(route.TotalClimb.GetValueOrDefault(0), 2).ToString() + "M";
@ -194,7 +190,8 @@ namespace Assets.Scripts.Scenes.VideoRide
mapCountry.texture = manager.GetCountryImageByCode(route.CountryCode);//路书国家
}
#endregion
//显示线路背景图
DrawMapRouteAsync(route.Id);
//查询排行榜
var list = ConfigHelper.mapApi.GetRouteRanking(route.Id, "1", 0, 10000, "");
if (list.result)
@ -204,29 +201,89 @@ namespace Assets.Scripts.Scenes.VideoRide
}
protected void StartRide(BaseEventData baseEvent)
{
var ui = manager.GetCanvasTransform();
canvasGroup.DOFade(0, 1).onComplete += () => {
gameObject.SetActive(false);
manager.SetCurrentMode(VideoGameManager.ARMode.RIDE);
ui.Find("Panel").gameObject.SetActive(true);
};
}
protected void Download(BaseEventData baseEvent)
{
StartCoroutine(Utils.DownloadVideo(route.FileName, route.Url
, (p, req) =>
{
slider.value = (float)Math.Round(p * 100, 2);
request = req;
download.SetActive(false);
}
, (p) =>
{
if (!string.IsNullOrEmpty(p)) {
slider.value = 100;
manager.SetMedia(p);
}
else
{
Debug.LogError("");
}
}
));
}
//进入观察模式
private void WatchHandler(BaseEventData data)
{
manager.SetCurrentMode(VideoGameManager.ARMode.INSPECT);
var canvasGroup = transform.GetComponent<CanvasGroup>();
var ui = manager.GetCanvasTransform();
canvasGroup.DOFade(0, 1).onComplete += () => {
gameObject.SetActive(false);
ui.Find("Panel").gameObject.SetActive(true);
};
}
protected void Cancel(BaseEventData baseEvent)
{
SceneManager.LoadScene("MainScene");
}
// Update is called once per frame
void Update()
protected async void DrawMapRouteAsync(int routeId, int type = 0)
{
var result = await ConfigHelper.mapApi.GetMapLoadingCoverageUrl(routeId, type);
if (!result.result)
return;
var url = result.data;
if (App.TextureCache.ContainsKey(url))
{
mapRouteImage.texture = App.TextureCache[url];
var canvasGroup = mapRouteImage.GetComponent<CanvasGroup>();
canvasGroup.DOFade(1, 1);
}
else
{
Utils.DisplayImageAysnc(StartCoroutine, mapRouteImage, url, DowloadCallBack);
}
}
protected void DowloadCallBack(string url, RawImage rawImage)
{
if (!App.TextureCache.ContainsKey(url))
{
App.TextureCache.Add(url, rawImage?.texture);
}
else
{
App.TextureCache[url] = rawImage?.texture;
}
var canvasGroup = rawImage.GetComponent<CanvasGroup>();
canvasGroup?.DOFade(1, 1);
}
private int RankingPageSize = 10;
//创建排行榜
public void CreateRankingList(List<MapRouteRanking> list)
{
#if UNITY_IOS || UNITY_ANDROID
var prefab = Resources.Load<GameObject>("UI/Prefab/Ride/Mobile/RankingItem");
var myprefab = Resources.Load<GameObject>("UI/Prefab/Ride/Mobile/MySelfRankingItem");
var viewAllbtn = Resources.Load<GameObject>("UI/Prefab/Ride/Mobile/ViewAll");
#else
var prefab = Resources.Load<GameObject>("UI/Prefab/Ride/RankingItem");
var myprefab = Resources.Load<GameObject>("UI/Prefab/Ride/MySelfRankingItem");
var viewAllbtn = Resources.Load<GameObject>("UI/Prefab/Ride/ViewAll");
#endif
var parent = panel.transform.Find("MapRanking");
var title = panel.transform.Find("RankingTitle").gameObject;
title.SetActive(list.Count != 0);