骑行细节优化(视角缩放,海拔图拉伸)

This commit is contained in:
lishuo 2021-12-08 18:10:38 +08:00
parent 083b414be0
commit b1fedd4831
3 changed files with 144 additions and 40 deletions

View File

@ -94,7 +94,9 @@ namespace Assets.Scenes.Ride.Scripts
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);
processText = panel.transform.Find("ProcessText").GetComponent<Text>();
processText.gameObject.SetActive(false);
mapDescText = panel.transform.Find("MapDesc").GetComponent<Text>();
rideNow = panel.transform.Find("RideNow").GetComponent<Button>();
rideNowText = rideNow.transform.Find("Text").GetComponent<Text>();
@ -176,21 +178,12 @@ namespace Assets.Scenes.Ride.Scripts
{
if (!rideNow.IsInteractable())
return;
//var checkAnt = cyclingController.CheckAnt();
//#if UNITY_EDITOR
// checkAnt = true;
//#endif
// if (!checkAnt && !cyclingController.isWatch)
// {
//#if UNITY_IOS || UNITY_ANDROID
// var alert = (GameObject)Instantiate(Resources.Load("UI/Prefab/Ride/Mobile/Alert"), panel.transform);
//#else
// var alert = (GameObject)Instantiate(Resources.Load("UI/Prefab/Ride/Alert"), panel.transform);
//#endif
// alert.SetActive(true);
// }
// else
{
rideNow.interactable = false;
processText.gameObject.SetActive(true);
slider.gameObject.SetActive(true);
var preValue = slider.value;
slider.value = 0;
slider.DOValue(preValue, 2).onComplete+=()=> {
cyclingController.InitTcp();
MapUDPService.SendGizpModel();
cyclingController.ReSetUIManager();
@ -198,7 +191,21 @@ namespace Assets.Scenes.Ride.Scripts
//启用ridenow
canvasGroup.blocksRaycasts = false;
depressFlag = true;
}
};
//var checkAnt = cyclingController.CheckAnt();
//#if UNITY_EDITOR
// checkAnt = true;
//#endif
// if (!checkAnt && !cyclingController.isWatch)
// {
//#if UNITY_IOS || UNITY_ANDROID
// var alert = (GameObject)Instantiate(Resources.Load("UI/Prefab/Ride/Mobile/Alert"), panel.transform);
//#else
// var alert = (GameObject)Instantiate(Resources.Load("UI/Prefab/Ride/Alert"), panel.transform);
//#endif
// alert.SetActive(true);
// }
// else
}
protected virtual void Cancel(BaseEventData baseEvent)
{

View File

@ -106,6 +106,8 @@ namespace Assets.Scenes.Ride.Scripts
protected Slider cameraSlider;
protected Transform graphChart;
protected virtual void Awake()
{
@ -158,9 +160,11 @@ namespace Assets.Scenes.Ride.Scripts
mapName = uipanel.transform.Find("TitlePanel/MapName").GetComponent<Text>();
totalClimb = uipanel.transform.Find("ComputerPanel/TotalClimb").GetComponent<Text>();
//img = uipanel.transform.Find("ElevationChart/HeadImage").GetComponent<RawImage>();
head = uipanel.transform.Find("GraphChart/HeadPanel/Head").GetComponent<RawImage>();
headPanel = uipanel.transform.Find("GraphChart/HeadPanel").gameObject;
t = uipanel.transform.Find("GraphChart/Button");
graphChart = uipanel.transform.Find("GraphChart");
head = graphChart.Find("HeadPanel/Head").GetComponent<RawImage>();
headPanel = graphChart.Find("HeadPanel").gameObject;
t = graphChart.Find("Button");
miniMap = uipanel.transform.Find("MiniMap").gameObject;
alertPanel = uipanel.transform.Find("Alert").gameObject;
@ -361,10 +365,14 @@ namespace Assets.Scenes.Ride.Scripts
}
else
{
CameraVector.x = cameraX;
CameraVector.y = cameraY;
CameraVector.z = cameraZ;
target.transform.eulerAngles = CameraVector;
//3d视角跟随人物转动
//CameraVector.x = cameraX;
//CameraVector.y = cameraY;
//CameraVector.z = cameraZ;
//target.transform.eulerAngles = CameraVector;
Vector3 v = Vector3.zero;
v.y += mainController.currentPlayer.currentRotation.eulerAngles.y + 160f; //target.transform.rotation = playerController.transform.rotation;//new Quaternion(playerController.transform.rotation.x, playerController.transform.rotation.y +1f, playerController.transform.rotation.z, playerController.transform.rotation.w);
target.transform.eulerAngles = v; //.Set(0, playerController.currentRotation.eulerAngles.y + 160f, 0);// = new Vector3(0, playerController.transform.eulerAngles.y + 160f, 0);
}
//控制照片移动
((RectTransform)arrow.transform).position = Camera.main.WorldToScreenPoint(target.transform.position);
@ -540,6 +548,19 @@ namespace Assets.Scenes.Ride.Scripts
#if UNITY_IOS || UNITY_ANDROID
toolbar.transform.DOLocalMove(new Vector3(toolbar.transform.localPosition.x, toolbar.transform.localPosition.y + isSimple * 260f, toolbar.transform.localPosition.z), 1);
//中间的海拔图变长
if (isSimple == 1)
{
graphChart.DOMoveX(0, 1f);
var graphRect = ((RectTransform)graphChart);
graphRect.sizeDelta = new Vector2(App.MobileResolution.x, graphRect.rect.height);
}
else
{
graphChart.DOLocalMoveX(-250f, 1f);
var graphRect = ((RectTransform)graphChart);
graphRect.sizeDelta = new Vector2(500f, graphRect.rect.height);
}
#else
viewButton.transform.DOLocalMove(new Vector3(viewButton.transform.localPosition.x + isSimple * 200f, viewButton.transform.localPosition.y, viewButton.transform.localPosition.z), 1);
nextSlopePanel.transform.DOLocalMove(new Vector3(nextSlopePanel.transform.localPosition.x, nextSlopePanel.transform.localPosition.y + isSimple * 260f, nextSlopePanel.transform.localPosition.z), 1);

View File

@ -273,25 +273,11 @@ public class CyclingController : DeviceServiceMonoBase
return false;
}
}
bool _dragStartedOnUI = false;
protected override void Update()
{
base.Update();
//CamControl();
#if UNITY_IOS || UNITY_ANDROID
if (competitionId == 0 && singleUIManager != null)
{
var mouse = Input.GetMouseButton(0);
if (mouse && isStart && singleUIManager.clearLock)
{
if (IsPointerOverGameObject(Input.mousePosition))
{
singleUIManager?.ClearPanel(null);
}
}
}
#endif
timer -= Time.deltaTime;
if (timer <= 0)//定时器 一秒执行一次
{
@ -318,7 +304,82 @@ public class CyclingController : DeviceServiceMonoBase
timer += 1.0f;
}
}
private void LateUpdate()
{
#if UNITY_IOS || UNITY_ANDROID
if (competitionId == 0 && singleUIManager != null)
{
HandleTouch();
}
#endif
}
public bool isWatch { get; set; }
private Vector3 currentCameraPos { get; set; }
Vector3 far = new Vector3(-25, 73, -70);
Vector3 plane = new Vector3(-15, 43, -40);
Vector3 near = new Vector3(-8, 23, -20);
List<Vector3> cameraList { get; set; }
private void HandleTouch()
{
var touchCount = Input.touchCount;
switch (Input.touchCount)
{
case 1:
{
//单击切换极简模式
if (Input.touches[0].tapCount >= 2 && isStart && singleUIManager.clearLock)
{
if (IsPointerOverGameObject(Input.mousePosition))
{
singleUIManager?.ClearPanel(null);
}
}
}
break;
case 2:
{
//双手触摸移动摄像机
// Store both touches.
Touch touchZero = Input.GetTouch(0);
Touch touchOne = Input.GetTouch(1);
// Find the position in the previous frame of each touch.
Vector2 touchZeroPrevPos = touchZero.position - touchZero.deltaPosition;
Vector2 touchOnePrevPos = touchOne.position - touchOne.deltaPosition;
// Find the magnitude of the vector (the distance) between the touches in each frame.
float prevTouchDeltaMag = (touchZeroPrevPos - touchOnePrevPos).magnitude;
float touchDeltaMag = (touchZero.position - touchOne.position).magnitude;
var offset = touchDeltaMag - prevTouchDeltaMag;
if (cameraList == null)
{
cameraList = new List<Vector3>();
cameraList.Add(near);
cameraList.Add(plane);
cameraList.Add(far);
}
var prePos = Camera.main.transform.localPosition;
var nextPos = Camera.main.transform.localPosition;
if (offset < 0)
{
nextPos = cameraList.Where(c => c.y > Camera.main.transform.localPosition.y).FirstOrDefault();
if (nextPos != Vector3.zero)
StartCoroutine(MoveCamera(prePos, nextPos));
}
if (offset > 0)
{
nextPos = cameraList.Where(c => c.y < Camera.main.transform.localPosition.y).LastOrDefault();
if (nextPos != Vector3.zero)
StartCoroutine(MoveCamera(prePos, nextPos));
}
}
break;
}
}
/// <summary>
/// 处理中断骑行
@ -570,10 +631,23 @@ public class CyclingController : DeviceServiceMonoBase
{
chartDataSourceScript.InitHorizontalScrolling(index);
}
//SingleUIManager singleUIManager;
public BaseUIManager singleUIManager;
private IEnumerator MoveCamera(Vector3 prePos, Vector3 nextPos)
{
float t = 0;
while (t < 1)
{
t += Time.deltaTime;
Vector3 v = Vector3.Lerp(prePos, nextPos, t);
Camera.main.transform.localPosition = v;
yield return new WaitForEndOfFrame();
}
}
//SingleUIManager singleUIManager;
public BaseUIManager singleUIManager;
public void GameStart()
{
StartCoroutine(MoveCamera(far, plane));//初始摄像头
var check = CheckAnt();
#if UNITY_EDITOR
check = true;
@ -923,6 +997,7 @@ public class CyclingController : DeviceServiceMonoBase
public void ClearTempFile()
{
Helper.DelectDir(PFConstants.MapWorkoutRecordTempFolder);
App.tempRecordData = null;
}
TempRecordData tempRecordData { get; set; }
public void SaveRealTime()
@ -949,6 +1024,7 @@ public class CyclingController : DeviceServiceMonoBase
public void Save(double totalDistance)
{
ClearTempFile();
cyclingController.recorderData.EndTime = UIManager.Now.GetDateTime();
isQuit = true;
isStart = false;