视角切换&小地图模糊问题解决

This commit is contained in:
lishuo committed 2021-05-07 18:41:37 +08:00
1 parent 9bc3864790
commit e4d4333357
30 files changed
+3746 -2965

No files matched your search

@@ -0,0 +1,37 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!84 &8400000
RenderTexture:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: New Render Texture
m_ImageContentsHash:
serializedVersion: 2
Hash: 00000000000000000000000000000000
m_ForcedFallbackFormat: 4
m_DownscaleFallback: 0
serializedVersion: 3
m_Width: 256
m_Height: 256
m_AntiAliasing: 1
m_MipCount: -1
m_DepthFormat: 2
m_ColorFormat: 8
m_MipMap: 0
m_GenerateMips: 1
m_SRGB: 0
m_UseDynamicScale: 0
m_BindMS: 0
m_EnableCompatibleFormat: 1
m_TextureSettings:
serializedVersion: 2
m_FilterMode: 1
m_Aniso: 0
m_MipBias: 0
m_WrapU: 1
m_WrapV: 1
m_WrapW: 1
m_Dimension: 2
m_VolumeDepth: 1
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 83f968668355a044584843a4bf7d592d
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 8400000
userData:
assetBundleName:
assetBundleVariant:
+3041 -2871
View File
File diff suppressed because it is too large. Load diff
+11 -6
View File
@@ -26,7 +26,7 @@ namespace Assets.Scenes.Ride.Scripts
//AbstractMap map;
#region 动画控制参数
Vector3 nextPos;
public Vector3 nextPos;
Vector3 prePos = Vector3.zero;
float timer = 1.0f;//计时器
#endregion
@@ -124,6 +124,7 @@ namespace Assets.Scenes.Ride.Scripts
characterAnimator.SetBool("ReachEnd", true);//到达终点
}
}
//开始骑行
if (mainController.isStart)
{
@@ -154,7 +155,7 @@ namespace Assets.Scenes.Ride.Scripts
//数据处理
nextPos = map.GeoToWorldPosition(currentlatlong);//下一个点
nextPos.y += 1f;//提高y轴让人物站在地图上面
nextPos.y += 1.15f;//提高y轴让人物站在地图上面
prePos = transform.localPosition;//当前点
thisRotation = transform.localRotation;
//移动动画控制
@@ -224,7 +225,8 @@ namespace Assets.Scenes.Ride.Scripts
nextSlopeDistance = sumDistance - totalDistance * 1000;
NextSlopeTotalDistance = pointList[nextIndex].Distance;
currentSlopeDistance = CurrentDistance-( totalDistance * 1000 - (sumDistance - pointList[index].Distance));
//人物初始化角度控制
}
public double PreElevation;
public double PreSlope;
@@ -232,8 +234,9 @@ namespace Assets.Scenes.Ride.Scripts
#endregion
#region 人物移动与转向控制
Quaternion thisRotation;
public Quaternion currentRotation;
IEnumerator LookAtNextPos()
{
Quaternion neededRotation = Quaternion.LookRotation(prePos - nextPos);
@@ -243,8 +246,8 @@ namespace Assets.Scenes.Ride.Scripts
while (t < 1.0f)
{
t += Time.deltaTime / 0.5f;
var rotationValue = Quaternion.Slerp(thisRotation, neededRotation, t);
character.transform.rotation = Quaternion.Euler(0, rotationValue.eulerAngles.y, 0);
currentRotation = Quaternion.Slerp(thisRotation, neededRotation, t);
character.transform.rotation = Quaternion.Euler(0, currentRotation.eulerAngles.y, 0);
yield return null;
}
}
@@ -257,6 +260,7 @@ namespace Assets.Scenes.Ride.Scripts
Camera.main.transform.position = Vector3.Lerp(Camera.main.transform.position, Camera.main.transform.position + deltaPos, Time.time);
previousPos = transform.position;
}
public Vector3 currentPos = new Vector3(0,0,0);
//人物移动控制
IEnumerator MoveTo()
{
@@ -271,6 +275,7 @@ namespace Assets.Scenes.Ride.Scripts
Vector3 nextPosition = new Vector3((float)Math.Round(v.x, 2), (float)Math.Round(v.y, 2), (float)Math.Round(v.z, 2));
if (!nextPosition.Equals(transform.localPosition))
{
currentPos = nextPosition;
transform.localPosition = nextPosition;
//Camera.main.transform.localPosition = nextPosition;
}
+65 -32
View File
@@ -71,10 +71,13 @@ public class CyclingController : DeviceServiceMonoBase
resultPanel = transform.Find("SingleUI/Panel/ResultPanel").gameObject;
}
Transform target;
private void Start()
{
UIManager.Instance.MainPanel = this.transform.Find("SingleUI/Panel").GetComponent<PFUIPanel>();
UIManager.Instance.ModalsPanel = this.transform.Find("SingleUI/ModalPanel").GetComponent<PFUIPanel>();
target = transform.Find("Target");
//进入倒计时
singleUIManager = UIObject.GetComponent<SingleUIManager>();
loadingController = FindObjectOfType<LoadingController>();
@@ -203,18 +206,28 @@ public class CyclingController : DeviceServiceMonoBase
break;
}
AutoStart();
InitPlayer();
}
//初始化人物位置角度
private void InitPlayer()
{
lockView = true;
if (recorderData != null)
{
var lastLatLon = Along(recorderData.EndDistance);
player.transform.position = map.GeoToWorldPosition(lastLatLon);
}
else
{
var lastLatLon = Along(0);
player.transform.position = map.GeoToWorldPosition(lastLatLon);
}
TrailRenderer trail = player.GetComponent<TrailRenderer>();
PlayerController playerController = player.GetComponent<PlayerController>();
Vector2d lastLatLon = Along(recorderData.EndDistance);
Vector3 currentPos = map.GeoToWorldPosition(lastLatLon);
currentPos.y += 1f;
player.transform.position = currentPos;
playerController.currentPos = currentPos;
trail.Clear();
Vector2d nextLatLon = Along(recorderData.EndDistance + 0.1);
//设定人物方向
var s = map.GeoToWorldPosition(lastLatLon);
var e = map.GeoToWorldPosition(nextLatLon);
Quaternion neededRotation = Quaternion.LookRotation(s - e);
player.transform.rotation = Quaternion.Euler(0, neededRotation.eulerAngles.y, 0);
playerController.currentRotation = neededRotation;
}
SingleUIManager singleUIManager;
public void AutoStart()
@@ -231,32 +244,45 @@ public class CyclingController : DeviceServiceMonoBase
public bool Is3dView;
public void ChangeMapImageStyle(GameObject arrowGameObj)
{
var playerController = player.GetComponent<PlayerController>();
var trailRenderer = player.GetComponent<TrailRenderer>();
trailRenderer.time = 0;
StartCoroutine(EnableTrailRenderer(trailRenderer));
if (!Is3dView)
{
//地图属性变更
map.Terrain.ExaggerationFactor = 1.5f;
map.Terrain.SetElevationType(ElevationLayerType.TerrainWithElevation);
map.ImageLayer.SetLayerSource(ImagerySourceType.Custom);
//map.SetTileMaterial(new Material());
Is3dView = true;
map.SetCenterLatitudeLongitude(playerController.Currentlatlong);
//人物属性变更
var pos = map.GeoToWorldPosition(playerController.Currentlatlong);
playerController.currentPos = pos;
target.position = pos;
player.transform.localScale = new Vector3(3f, 3f, 3f);
player.transform.position = pos;
arrowGameObj.SetActive(false);
Is3dView = true;
}
//else
//{
// map.Terrain.ExaggerationFactor = 0f;
// map.Terrain.SetElevationType(ElevationLayerType.FlatTerrain);
// map.ImageLayer.SetLayerSource(ImagerySourceType.None);
// player.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
else
{
//地图属性变更
map.ImageLayer.SetLayerSource(ImagerySourceType.JuzeTest);
map.Terrain.ExaggerationFactor = 0f;
map.Terrain.SetElevationType(ElevationLayerType.FlatTerrain);
map.SetCenterLatitudeLongitude(playerController.Currentlatlong);
//人物属性变更
var pos = map.GeoToWorldPosition(playerController.Currentlatlong);
player.transform.position = pos;
player.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
target.position = pos;
playerController.currentPos = Vector3.zero;
// var playerController = player.GetComponent<PlayerController>();
// player.transform.position = map.GeoToWorldPosition(playerController.Currentlatlong);
// var trailRenderer = player.GetComponent<TrailRenderer>();
// trailRenderer.time = 0;
// StartCoroutine(EnableTrailRenderer(trailRenderer));
// Is3dView = false;
// arrowGameObj.SetActive(true);
//}
arrowGameObj.SetActive(true);
Is3dView = false;
}
}
private bool lockView = false;
private void Map_OnTileFinished(Mapbox.Unity.MeshGeneration.Data.UnityTile obj)
@@ -270,15 +296,22 @@ public class CyclingController : DeviceServiceMonoBase
if (recorderData != null)
{
var lastLatLon = Along(recorderData.EndDistance);
var nextLatLon = Along(recorderData.EndDistance+0.1);
player.transform.position = map.GeoToWorldPosition(lastLatLon);
//设定人物方向
var s = map.GeoToWorldPosition(lastLatLon);
var e = map.GeoToWorldPosition(nextLatLon);
Quaternion neededRotation = Quaternion.LookRotation(s - e);
player.transform.rotation = Quaternion.Euler(0, neededRotation.eulerAngles.y, 0);
}
}
}
IEnumerator EnableTrailRenderer(TrailRenderer trailRenderer)
{
yield return new WaitForSeconds(1f);
trailRenderer.time = 10;
yield return new WaitForSeconds(2f);
trailRenderer.Clear();
trailRenderer.time = 30;
}
#endregion
@@ -287,7 +320,7 @@ public class CyclingController : DeviceServiceMonoBase
//开始骑行
public void SetStart()
{
if (!isPause)
if (!isPause || DateTime.MinValue == startTime)
{
isStart = true;
startTime = DateTime.Now;
@@ -98,9 +98,9 @@ namespace Assets.Scenes.Ride.Scripts
var screenWidth = UnityEngine.Screen.width;
var screenHeight = UnityEngine.Screen.height;
var sw_world = _minicamera.ViewportToWorldPoint(new Vector3(0, 0, 90));
var sw_world = _minicamera.ViewportToWorldPoint(new Vector3(0.2f, 0.2f, 180));
var sw = _map.WorldToGeoPosition(sw_world);
var ne_world = _minicamera.ViewportToWorldPoint(new Vector3(1f, 1f, 90));
var ne_world = _minicamera.ViewportToWorldPoint(new Vector3(0.955f, 0.955f, 180));
var ne = _map.WorldToGeoPosition(ne_world);
return new Vector2dBounds(new Vector2d(sw.x, sw.y), new Vector2d(ne.x, ne.y));
@@ -120,7 +120,7 @@ namespace Assets.Scenes.Ride.Scripts
if (mapData != null)
{
var count = mapData.List.Count;
var interval = Math.Max(Math.Ceiling(count / 500D),1f);
var interval = Math.Max(Math.Ceiling(count / 100D),1f);
for (int i = 0; i < mapData.List.Count; i++)
{
if(i% interval == 0)
@@ -147,16 +147,17 @@ namespace Assets.Scenes.Ride.Scripts
_mipMapRoute.transform.parent = transform;
var lineRender = _mipMapRoute.AddComponent<LineRenderer>();
lineRender.material = Instantiate(Resources.Load<Material>("UI/Material/Round10"));
lineRender.material = Instantiate(Resources.Load<Material>("UI/Material/1"));
var dat = feat.Points[0];
lineRender.endColor = Color.white;
lineRender.startColor = Color.white;
//设置宽度
lineRender.startWidth = 8f;
lineRender.endWidth = 8f;
lineRender.startWidth = 10f;
lineRender.endWidth = 10f;
lineRender.positionCount = dat.Count;
lineRender.SetPositions(feat.Points[0].ToArray());
lineRender.numCornerVertices = 30;
lineRender.numCornerVertices = 20;
lineRender.numCapVertices = 20;
lineRender.loop = false;
_mipMapRoute.layer = 9;
}
+2 -1
View File
@@ -28,12 +28,13 @@ namespace Assets.Scenes.Ride.Scripts
{
text.text = string.Format(format, totalDistance);
index = currentIndex;
mOldScore = (float)totalDistance;
}
else
{
mScoreSequence.Append(DOTween.To(delegate (float value)
{
if (value != newScore)
//if (value != newScore)
{
temp = Math.Round(value, digit);
//向Text组件赋值
+13 -5
View File
@@ -7,17 +7,21 @@ namespace Assets.Scenes.Ride.Scripts
public class PlayerController : AbstractPlayer
{
#region 骑行逻辑
TrailRenderer trail;
protected override void Init()
protected override void Init()
{
base.Init();
totalDistance = mainController.selectParamModel.EndDistance;
currentlatlong = mainController.GetCenterCoordinate();
TrailRenderer trail = FindObjectOfType<TrailRenderer>();
trail = FindObjectOfType<TrailRenderer>();
trail.startWidth = 1f;
trail.endWidth = 1f;
trail.startColor = new Color(0.9764706f, 0.1882353f, 0.5254902f, 0.65f);
trail.endColor = new Color(0.9764706f, 0.1882353f, 0.5254902f, 0.65f);
trail.startColor = new Color(0.9764706f, 0.1882353f, 0.5254902f, 1f);
trail.endColor = new Color(0.9764706f, 0.1882353f, 0.5254902f, 1f);
//var color7 = Resources.Load<Material>("UI/Material/color7");
//var Graph2 = Resources.Load<Material>("UI/Material/3dGraph2");
//trail.materials = new Material[] { color7};
}
TargetData targetData;
/// <summary>
@@ -41,6 +45,9 @@ namespace Assets.Scenes.Ride.Scripts
speed = Helper.CalculateSpeed(elevation, currentSlope, power, weight, bicycleWeight);
distance = mainController.UpdateDistance(speed);
totalDistance += distance;
//preDistance EndDistance
if (!stopRecord)
{
//记录骑行数据
@@ -58,7 +65,8 @@ namespace Assets.Scenes.Ride.Scripts
_Lon = currentlatlong.y,
_TotalClimb = totalClimb,
};
recorderData.PreDistance = TotalDistance-Distance;
recorderData.EndDistance = TotalDistance;
recorderData.RiderDatas.Add(targetData);
}
+22 -10
View File
@@ -21,7 +21,7 @@ namespace Assets.Scenes.Ride.Scripts
Material _material;
[SerializeField]
[Range(1, 10)]
private float UpdateFrequency = 1;
private float UpdateFrequency = 0.1f;
private int _counter;
@@ -31,6 +31,8 @@ namespace Assets.Scenes.Ride.Scripts
CyclingController cyclingCotroller;
private bool initComplete = false;
private List<Vector3> vector3s = new List<Vector3>();
protected virtual void Awake()
{
if (_map == null)
@@ -42,9 +44,14 @@ namespace Assets.Scenes.Ride.Scripts
}
private void Update()
{
if(!vector3s.Contains(playerController.currentPos))
vector3s.Add(playerController.currentPos);
}
private void _map_OnUpdated()
private void _map_OnUpdated()
{
Debug.Log("_map_OnUpdated");
}
@@ -120,12 +127,14 @@ namespace Assets.Scenes.Ride.Scripts
decimal diffAbs = Math.Abs(diff);
if (diffAbs <= 200)
{
dat.Add(item);
if (!dat.Contains(item))
dat.Add(item);
}
if (diff <= 0 && diff > -200)
{
item.y += 0.15f;
path.Add(item);
if (!dat.Contains(item))
path.Add(item);
}
}
var feat = new VectorFeatureUnity();
@@ -191,7 +200,8 @@ namespace Assets.Scenes.Ride.Scripts
_directionsGO = new GameObject("MapRoute");
_directionsGO.transform.parent = transform;
var lineRender = _directionsGO.AddComponent<LineRenderer>();
lineRender.material = new Material(Shader.Find("Sprites/Default"));
//lineRender.material = new Material(Shader.Find("Sprites/Default"));
lineRender.material = Resources.Load<Material>("UI/Material/color8");
var dat = feat.Points[0];
ColorUtility.TryParseHtmlString("#FF2742", out Color c);
lineRender.endColor = new Color(1,1,1,0.65f);
@@ -203,7 +213,7 @@ namespace Assets.Scenes.Ride.Scripts
lineRender.positionCount = dat.Count;
lineRender.SetPositions(feat.Points[0].ToArray());
lineRender.loop = false;
//lineRender.numCapVertices = 10;
lineRender.numCapVertices = 10;
lineRender.numCornerVertices = 10;
@@ -218,8 +228,10 @@ namespace Assets.Scenes.Ride.Scripts
_pathRoute = new GameObject("MapPathRoute");
_pathRoute.transform.parent = transform;
var lineRender = _pathRoute.AddComponent<LineRenderer>();
lineRender.material = new Material(Shader.Find("Sprites/Default"));
//lineRender.material = Resources.Load<Material>("UI/Material/lineStyle9");
//lineRender.material = new Material(Shader.Find("Sprites/Default"));
var color7 = Resources.Load<Material>("UI/Material/color7");
var Graph2 = Resources.Load<Material>("UI/Material/3dGraph2");
lineRender.materials = new Material[] { color7, Graph2 };
lineRender.endColor = new Color(0.9764706f, 0.1882353f, 0.5254902f, 0.65f);
lineRender.startColor = new Color(0.9764706f, 0.1882353f, 0.5254902f, 0.65f);
@@ -228,8 +240,8 @@ namespace Assets.Scenes.Ride.Scripts
lineRender.endWidth = 1f;
lineRender.positionCount = feat.Count;
lineRender.SetPositions(feat.ToArray());
//lineRender.loop = false;
lineRender.numCapVertices = 10;
lineRender.loop = false;
//lineRender.numCapVertices = 10;
lineRender.numCornerVertices = 10;
//
lineRender.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
+30 -12
View File
@@ -10,6 +10,7 @@ using System.Collections.Generic;
using UnityEngine.EventSystems;
using ChartAndGraph;
using Assets.Scripts;
using Assets.Scripts.Apis.Models;
namespace Assets.Scenes.Ride.Scripts
{
@@ -60,7 +61,7 @@ namespace Assets.Scenes.Ride.Scripts
Button closeQuitButton;//退出panel关闭按钮
RawImage head;//海拔图头像
RawImage miniMap;//小地图
GameObject miniMap;//小地图
RawImage altitudeGraph;//海拔图
Image leftImage;
Image rightImage;
@@ -97,6 +98,8 @@ namespace Assets.Scenes.Ride.Scripts
Image nextSlopeImage;
Image currentSlopeImage;
Image miniMapProcess;
Text miniMapProcessText;
void Awake()
{
@@ -131,7 +134,7 @@ namespace Assets.Scenes.Ride.Scripts
head = transform.Find("Panel/GraphChart/HeadPanel/Head").GetComponent<RawImage>();
headPanel = transform.Find("Panel/GraphChart/HeadPanel").gameObject;
t = transform.Find("Panel/GraphChart/Button");
miniMap = transform.Find("Panel/MiniMap").GetComponent<RawImage>();
miniMap = transform.Find("Panel/MiniMap").gameObject;
alertPanel = transform.Find("Panel/Alert").gameObject;
@@ -176,6 +179,9 @@ namespace Assets.Scenes.Ride.Scripts
straightSmall = Resources.Load<Sprite>("Images/Ride/straight-small");
target = transform.parent.Find("Target").gameObject;
//小地图进度
miniMapProcess = transform.Find("Panel/MiniMap/Process").GetComponent<Image>();
miniMapProcessText = transform.Find("Panel/MiniMap/Process/Text").GetComponent<Text>();
UIManager.AddEvent(startBtn.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, StartRide);
UIManager.AddEvent(simpleBtn.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, ClearPanel);
@@ -239,21 +245,24 @@ namespace Assets.Scenes.Ride.Scripts
fps.text = (1 / Time.deltaTime).ToString();
time = 1;
}
CountDown();
MoveCamera();
CountDown();
}
private float cameraX = 0;
private float cameraY = 0;
private float cameraZ = 0;
Transform player;
MapRoute routeInstance;
private void Init()
{
playerController = FindObjectOfType<PlayerController>();
mainController = FindObjectOfType<CyclingController>();
player = transform.parent.Find("Player");
var route = mainController.GetRoute();
mapName.text = route.RouteInstance.Name;
var camera = route.RouteInstance.Camera;
routeInstance = route.RouteInstance;
mapName.text = routeInstance.Name;
var camera = routeInstance.Camera;
if (!string.IsNullOrEmpty(camera))
{
var cameraArr = camera.Split(',');
@@ -311,20 +320,25 @@ namespace Assets.Scenes.Ride.Scripts
nearByPanel.SetActive(true);
}
}
Vector3 m = new Vector3(0.1f, 0.1f, 0.1f);
//移动摄像头和箭头位置
private void MoveCamera()
{
if (target != null)
{
target.transform.position = playerController.transform.position; //new Vector3((float)Math.Round(player.transform.position.x,1), 0, (float)Math.Round(player.transform.position.z,1));
target.transform.position = playerController.currentPos; //player.transform.position;// new Vector3((float)Math.Round(player.transform.position.x,1), 0, (float)Math.Round(player.transform.position.z,1));
if (!mainController.Is3dView)
{ //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 = new Vector3(0, playerController.transform.eulerAngles.y + 160f, 0);
mainController.player.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
{
Vector3 v = Vector3.zero;
v.y += playerController.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);
//mainController.player.transform.localScale.Set(0.1f, 0.1f, 0.1f);
player.transform.localScale = m;
}
else
{
target.transform.eulerAngles = new Vector3(cameraX, cameraY, cameraZ);
target.transform.eulerAngles.Set(cameraX, cameraY, cameraZ);// = new Vector3(cameraX, cameraY, cameraZ);
}
//控制照片移动
((RectTransform)arrow.transform).position = Camera.main.WorldToScreenPoint(target.transform.position);
@@ -383,6 +397,10 @@ namespace Assets.Scenes.Ride.Scripts
currentSlopeText.text = Math.Round(playerController.CurrentSlope, 1).ToString() + "%";
currentSlopeDistanceText.GetComponent<NumberDotween>().AnimateNum((float)playerController.CurrentSlopeDistance, Math.Round(playerController.CurrentDistance, 0), playerController.CurrentIndex, 0, "{0}M");
totalClimb.text = Math.Round(playerController.TotalClimb, 0).ToString();
//小地图进度
var process = (float)(playerController.TotalDistance / routeInstance.Distance);
miniMapProcess.fillAmount = process;
miniMapProcessText.text = $"{process*100:f0}%";
//动态改变坡度图片
if (playerController.CurrentSlope >= 1)
{