From 0ab0e99597f0c09860e4f781c3c128c4870a8c88 Mon Sep 17 00:00:00 2001 From: lishuo Date: Tue, 23 Mar 2021 16:07:31 +0800 Subject: [PATCH] =?UTF-8?q?=E9=AA=91=E8=A1=8C=E8=AE=A1=E7=AE=97=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Map/InitializeMapWithLocationProvider.cs | 18 +- Assets/PlayerFactory.cs | 19 +- Assets/Scenes/Ride/Ride.unity | 66 ++---- Assets/Scenes/Ride/Scripts/GameManger.cs | 40 ++++ .../{MockData.cs.meta => GameManger.cs.meta} | 0 Assets/Scenes/Ride/Scripts/Helper.cs | 109 ++++++++++ .../{RouteData.cs.meta => Helper.cs.meta} | 2 +- Assets/Scenes/Ride/Scripts/MockData.cs | 164 --------------- .../Scenes/Ride/Scripts/PlayerController.cs | 193 ++++++++---------- Assets/Scenes/Ride/Scripts/PlayerData.cs | 18 -- Assets/Scenes/Ride/Scripts/PlayerData.cs.meta | 11 - Assets/Scenes/Ride/Scripts/RouteController.cs | 47 ++--- Assets/Scenes/Ride/Scripts/RouteData.cs | 8 - Packages/manifest.json | 1 + Packages/packages-lock.json | 6 + 15 files changed, 309 insertions(+), 393 deletions(-) create mode 100644 Assets/Scenes/Ride/Scripts/GameManger.cs rename Assets/Scenes/Ride/Scripts/{MockData.cs.meta => GameManger.cs.meta} (100%) create mode 100644 Assets/Scenes/Ride/Scripts/Helper.cs rename Assets/Scenes/Ride/Scripts/{RouteData.cs.meta => Helper.cs.meta} (83%) delete mode 100644 Assets/Scenes/Ride/Scripts/MockData.cs delete mode 100644 Assets/Scenes/Ride/Scripts/PlayerData.cs delete mode 100644 Assets/Scenes/Ride/Scripts/PlayerData.cs.meta delete mode 100644 Assets/Scenes/Ride/Scripts/RouteData.cs diff --git a/Assets/Mapbox/Unity/Map/InitializeMapWithLocationProvider.cs b/Assets/Mapbox/Unity/Map/InitializeMapWithLocationProvider.cs index f92c1991..125ffbc3 100644 --- a/Assets/Mapbox/Unity/Map/InitializeMapWithLocationProvider.cs +++ b/Assets/Mapbox/Unity/Map/InitializeMapWithLocationProvider.cs @@ -1,7 +1,9 @@ namespace Mapbox.Unity.Map { using System.Collections; - using Mapbox.Unity.Location; + using Assets.Scenes.Ride.Scripts; + using Assets.Scripts.Apis; + using Mapbox.Unity.Location; using UnityEngine; public class InitializeMapWithLocationProvider : MonoBehaviour @@ -27,7 +29,19 @@ void LocationProvider_OnLocationUpdated(Unity.Location.Location location) { _locationProvider.OnLocationUpdated -= LocationProvider_OnLocationUpdated; - _map.Initialize(location.LatitudeLongitude, _map.AbsoluteZoom); + //_map.Initialize(location.LatitudeLongitude, _map.AbsoluteZoom); + + MapApi mapApi = new MapApi(); + var result = mapApi.GetData(5492); + if (result != null) + { + //全局保存当前路线信息 + GameManger.MapData = result; + //初始化map + var point = result.List[0].Point; + _map.Initialize(new Utils.Vector2d(point[0], point[1]), _map.AbsoluteZoom); + //初始化人物 TODO + } } } } diff --git a/Assets/PlayerFactory.cs b/Assets/PlayerFactory.cs index 97355501..b785deca 100644 --- a/Assets/PlayerFactory.cs +++ b/Assets/PlayerFactory.cs @@ -3,18 +3,21 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -public class PlayerFactory : MonoBehaviour +namespace Assets.Scenes.Ride.Scripts { - [SerializeField] - public GameObject _playerPrefab; - // Start is called before the first frame update - void Start() + public class PlayerFactory : MonoBehaviour { - if (_playerPrefab != null) + [SerializeField] + public GameObject _playerPrefab; + // Start is called before the first frame update + void Start() { - for (int i = 0; i < 100; i++) + if (_playerPrefab != null) { - Instantiate(_playerPrefab, new Vector3(i, 1, 0), Quaternion.identity); + for (int i = 0; i < 100; i++) + { + Instantiate(_playerPrefab, new Vector3(i, 1, 0), Quaternion.identity); + } } } } diff --git a/Assets/Scenes/Ride/Ride.unity b/Assets/Scenes/Ride/Ride.unity index 4949e714..c33f26f3 100644 --- a/Assets/Scenes/Ride/Ride.unity +++ b/Assets/Scenes/Ride/Ride.unity @@ -133,6 +133,7 @@ GameObject: - component: {fileID: 159634027} - component: {fileID: 159634025} - component: {fileID: 159634026} + - component: {fileID: 159634028} m_Layer: 0 m_Name: Map m_TagString: Untagged @@ -544,6 +545,23 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &159634028 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 159634024} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5cdee5ecffe869b40913ef4eb53fd993, type: 3} + m_Name: + m_EditorClassIdentifier: + _map: {fileID: 0} + MeshModifiers: + - {fileID: 11400000, guid: 7c518d85eb2ed0440ac158307895eec4, type: 2} + _material: {fileID: 0} + UpdateFrequency: 2 --- !u!1 &234181014 GameObject: m_ObjectHideFlags: 0 @@ -729,54 +747,6 @@ Light: m_UseBoundingSphereOverride: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 ---- !u!1 &1468894434 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1468894435} - - component: {fileID: 1468894436} - m_Layer: 0 - m_Name: Route - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1468894435 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1468894434} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 1.0251179, y: 4.418831, z: -2.967451} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1468894436 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1468894434} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5cdee5ecffe869b40913ef4eb53fd993, type: 3} - m_Name: - m_EditorClassIdentifier: - _map: {fileID: 159634025} - MeshModifiers: - - {fileID: 11400000, guid: 7c518d85eb2ed0440ac158307895eec4, type: 2} - _material: {fileID: 2100000, guid: bdad3ccf6401a414188827874d8999aa, type: 2} - UpdateFrequency: 2 --- !u!1 &1746432969 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scenes/Ride/Scripts/GameManger.cs b/Assets/Scenes/Ride/Scripts/GameManger.cs new file mode 100644 index 00000000..7962c881 --- /dev/null +++ b/Assets/Scenes/Ride/Scripts/GameManger.cs @@ -0,0 +1,40 @@ +using GeoJSON.Net.Geometry; +using Mapbox.Utils; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Linq; +using System.Collections.Generic; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using TurfCS; +using UnityEngine.Networking; +using Assets.Scripts.Apis.Models; + +namespace Assets.Scenes.Ride.Scripts +{ + public static class GameManger + { + public static double totaldistance; + public static List vl; + public static int routeId; + public static bool IsStart = true; + public static MapDataModel MapData; + //记录当前游戏一些全局数据 + + + public static Vector2d Along(double distance) + { + if (MapData != null) + { + var list = MapData.List.Select(p => new GeoJSON.Net.Geometry.GeographicPosition(p.Point[0], p.Point[1])); + LineString lineString = new LineString(list); + var pt1 = Turf.Along(lineString, distance); + var ll = ((GeographicPosition)((GeoJSON.Net.Geometry.Point)pt1.Geometry).Coordinates); + return new Vector2d(ll.Latitude, ll.Longitude); + } + return new Vector2d(0, 0); + } + } +} diff --git a/Assets/Scenes/Ride/Scripts/MockData.cs.meta b/Assets/Scenes/Ride/Scripts/GameManger.cs.meta similarity index 100% rename from Assets/Scenes/Ride/Scripts/MockData.cs.meta rename to Assets/Scenes/Ride/Scripts/GameManger.cs.meta diff --git a/Assets/Scenes/Ride/Scripts/Helper.cs b/Assets/Scenes/Ride/Scripts/Helper.cs new file mode 100644 index 00000000..b6da11be --- /dev/null +++ b/Assets/Scenes/Ride/Scripts/Helper.cs @@ -0,0 +1,109 @@ +using System; +using System.Globalization; + + +namespace Assets.Scenes.Ride.Scripts +{ + public class Helper + { + /// + /// 计算速度 + /// 参考 http://bikecalculator.com/index.html + /// + /// 海拔 + /// 坡度% + /// 功率 + /// 体重 + /// 自行车重量 + /// km/h + public static double CalculateSpeed(double elevationv, double gradev, double powerv, double rweightv, double bweightv) + { + if (powerv < 0) + { + return 0; + } + if (gradev < -10) + { + gradev = -10; + } + var tireValues = new double[] { 0.005, 0.004, 0.012 }; + var aeroValues = new double[] { 0.388, 0.445, 0.420, 0.300, 0.233, 0.200 }; + var units = 0; + + //温度 + var temperaturev = 25; + + //海拔 + //var elevationv = 100; + + //坡度 + //var gradev = 6 * 0.01 * -1; + + //风,转换成m/s + var headwindv = 0 / 3.6; + + var frontalArea = aeroValues[0]; + + var transv = 0.95; // no one knows what this is, so why bother presenting a choice? + var rollingRes = tireValues[0]; + + //应该是空气密度 + var density = (1.293 - 0.00426 * temperaturev) * Math.Exp(-elevationv / 7000.0); + + + //全空气阻力参数 + var a2 = 0.5 * frontalArea * density; // full air resistance parameter + var twt = 9.8 * (rweightv + bweightv); // total weight in newtons + var tres = twt * (gradev * 0.01 + rollingRes); // gravity and rolling resistance + + //var powerv = 195; + + var v = Newton(a2, headwindv, tres, transv, powerv) * 3.6;// convert to km/h + + //Trace.WriteLine($"速度为:{ v }"); + + var t1 = makeDecimal2(v * (units == 1 ? 1.609 : 1.0)); + return double.Parse(t1, CultureInfo.InvariantCulture); + } + private static double Newton(double aero, double hw, double tr, double tran, double p) + { + var vel = 20D; + var MAX = 10; + var TOL = 0.05; + for (int i = 0; i < MAX; i++) + { + var tv = vel + hw; + var aeroEff = (tv > 0.0) ? aero : -aero; // wind in face, must reverse effect + var f = vel * (aeroEff * tv * tv + tr) - tran * p; // the function + var fp = aeroEff * (3.0 * vel + hw) * tv + tr; // the derivative + var vNew = vel - f / fp; + if (Math.Abs(vNew - vel) < TOL) + { + return vNew; // success + } + vel = vNew; + } + return 0.0; + } + private static string makeDecimal2(double value) + { + if (value != 0) + { + var x = Math.Round(value * 100); + int d; + if (x < 100) + { + d = 0; + } + else + { + d = Convert.ToInt32(Math.Floor(x / 100), CultureInfo.InvariantCulture); + }; + var c = x % 100; + var g = (c >= 10) ? "" : "0"; + return "" + d + "." + g + c; + } + return value.ToString(CultureInfo.InvariantCulture); + } + } +} diff --git a/Assets/Scenes/Ride/Scripts/RouteData.cs.meta b/Assets/Scenes/Ride/Scripts/Helper.cs.meta similarity index 83% rename from Assets/Scenes/Ride/Scripts/RouteData.cs.meta rename to Assets/Scenes/Ride/Scripts/Helper.cs.meta index afa44bc9..845a5c3b 100644 --- a/Assets/Scenes/Ride/Scripts/RouteData.cs.meta +++ b/Assets/Scenes/Ride/Scripts/Helper.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4e343b676bd532340a23969ea51e7e94 +guid: ba2d01db4eb55e54b830f8c931fc9cae MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Scenes/Ride/Scripts/MockData.cs b/Assets/Scenes/Ride/Scripts/MockData.cs deleted file mode 100644 index e2ea7651..00000000 --- a/Assets/Scenes/Ride/Scripts/MockData.cs +++ /dev/null @@ -1,164 +0,0 @@ -using GeoJSON.Net.Geometry; -using Mapbox.Utils; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using System; -using System.Linq; -using System.Collections.Generic; -using System.Diagnostics; -using System.Globalization; -using System.IO; -using TurfCS; -using UnityEngine.Networking; - -public static class MockData -{ - public static double totaldistance; - public static List vl; - /// - /// 获取模拟的骑行记录 - /// - /// - public static List GetRideList() - { - string json = "{'Type':'LineString','TotalDistance':19.17906,'List':[{'Point':[26.092100000000002,119.33686000000002],'Elevation':7.6198},{'Point':[26.09211,119.33749000000002],'Elevation':7.5859},{'Point':[26.092170000000003,119.33840000000001],'Elevation':7.421},{'Point':[26.092260000000003,119.33921000000001],'Elevation':7.3133},{'Point':[26.092270002098761,119.33999000005943],'Elevation':7.2394},{'Point':[26.092280000000002,119.34077],'Elevation':7.2701},{'Point':[26.092240000956789,119.34129500009136],'Elevation':7.3416},{'Point':[26.092200000000002,119.34182000000001],'Elevation':7.4177},{'Point':[26.092083338752424,119.34270666844074],'Elevation':7.5033},{'Point':[26.09196667208499,119.34359333511317],'Elevation':7.2596},{'Point':[26.09185,119.34448],'Elevation':6.8727},{'Point':[26.091680000000004,119.34505000000001],'Elevation':6.4546},{'Point':[26.091536672044878,119.34593333550309],'Elevation':6.0312},{'Point':[26.091393338710645,119.34681666884185],'Elevation':5.751},{'Point':[26.091250000000002,119.3477],'Elevation':5.6373},{'Point':[26.091230000000003,119.34794000000001],'Elevation':5.6052},{'Point':[26.091225001411136,119.3485800001182],'Elevation':5.5997},{'Point':[26.091220000000003,119.34922000000002],'Elevation':5.6907},{'Point':[26.091330000000003,119.34997000000001],'Elevation':6.0231},{'Point':[26.091440000000002,119.35021],'Elevation':6.4916},{'Point':[26.09157,119.35095000000001],'Elevation':7.0092},{'Point':[26.091600000000003,119.3516],'Elevation':7.3641},{'Point':[26.091767507390937,119.35244499640774],'Elevation':7.4909},{'Point':[26.091935009859512,119.353289995235],'Elevation':6.9736},{'Point':[26.092102507405667,119.35413499648182],'Elevation':6.7797},{'Point':[26.092270000000003,119.35498000000001],'Elevation':6.5711},{'Point':[26.092405001867032,119.35571999903352],'Elevation':6.4206},{'Point':[26.092540000000003,119.35646000000001],'Elevation':6.3653},{'Point':[26.09269,119.35732000000002],'Elevation':7.251},{'Point':[26.092710000000004,119.35761000000001],'Elevation':8.2263},{'Point':[26.092703339253426,119.35853666675888],'Elevation':9.8464},{'Point':[26.092696672586847,119.35946333341218],'Elevation':11.8545},{'Point':[26.09269,119.36039000000001],'Elevation':13.6159},{'Point':[26.092665001414368,119.36103000007358],'Elevation':15.1102},{'Point':[26.092640000000003,119.36167],'Elevation':16.3984},{'Point':[26.0925,119.36225],'Elevation':17.1179},{'Point':[26.092270000000003,119.36289000000001],'Elevation':17.3805},{'Point':[26.092200000000002,119.36334000000001],'Elevation':17.3022},{'Point':[26.092180000000003,119.36363000000001],'Elevation':17.2282},{'Point':[26.092190000000002,119.36396],'Elevation':17.2224},{'Point':[26.092290000000002,119.36435000000002],'Elevation':17.1729},{'Point':[26.092100000000002,119.36453000000002],'Elevation':17.1065},{'Point':[26.092000000000002,119.36473000000001],'Elevation':17.0503},{'Point':[26.091910000000002,119.36502000000002],'Elevation':17.1392},{'Point':[26.09193,119.36525],'Elevation':17.2636},{'Point':[26.092150000000004,119.36569000000001],'Elevation':17.4486},{'Point':[26.09233,119.36581000000001],'Elevation':17.7034},{'Point':[26.092540000000003,119.36588],'Elevation':18.1077},{'Point':[26.092750000000002,119.36589000000001],'Elevation':18.5083},{'Point':[26.092950000000002,119.36582000000001],'Elevation':18.892},{'Point':[26.093110000000003,119.36572000000001],'Elevation':19.2643},{'Point':[26.09335,119.36544],'Elevation':19.6256},{'Point':[26.094033333311039,119.36542333352864],'Elevation':20.1707},{'Point':[26.094716666620165,119.36540666686258],'Elevation':21.2487},{'Point':[26.0954,119.36539],'Elevation':22.396},{'Point':[26.09605,119.36548],'Elevation':23.9715},{'Point':[26.09615,119.36567000000001],'Elevation':25.3392},{'Point':[26.096753333417059,119.36562333380944],'Elevation':26.626},{'Point':[26.097356666819095,119.36557666713746],'Elevation':28.1709},{'Point':[26.09796,119.36553],'Elevation':30.077},{'Point':[26.098260000000003,119.36556000000002],'Elevation':32.1094},{'Point':[26.09888000013564,119.36572999910875],'Elevation':34.3101},{'Point':[26.099500000000003,119.36590000000001],'Elevation':36.7362},{'Point':[26.099970000000003,119.36599000000001],'Elevation':39.7763},{'Point':[26.100720000000003,119.36591000000001],'Elevation':43.1691},{'Point':[26.101160000000004,119.36591000000001],'Elevation':46.6581},{'Point':[26.10181,119.36598000000001],'Elevation':50.4232},{'Point':[26.10208,119.36621000000001],'Elevation':53.9898},{'Point':[26.102210000000003,119.36674000000001],'Elevation':57.5845},{'Point':[26.101960000000002,119.36725000000001],'Elevation':61.2459},{'Point':[26.101530000000004,119.36721000000001],'Elevation':64.7154},{'Point':[26.100900000000003,119.36697000000001],'Elevation':68.1881},{'Point':[26.100415000136522,119.36697500001934],'Elevation':71.7923},{'Point':[26.09993,119.36698000000001],'Elevation':75.4172},{'Point':[26.099330000000002,119.36702000000001],'Elevation':79.066},{'Point':[26.09898,119.36725000000001],'Elevation':82.6214},{'Point':[26.098730000000003,119.36766000000001],'Elevation':86.2373},{'Point':[26.09861,119.36793000000002],'Elevation':89.5809},{'Point':[26.09861,119.36874000000002],'Elevation':93.0389},{'Point':[26.098460000000003,119.36911],'Elevation':96.3301},{'Point':[26.098190000000002,119.36928],'Elevation':99.4907},{'Point':[26.09746,119.36887000000002],'Elevation':103.3628},{'Point':[26.096970000000002,119.36884],'Elevation':107.3573},{'Point':[26.096780000000003,119.3687],'Elevation':110.9018},{'Point':[26.096580000000003,119.36793000000002],'Elevation':114.5406},{'Point':[26.096290000000003,119.36791000000001],'Elevation':117.672},{'Point':[26.096200000000003,119.36814000000001],'Elevation':120.5119},{'Point':[26.09617,119.36836000000001],'Elevation':123.111},{'Point':[26.09662,119.36900000000001],'Elevation':125.9004},{'Point':[26.09746,119.36924],'Elevation':129.0855},{'Point':[26.097690000000004,119.36980000000001],'Elevation':131.9769},{'Point':[26.09786,119.36989000000001],'Elevation':134.5568},{'Point':[26.098070000000003,119.36994000000001],'Elevation':136.8653},{'Point':[26.0985,119.37068000000001],'Elevation':139.8105},{'Point':[26.098650000000003,119.3708],'Elevation':142.5769},{'Point':[26.098830000000003,119.37083000000001],'Elevation':145.051},{'Point':[26.09898,119.37069000000001],'Elevation':147.3343},{'Point':[26.099090000000004,119.37017000000002],'Elevation':149.7183},{'Point':[26.09954,119.36972000000002],'Elevation':152.3287},{'Point':[26.099600000000002,119.36906],'Elevation':155.5478},{'Point':[26.099700000000002,119.36863000000001],'Elevation':158.5969},{'Point':[26.099880000000002,119.36856000000002],'Elevation':161.5755},{'Point':[26.100420000279684,119.36885999859783],'Elevation':164.7921},{'Point':[26.10096,119.36916000000001],'Elevation':168.3021},{'Point':[26.101480000000002,119.36936000000001],'Elevation':171.7078},{'Point':[26.10215333380841,119.36909666970033],'Elevation':175.177},{'Point':[26.10282666713865,119.36883333636827],'Elevation':179.1647},{'Point':[26.1035,119.36857],'Elevation':183.2877},{'Point':[26.103880000000004,119.36865000000002],'Elevation':187.1894},{'Point':[26.104670000000002,119.36827000000001],'Elevation':191.5371},{'Point':[26.10497,119.36850000000001],'Elevation':195.5448},{'Point':[26.10534,119.36938],'Elevation':199.9791},{'Point':[26.105710000000002,119.36991],'Elevation':204.3775},{'Point':[26.105780000000003,119.3708],'Elevation':209.0429},{'Point':[26.106375000150081,119.37088499958534],'Elevation':214.0787},{'Point':[26.10697,119.37097000000001],'Elevation':218.9387},{'Point':[26.107495000170683,119.37109499946651],'Elevation':223.5748},{'Point':[26.108020000000003,119.37122000000001],'Elevation':228.2484},{'Point':[26.10874,119.37152],'Elevation':232.9643},{'Point':[26.10922,119.37125],'Elevation':236.9616},{'Point':[26.10929,119.37074000000001],'Elevation':240.3459},{'Point':[26.109725000352633,119.37044500106211],'Elevation':243.2112},{'Point':[26.11016,119.37015000000001],'Elevation':245.6371},{'Point':[26.110090000000003,119.36953000000001],'Elevation':247.691},{'Point':[26.110300000000002,119.36856000000002],'Elevation':249.4299},{'Point':[26.110920000000004,119.3683],'Elevation':250.9021},{'Point':[26.111463334140218,119.36864333013777],'Elevation':264.003},{'Point':[26.112006667467366,119.36898666346715],'Elevation':275.0947},{'Point':[26.112550000000002,119.36933],'Elevation':284.4855},{'Point':[26.11315,119.36999000000002],'Elevation':292.4361},{'Point':[26.113750000000003,119.36999000000002],'Elevation':299.1675},{'Point':[26.114390000000004,119.37058],'Elevation':304.8666},{'Point':[26.11476,119.37038000000001],'Elevation':309.6916},{'Point':[26.115185000813142,119.36986500199586],'Elevation':314.3933},{'Point':[26.115610000000004,119.36935000000001],'Elevation':319.1974},{'Point':[26.11579,119.36929],'Elevation':323.2648},{'Point':[26.116000000000003,119.36936000000001],'Elevation':327.0489},{'Point':[26.11605,119.36958000000001],'Elevation':330.4413},{'Point':[26.115840000000002,119.36983000000001],'Elevation':333.5128},{'Point':[26.115330000000004,119.37017000000002],'Elevation':336.6577},{'Point':[26.114965000694809,119.37062000140982],'Elevation':339.6055},{'Point':[26.114600000000003,119.37107],'Elevation':342.2608},{'Point':[26.114070000274864,119.37073499841004],'Elevation':344.676},{'Point':[26.11354,119.3704],'Elevation':346.819},{'Point':[26.112940000000002,119.37076],'Elevation':349.0643},{'Point':[26.112480000722037,119.3703149982866],'Elevation':351.8838},{'Point':[26.11202,119.36987],'Elevation':354.7863},{'Point':[26.11166,119.36979000000001],'Elevation':357.4966},{'Point':[26.11182,119.37071000000002],'Elevation':360.7728},{'Point':[26.11156,119.37161],'Elevation':364.617},{'Point':[26.111860001116195,119.3721949983737],'Elevation':368.3455},{'Point':[26.112160000000003,119.37278],'Elevation':372.2967},{'Point':[26.112460000000002,119.37353000000002],'Elevation':376.5543},{'Point':[26.11193,119.37394],'Elevation':380.9228},{'Point':[26.112070000841374,119.37443499939415],'Elevation':385.1427},{'Point':[26.11221,119.37493],'Elevation':389.2231},{'Point':[26.11175,119.37504000000001],'Elevation':393.0503},{'Point':[26.111309999985217,119.37492499955135],'Elevation':396.7722},{'Point':[26.110870000000002,119.37481000000001],'Elevation':400.2684},{'Point':[26.110425000222772,119.37502500078782],'Elevation':403.9277},{'Point':[26.109980000000004,119.37524],'Elevation':407.6469},{'Point':[26.10913,119.37496000000002],'Elevation':411.8953},{'Point':[26.10835,119.37504000000001],'Elevation':416.9476},{'Point':[26.10761,119.37450000000001],'Elevation':422.2909},{'Point':[26.10703,119.37447000000002],'Elevation':427.2441},{'Point':[26.106640000000002,119.37422000000001],'Elevation':431.7245},{'Point':[26.106225001986182,119.37498500277395],'Elevation':436.3276},{'Point':[26.10581,119.37575000000001],'Elevation':441.2936},{'Point':[26.105570000000004,119.37579000000001],'Elevation':445.9765},{'Point':[26.105310000000003,119.37541000000002],'Elevation':450.2971},{'Point':[26.10459,119.37522000000001],'Elevation':454.7617},{'Point':[26.104360000000003,119.37476000000001],'Elevation':459.1275},{'Point':[26.103700000000003,119.37491000000001],'Elevation':463.7408},{'Point':[26.103450000000002,119.37575000000001],'Elevation':468.441},{'Point':[26.1031,119.37599000000002],'Elevation':472.7149},{'Point':[26.102850000000004,119.37651000000001],'Elevation':476.7919},{'Point':[26.103410000000004,119.37713000000001],'Elevation':480.8448},{'Point':[26.103585001156322,119.37769999926441],'Elevation':484.9601},{'Point':[26.10376,119.37827000000001],'Elevation':489.1789},{'Point':[26.103615001271109,119.37888500090267],'Elevation':493.5466},{'Point':[26.10347,119.37950000000001],'Elevation':497.8687},{'Point':[26.10328,119.38007],'Elevation':502.3131},{'Point':[26.103060000000003,119.38015000000001],'Elevation':506.1941},{'Point':[26.102500000000003,119.37995000000001],'Elevation':510.5886},{'Point':[26.101930000000003,119.38011000000002],'Elevation':514.9763},{'Point':[26.101360000000003,119.3798],'Elevation':519.3153},{'Point':[26.101180000000003,119.37981],'Elevation':523.1377},{'Point':[26.102020000000003,119.38038000000002],'Elevation':527.6712},{'Point':[26.10234,119.38047000000002],'Elevation':531.8868},{'Point':[26.102846667738461,119.38085999663812],'Elevation':536.0141},{'Point':[26.103353334428057,119.38124999665573],'Elevation':540.6754},{'Point':[26.10386,119.38164],'Elevation':545.2737},{'Point':[26.104340000607969,119.38202999846695],'Elevation':549.9643},{'Point':[26.104820000000004,119.38242000000001],'Elevation':554.3542},{'Point':[26.105360000020877,119.38243999990837],'Elevation':558.5402},{'Point':[26.105900000000002,119.38246000000001],'Elevation':562.6455},{'Point':[26.1061,119.38268000000001],'Elevation':566.5015},{'Point':[26.106635002173569,119.38347499635361],'Elevation':571.2737},{'Point':[26.107170000000004,119.38427000000001],'Elevation':576.179},{'Point':[26.107090000000003,119.38451],'Elevation':580.2676},{'Point':[26.10687,119.38457000000001],'Elevation':583.7139},{'Point':[26.10666,119.38443000000001],'Elevation':586.6991},{'Point':[26.10638,119.38418000000001],'Elevation':589.3707},{'Point':[26.106180000000002,119.3841],'Elevation':591.6939},{'Point':[26.10592,119.38418000000001],'Elevation':593.6685},{'Point':[26.105890000000002,119.3845],'Elevation':595.4492},{'Point':[26.10583,119.38485000000001],'Elevation':597.3279},{'Point':[26.105770000000003,119.38508000000002],'Elevation':599.0305},{'Point':[26.105660000000004,119.38531],'Elevation':600.9182},{'Point':[26.105520000000002,119.38555000000001],'Elevation':602.7235},{'Point':[26.10537,119.38589],'Elevation':604.3347},{'Point':[26.10536,119.38667000000001],'Elevation':605.7909},{'Point':[26.105300000000003,119.38753000000001],'Elevation':606.5821},{'Point':[26.10525,119.38786],'Elevation':607.0847},{'Point':[26.105130000000003,119.38821000000002],'Elevation':607.4935},{'Point':[26.10499,119.38849],'Elevation':607.8733},{'Point':[26.104830000000003,119.38877000000001],'Elevation':608.1503},{'Point':[26.104470000000003,119.38881],'Elevation':608.253},{'Point':[26.10424,119.38872],'Elevation':608.3354},{'Point':[26.10405,119.38858],'Elevation':608.4388},{'Point':[26.103890000000003,119.38839000000002],'Elevation':608.6767},{'Point':[26.10377,119.38814],'Elevation':609.191},{'Point':[26.103630000000003,119.38771000000001],'Elevation':609.8426},{'Point':[26.103085000145896,119.38740499929808],'Elevation':610.1014},{'Point':[26.102660000000004,119.38721000000001],'Elevation':610.0398},{'Point':[26.10235,119.38673000000001],'Elevation':609.842},{'Point':[26.102190000000004,119.38657],'Elevation':609.7819},{'Point':[26.101910000000004,119.38656],'Elevation':610.1573},{'Point':[26.101420000136049,119.38663000027626],'Elevation':611.1515},{'Point':[26.10093,119.3867],'Elevation':612.6112},{'Point':[26.100480000257267,119.38687500061438],'Elevation':614.1814},{'Point':[26.100030000000004,119.38705000000002],'Elevation':616.2837},{'Point':[26.09984,119.38706],'Elevation':618.5006},{'Point':[26.09963,119.38703000000001],'Elevation':620.3776},{'Point':[26.099400000000003,119.38687000000002],'Elevation':622.2734},{'Point':[26.099010000000003,119.38656],'Elevation':624.5717},{'Point':[26.098830000000003,119.38651000000002],'Elevation':626.6279},{'Point':[26.098370000000003,119.38655000000001],'Elevation':628.5529},{'Point':[26.09824,119.38638000000002],'Elevation':630.3038},{'Point':[26.098370000000003,119.38611000000002],'Elevation':632.1358},{'Point':[26.09843,119.38587000000001],'Elevation':634.1362},{'Point':[26.09823,119.38591000000001],'Elevation':636.043},{'Point':[26.09784,119.38646000000001],'Elevation':638.2462},{'Point':[26.097720000000002,119.38682000000001],'Elevation':640.4352},{'Point':[26.097690000000004,119.38718000000001],'Elevation':642.4418},{'Point':[26.09758,119.38739000000001],'Elevation':644.176},{'Point':[26.097430000000003,119.38780000000001],'Elevation':645.6596},{'Point':[26.09738,119.38807000000001],'Elevation':646.9524},{'Point':[26.09721,119.38834000000001],'Elevation':648.1866},{'Point':[26.0969,119.38868000000001],'Elevation':649.4983},{'Point':[26.096850000000003,119.38897000000001],'Elevation':650.7883},{'Point':[26.09674,119.38929000000002],'Elevation':652.2209},{'Point':[26.09589,119.38932000000001],'Elevation':653.7727},{'Point':[26.09571,119.38952],'Elevation':655.1325},{'Point':[26.09571,119.38975],'Elevation':656.2869},{'Point':[26.09587,119.39011],'Elevation':657.2505},{'Point':[26.09606,119.39028],'Elevation':658.1046},{'Point':[26.09616,119.39046],'Elevation':658.9228},{'Point':[26.096300000000003,119.39104],'Elevation':660.459},{'Point':[26.096310000000003,119.39127],'Elevation':662.2473},{'Point':[26.09598,119.39155000000001],'Elevation':664.4713},{'Point':[26.095820000000003,119.39167],'Elevation':666.6825},{'Point':[26.095640000000003,119.39187000000001],'Elevation':668.7218},{'Point':[26.09569,119.39245000000001],'Elevation':670.6814},{'Point':[26.095540000000003,119.39267000000001],'Elevation':672.4003},{'Point':[26.0953,119.39279],'Elevation':673.9016},{'Point':[26.09486,119.39255000000001],'Elevation':675.6864},{'Point':[26.094620000000003,119.39223000000001],'Elevation':677.8631},{'Point':[26.09429,119.39158],'Elevation':680.4758},{'Point':[26.094170000000002,119.39131],'Elevation':683.2368},{'Point':[26.09401,119.39118],'Elevation':685.7431},{'Point':[26.093760000000003,119.39131],'Elevation':687.5737},{'Point':[26.093600000000002,119.39145],'Elevation':688.9027},{'Point':[26.093290000000003,119.39167],'Elevation':689.6982},{'Point':[26.09298,119.39185],'Elevation':695.1074},{'Point':[26.092750000000002,119.39205000000001],'Elevation':700.8233},{'Point':[26.09251,119.39211000000002],'Elevation':705.6443},{'Point':[26.092060000000004,119.39227000000001],'Elevation':709.226},{'Point':[26.09164,119.39302],'Elevation':711.5055},{'Point':[26.09146,119.39357000000001],'Elevation':712.8711},{'Point':[26.09136,119.39399000000002],'Elevation':713.7389},{'Point':[26.09089,119.39449],'Elevation':714.3663},{'Point':[26.090590000000002,119.39497000000001],'Elevation':714.6291},{'Point':[26.090560000000004,119.39532000000001],'Elevation':714.6308},{'Point':[26.09109,119.39600000000002],'Elevation':714.7119},{'Point':[26.09119,119.39623],'Elevation':714.8067},{'Point':[26.091030000000003,119.39649000000001],'Elevation':714.8594},{'Point':[26.090840000000004,119.39649000000001],'Elevation':714.9024},{'Point':[26.090270000000004,119.39612000000001],'Elevation':715.0584},{'Point':[26.08969,119.39600000000002],'Elevation':714.9897},{'Point':[26.089150000000004,119.39584],'Elevation':714.2015},{'Point':[26.08895,119.39581000000001],'Elevation':712.9223},{'Point':[26.088710000000003,119.39612000000001],'Elevation':711.6046},{'Point':[26.08857,119.39682],'Elevation':709.9829},{'Point':[26.08845,119.39725000000001],'Elevation':708.383},{'Point':[26.088260000000002,119.39745],'Elevation':706.8674},{'Point':[26.08799,119.39733000000001],'Elevation':705.3542},{'Point':[26.0878,119.39685000000001],'Elevation':703.8951},{'Point':[26.087400000000002,119.39682],'Elevation':702.35},{'Point':[26.086980000742169,119.39737000096451],'Elevation':699.9469},{'Point':[26.086710000000004,119.39782000000001],'Elevation':697.3756},{'Point':[26.086190000000002,119.39827000000001],'Elevation':695.6173},{'Point':[26.08601,119.39857],'Elevation':694.5519},{'Point':[26.085890000000003,119.39900000000002],'Elevation':694.2925},{'Point':[26.085780000000003,119.39920000000001],'Elevation':694.2185},{'Point':[26.085600000000003,119.39920000000001],'Elevation':694.096},{'Point':[26.08546,119.39891000000001],'Elevation':693.7562},{'Point':[26.085390000000004,119.39843],'Elevation':693.3381},{'Point':[26.08518,119.39835000000001],'Elevation':693.1145},{'Point':[26.08499,119.39859000000001],'Elevation':693.077},{'Point':[26.08471,119.39886000000001],'Elevation':693.3167},{'Point':[26.08452,119.39897],'Elevation':693.627},{'Point':[26.084220000000002,119.39876000000001],'Elevation':693.836},{'Point':[26.08424,119.39817000000001],'Elevation':693.9194},{'Point':[26.084130000000002,119.39773000000001],'Elevation':693.9026},{'Point':[26.08386,119.39732000000001],'Elevation':693.7796},{'Point':[26.08339,119.39710000000001],'Elevation':693.5281},{'Point':[26.083060000000003,119.39707000000001],'Elevation':693.1005},{'Point':[26.08255,119.39725000000001],'Elevation':692.3015},{'Point':[26.082120000000003,119.39749],'Elevation':691.7783},{'Point':[26.0818,119.39770000000001],'Elevation':691.7126},{'Point':[26.08161,119.39767],'Elevation':691.7521},{'Point':[26.08172,119.39722],'Elevation':692.3989},{'Point':[26.08189,119.39701000000001],'Elevation':693.4895},{'Point':[26.08163,119.39686],'Elevation':695.1979},{'Point':[26.08143,119.39691],'Elevation':696.8422},{'Point':[26.08132,119.39729000000001],'Elevation':698.7174},{'Point':[26.08113,119.39756000000001],'Elevation':700.6271},{'Point':[26.08086,119.39759000000001],'Elevation':702.5383},{'Point':[26.080470000000002,119.39744],'Elevation':704.612},{'Point':[26.080050000000004,119.39706000000001],'Elevation':707.0991},{'Point':[26.07994,119.39687],'Elevation':709.421},{'Point':[26.079860000000004,119.39646],'Elevation':711.6752},{'Point':[26.079720000000002,119.39631000000001],'Elevation':713.5821},{'Point':[26.079255000078053,119.39643000046932],'Elevation':715.12},{'Point':[26.07879,119.39655],'Elevation':716.3652},{'Point':[26.078450000000004,119.39686],'Elevation':717.2677},{'Point':[26.078210000000002,119.39727],'Elevation':718.0333},{'Point':[26.07794,119.39742000000001],'Elevation':718.8977},{'Point':[26.07759,119.39730000000002],'Elevation':719.8059},{'Point':[26.077260000000003,119.39704],'Elevation':721.242},{'Point':[26.076950000000004,119.39714000000001],'Elevation':723.1065},{'Point':[26.07693,119.39759000000001],'Elevation':725.5745},{'Point':[26.076800000000002,119.39787000000001],'Elevation':728.2253},{'Point':[26.076100000000004,119.39844000000001],'Elevation':732.0783},{'Point':[26.076020000000003,119.39863000000001],'Elevation':735.71},{'Point':[26.07609,119.39901],'Elevation':739.1636},{'Point':[26.075870000000002,119.39919],'Elevation':742.1749},{'Point':[26.07572,119.39907000000001],'Elevation':744.8886},{'Point':[26.07561,119.39880000000001],'Elevation':747.2413},{'Point':[26.07543,119.39880000000001],'Elevation':749.2608},{'Point':[26.075170000000004,119.39931000000001],'Elevation':751.5334},{'Point':[26.07504,119.39948000000001],'Elevation':753.8117},{'Point':[26.07475,119.39939000000001],'Elevation':756.0781},{'Point':[26.0745,119.39891000000001],'Elevation':758.6363},{'Point':[26.07428,119.39861],'Elevation':761.2547},{'Point':[26.0741,119.39866],'Elevation':763.8518},{'Point':[26.07382,119.39880000000001],'Elevation':766.5628},{'Point':[26.073590000000003,119.39886000000001],'Elevation':769.3197},{'Point':[26.073410000000003,119.39872000000001],'Elevation':771.9928},{'Point':[26.07299,119.39821],'Elevation':775.5441},{'Point':[26.072950000000002,119.39783000000001],'Elevation':779.066},{'Point':[26.072830000000003,119.39755000000001],'Elevation':782.396},{'Point':[26.072820000000004,119.39732000000001],'Elevation':785.3671},{'Point':[26.072940000000003,119.39707000000001],'Elevation':787.8826},{'Point':[26.073130000000003,119.39679000000001],'Elevation':790.3221},{'Point':[26.07318,119.39655],'Elevation':792.5086},{'Point':[26.07288,119.39598000000001],'Elevation':794.7309},{'Point':[26.07279,119.39563000000001],'Elevation':795.3427},{'Point':[26.072670000000002,119.39534],'Elevation':794.873},{'Point':[26.07234,119.39502000000002],'Elevation':792.0309},{'Point':[26.072070000000004,119.39494],'Elevation':789.1614},{'Point':[26.071600000000004,119.39523000000001],'Elevation':786.3011},{'Point':[26.071350000000002,119.39529],'Elevation':783.7261}]}"; - - using (JsonTextReader reader = new JsonTextReader(new StringReader(json))) - { - JObject jo = (JObject)JToken.ReadFrom(reader); - totaldistance = (double)jo["TotalDistance"]; - vl = new List(); - foreach (var point in jo["List"]) - { - var s = point["Point"]; - Vector2d points = new Vector2d(Math.Round(Convert.ToDouble(s[0]), 5), Math.Round(Convert.ToDouble(s[1]), 5)); - vl.Add(points); - } - return vl; - } - } - - public static List GetRideList(string json) - { - using (JsonTextReader reader = new JsonTextReader(new StringReader(json))) - { - JObject jo = (JObject)JToken.ReadFrom(reader); - vl = new List(); - foreach (var point in jo["List"]) - { - var s = point["Point"]; - Vector2d points = new Vector2d(Math.Round(Convert.ToDouble(s[0]), 5), Math.Round(Convert.ToDouble(s[1]), 5)); - vl.Add(points); - } - return vl; - } - } - public static Vector2d Along(double distance) - { - var list = vl.Select(p => new GeoJSON.Net.Geometry.GeographicPosition(p.x, p.y)); - LineString lineString = new LineString(list); - var pt1 = Turf.Along(lineString, distance); - var ll =((GeographicPosition)((GeoJSON.Net.Geometry.Point)pt1.Geometry).Coordinates); - return new Vector2d(ll.Latitude, ll.Longitude); - } - /// - /// 计算速度 - /// 参考 http://bikecalculator.com/index.html - /// - /// 海拔 - /// 坡度% - /// 功率 - /// 体重 - /// 自行车重量 - /// km/h - public static double CalculateSpeed(double elevationv, double gradev, double powerv, double rweightv, double bweightv) - { - if (powerv < 0) - { - return 0; - } - if (gradev < -10) - { - gradev = -10; - } - var tireValues = new double[] { 0.005, 0.004, 0.012 }; - var aeroValues = new double[] { 0.388, 0.445, 0.420, 0.300, 0.233, 0.200 }; - var units = 0; - - //温度 - var temperaturev = 25; - - //海拔 - //var elevationv = 100; - - //坡度 - //var gradev = 6 * 0.01 * -1; - - //风,转换成m/s - var headwindv = 0 / 3.6; - - var frontalArea = aeroValues[0]; - - var transv = 0.95; // no one knows what this is, so why bother presenting a choice? - var rollingRes = tireValues[0]; - - //应该是空气密度 - var density = (1.293 - 0.00426 * temperaturev) * Math.Exp(-elevationv / 7000.0); - - - //全空气阻力参数 - var a2 = 0.5 * frontalArea * density; // full air resistance parameter - var twt = 9.8 * (rweightv + bweightv); // total weight in newtons - var tres = twt * (gradev * 0.01 + rollingRes); // gravity and rolling resistance - - //var powerv = 195; - - var v = Newton(a2, headwindv, tres, transv, powerv) * 3.6;// convert to km/h - - //Trace.WriteLine($"速度为:{ v }"); - - var t1 = makeDecimal2(v * (units == 1 ? 1.609 : 1.0)); - return double.Parse(t1, CultureInfo.InvariantCulture); - } - private static double Newton(double aero, double hw, double tr, double tran, double p) - { - var vel = 20D; - var MAX = 10; - var TOL = 0.05; - for (int i = 0; i < MAX; i++) - { - var tv = vel + hw; - var aeroEff = (tv > 0.0) ? aero : -aero; // wind in face, must reverse effect - var f = vel * (aeroEff * tv * tv + tr) - tran * p; // the function - var fp = aeroEff * (3.0 * vel + hw) * tv + tr; // the derivative - var vNew = vel - f / fp; - if (Math.Abs(vNew - vel) < TOL) - { - return vNew; // success - } - vel = vNew; - } - return 0.0; - } - - private static string makeDecimal2(double value) - { - if (value != 0) - { - var x = Math.Round(value * 100); - int d; - if (x < 100) - { - d = 0; - } - else - { - d = Convert.ToInt32(Math.Floor(x / 100), CultureInfo.InvariantCulture); - }; - var c = x % 100; - var g = (c >= 10) ? "" : "0"; - return "" + d + "." + g + c; - } - return value.ToString(CultureInfo.InvariantCulture); - } -} diff --git a/Assets/Scenes/Ride/Scripts/PlayerController.cs b/Assets/Scenes/Ride/Scripts/PlayerController.cs index f3c7223a..30efcdc6 100644 --- a/Assets/Scenes/Ride/Scripts/PlayerController.cs +++ b/Assets/Scenes/Ride/Scripts/PlayerController.cs @@ -1,13 +1,11 @@ using System.Collections; -using System.Collections.Generic; using UnityEngine; using Mapbox.Unity.Map; using Mapbox.Utils; -using Mapbox.Unity.Utilities; -using System.Linq; +using Assets.Scripts.Apis.Models; +using static Assets.Scripts.Apis.Models.MapDataModel; - -namespace Ride.Scripts +namespace Assets.Scenes.Ride.Scripts { public class PlayerController : MonoBehaviour { @@ -18,126 +16,105 @@ namespace Ride.Scripts float characterSpeed; [SerializeField] Animator characterAnimator; - - //[Header("References")] - //[SerializeField] - //AstronautDirections directions; - //[SerializeField] - //Transform startPoint; - //[SerializeField] - //Transform endPoint; [SerializeField] AbstractMap map; - [SerializeField] - GameObject rayPlane; - //[SerializeField] - //Transform _movementEndPoint; - - [SerializeField] - LayerMask layerMask; - - Ray ray; - RaycastHit hit; - LayerMask raycastPlane; - float clicktime; - bool moving; - bool characterDisabled; - private List rideList; - void Start() - { - characterAnimator = GetComponentInChildren(); - //初始化玩家坐标 - currentlatlong = map.WorldToGeoPosition(transform.localPosition); - nextlatlong = currentlatlong; - totalDistance = 0; - //StartCoroutine("Timer"); - //if (!Application.isEditor) - //{ - // this.enabled = false; - // return; - //} - } - //gameStatus idle start pause finish + Vector3 nextPos; + Vector3 prePos; private Vector2d currentlatlong; //当前坐标 private Vector2d nextlatlong; //下一个点的坐标 private double totalDistance; + private int ticks;//秒数 + public float timer = 1.0f;//计时器 + + void Start() + { + characterAnimator = GetComponentInChildren(); + InitializePlayer(); + } + //初始化人物 + void InitializePlayer() + { + //获取玩家初始距离 + currentlatlong = map.WorldToGeoPosition(transform.localPosition); + nextlatlong = currentlatlong; + totalDistance = 0; + ticks = 0; + } + void Update() { - if (characterDisabled) - return; - - //CamControl(); - - bool click = false; - - if (Input.GetMouseButtonDown(0)) + timer -= Time.deltaTime; + if (timer <= 0 && GameManger.IsStart)//定时器 { - clicktime = Time.time; - } - if (Input.GetMouseButtonUp(0)) - { - if (Time.time - clicktime > 0.15f) - { - click = true; - } - } - //开始骑行 - //if (click) - { - StartCoroutine("Walk"); + ticks++; + Riding(); + timer = 1.0f; } } - IEnumerator Walk() + //计算当前玩家高度和坡度 + Item find(double totalDistance) { - yield return new WaitForSeconds(1f); - //读取当前速度以及骑行距离 - double distance = MockData.CalculateSpeed(Random.Range(100,300), 10, 100, 65, 7) / 3600; - if (totalDistance + distance <= MockData.totaldistance) - { - totalDistance += distance; - //计算下一个点的位置 - nextlatlong = MockData.Along(totalDistance); + double sumDistance = 0; + MapDataModel mapDataModel = GameManger.MapData; + foreach (var item in mapDataModel.List) + { + sumDistance += item.Distance; + if (totalDistance < sumDistance) + { + return item; + } + } + return mapDataModel.List[0]; + } + void Riding() + { + //yield return new WaitForSeconds(1.0f); + ////读取当前速度以及骑行距离 + MapDataModel mapDataModel = GameManger.MapData; + Item nextRange = find(totalDistance); + double elevation = nextRange.Elevation; + double gradev = nextRange.Grade; + double power = Random.Range(700, 2000);//TODO + double distance = Helper.CalculateSpeed(elevation, gradev, power, 65, 7) / 3600; + + + characterAnimator.SetBool("IsRide", false); + totalDistance += distance; + if (totalDistance <= mapDataModel.TotalDistance) + { if (distance > 0) { - CamControl(); + var v = GameManger.Along(totalDistance); + StartCoroutine(CamControl()); //设定动画状态 characterAnimator.SetBool("IsRide", true); - nextPos = map.GeoToWorldPosition(nextlatlong); + nextPos = map.GeoToWorldPosition(v); + prePos = transform.localPosition; //转向 StartCoroutine(LookAtNextPos()); - //让人物移动 TODO 可以继续分点增加动画的流畅度 - transform.localPosition = nextPos; - //StartCoroutine(MoveTo()); + //移动 + StartCoroutine(MoveTo()); } - else - { - moving = false; - characterAnimator.SetBool("IsRide", false); - } - } - else - { - moving = false; - characterAnimator.SetBool("IsRide", false); } } - - #region Character : Movement - List futurePositions = new List(); - bool interruption; - - - Vector3 nextPos; - Vector3 prevPos; - - #endregion - + IEnumerator MoveTo() + { + //让人物移动分点增加动画的流畅度 + float t = 0; + while (t < 1) + { + t += Time.deltaTime; + Vector3 v = Vector3.Lerp(transform.localPosition, nextPos, t); + transform.localPosition = v; + yield return null; + } + } #region Character : Rotation IEnumerator LookAtNextPos() { - Quaternion neededRotation = Quaternion.LookRotation(character.transform.position - nextPos); + Quaternion neededRotation = Quaternion.LookRotation(transform.localPosition - nextPos); Quaternion thisRotation = character.transform.localRotation; float t = 0; @@ -158,14 +135,20 @@ namespace Ride.Scripts Vector3 previousPos = Vector3.zero; Vector3 deltaPos = Vector3.zero; - void CamControl() + IEnumerator CamControl() { if (cam != null) { - deltaPos = transform.position - previousPos; - //deltaPos.y = 0; - cam.transform.position = Vector3.Lerp(cam.transform.position, cam.transform.position + deltaPos, Time.time); - previousPos = transform.position; + float t = 0; + while (t < 1.0f) + { + t += Time.deltaTime / 0.5f; + deltaPos = transform.position - previousPos; + //deltaPos.y = 0; + cam.transform.position = Vector3.Lerp(cam.transform.position, cam.transform.position + deltaPos, t); + previousPos = transform.position; + yield return null; + } } } #endregion diff --git a/Assets/Scenes/Ride/Scripts/PlayerData.cs b/Assets/Scenes/Ride/Scripts/PlayerData.cs deleted file mode 100644 index 5ce9b80c..00000000 --- a/Assets/Scenes/Ride/Scripts/PlayerData.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class PlayerData : MonoBehaviour -{ - // Start is called before the first frame update - void Start() - { - - } - - // Update is called once per frame - void Update() - { - - } -} diff --git a/Assets/Scenes/Ride/Scripts/PlayerData.cs.meta b/Assets/Scenes/Ride/Scripts/PlayerData.cs.meta deleted file mode 100644 index 53c81a0c..00000000 --- a/Assets/Scenes/Ride/Scripts/PlayerData.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0e420a61df06f8b428bbd6b9f11190a4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scenes/Ride/Scripts/RouteController.cs b/Assets/Scenes/Ride/Scripts/RouteController.cs index 669d1eaa..0002b8ed 100644 --- a/Assets/Scenes/Ride/Scripts/RouteController.cs +++ b/Assets/Scenes/Ride/Scripts/RouteController.cs @@ -1,20 +1,15 @@ -namespace Mapbox.Unity.MeshGeneration.Factories -{ - using UnityEngine; - using System.Collections.Generic; - using System.Linq; - using Mapbox.Unity.Map; - using Data; - using Modifiers; - using Mapbox.Utils; - using Mapbox.Unity.Utilities; - using System.Collections; - using Newtonsoft.Json; - using System.IO; - using Newtonsoft.Json.Linq; - using System; +using UnityEngine; +using System.Collections.Generic; +using System.Linq; +using Mapbox.Unity.Map; +using Mapbox.Utils; +using System.Collections; +using Mapbox.Unity.MeshGeneration.Modifiers; +using Mapbox.Unity.MeshGeneration.Data; - public class RouteController : MonoBehaviour +namespace Assets.Scenes.Ride.Scripts +{ + public class RouteController : MonoBehaviour { [SerializeField] AbstractMap _map; @@ -48,7 +43,7 @@ { modifier.Initialize(); } - + StartCoroutine(QueryTimer()); } @@ -71,22 +66,18 @@ var meshData = new MeshData(); var dat = new List(); - List points = MockData.vl; - if (points == null) + var mapData = GameManger.MapData; + if (mapData != null) { - points = MockData.GetRideList(); - } - { - foreach (var point in points) + foreach (var mapDataItem in mapData.List) { - Vector3 item = _map.GeoToWorldPosition(point);//point.x, point.y, _map.CenterMercator, _map.WorldRelativeScale); - //item.y = (float)(_map.QueryElevationInUnityUnitsAt(point))+0.3f; - item.y += 0.5f; + var point = mapDataItem.Point; + Vector3 item = _map.GeoToWorldPosition(new Vector2d(point[0], point[1])); + item.y += 0.4f; dat.Add(item); } var feat = new VectorFeatureUnity(); feat.Points.Add(dat); - foreach (MeshModifier mod in MeshModifiers.Where(x => x.Active)) { mod.Run(feat, meshData, _map.WorldRelativeScale * 8); @@ -102,7 +93,7 @@ { _directionsGO.Destroy(); } - _directionsGO = new GameObject("direction waypoint " + " entity"); + _directionsGO = new GameObject("MapRoute"); var mesh = _directionsGO.AddComponent().mesh; mesh.subMeshCount = data.Triangles.Count; diff --git a/Assets/Scenes/Ride/Scripts/RouteData.cs b/Assets/Scenes/Ride/Scripts/RouteData.cs deleted file mode 100644 index c9bafac9..00000000 --- a/Assets/Scenes/Ride/Scripts/RouteData.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class RouteData -{ - -} diff --git a/Packages/manifest.json b/Packages/manifest.json index 8d6ce7b2..e4764cf0 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -1,5 +1,6 @@ { "dependencies": { + "com.unity.cinemachine": "2.6.3", "com.coffee.softmask-for-ugui": "https://github.com/mob-sakai/SoftMaskForUGUI.git", "com.unity.2d.sprite": "1.0.0", "com.unity.collab-proxy": "1.2.16", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index 6fae1ed0..59d2fde9 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -1,5 +1,11 @@ { "dependencies": { + "com.unity.cinemachine": { + "version": "2.6.3", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.cn" "com.coffee.softmask-for-ugui": { "version": "https://github.com/mob-sakai/SoftMaskForUGUI.git", "depth": 0,