private void Awake() { count = 0; orientationSequence = new List <float>(); playerTransform = GameObject.Find("Player").GetComponent <Transform>(); timer = 0; timerOrientation = 0; timerVelocity = 0; carryBit = 0; timerDataRecord = 0; presentPosition = lastPosition = GeneralVector3.Vector3NoHeight(playerTransform.position); presentDirection = lastDirection = playerTransform.rotation.eulerAngles.y; Corner1 = GameObject.Find("Corner1").GetComponent <Transform>(); Corner2 = GameObject.Find("Corner2").GetComponent <Transform>(); Corner3 = GameObject.Find("Corner3").GetComponent <Transform>(); Corner4 = GameObject.Find("Corner4").GetComponent <Transform>(); Center = GameObject.Find("Center").GetComponent <Transform>(); wayPoint = gameObject.GetComponent <WayPoint>(); action = Redirector.Action.Zero; }
// Update is called once per frame void Update() { TimerIncrease(); CalculateDeltaPar(); MovePlayer(player); //Apply Redirection switch (action) { case Redirector.Action.Zero: break; case Redirector.Action.PositiveRotation: redirector.ApplyRedirection(Redirector.RedirectorType.Rotation, player.transform, deltaDistance, deltaDiv, gain: redirector.rotateGainEnlarge); break; case Redirector.Action.NegativeRotation: redirector.ApplyRedirection(Redirector.RedirectorType.Rotation, player.transform, deltaDistance, deltaDiv, gain: redirector.rotateGainDecrease); break; case Redirector.Action.ClockwiseCurvature: redirector.ApplyRedirection(Redirector.RedirectorType.Curvature, player.transform, deltaDistance, deltaDiv, clockwise: true, radius: redirector.curvatureRadius); break; case Redirector.Action.CounterClockwiseCurvature: redirector.ApplyRedirection(Redirector.RedirectorType.Curvature, player.transform, deltaDistance, deltaDiv, clockwise: false, radius: redirector.curvatureRadius); break; default: break; } //velocity data record if ((timer - timerVelocity * velocityInterval) >= velocityInterval) { velocity = distance / velocityInterval; timerVelocity++; distance = 0; } //exponentially smoothed orientation if ((timerOrientation - timerOrientation * orientationInterval) >= orientationInterval) { //ExponentiallySmoothedSample(true); } else { //ExponentiallySmoothedSample(false); } //data record if ((timer - timeHorizon * timerDataRecord) >= timeHorizon) { data.velocity = velocity; data.virtualOrientation = player.transform.eulerAngles.y;//没有使用指数平滑 data.virtualPosition = GeneralVector3.Vector3NoHeight(playerTransform.position); Vector3 originPoint = GeneralVector3.Vector3NoHeight(Corner4.position); Vector3 xAxis = GeneralVector3.Vector3NoHeight(Corner3.position); Vector3 zAxis = GeneralVector3.Vector3NoHeight(Corner1.position); data.realPosition = GeneralVector3.GetRealPoint(originPoint, xAxis, zAxis, data.virtualPosition); data.realOrientation = player.transform.eulerAngles.y - Center.rotation.eulerAngles.y; timerDataRecord++; WayPointsReal[] wayPointsReals = CalWayPoint2DCoor(wayPoint.wayPoints, playerTransform, wayPoint.wayPoints.Length, data.realOrientation, data.velocity * redirector.planningDepth * timeHorizon * 2, originPoint, xAxis, zAxis); Debug.Log(data.realPosition); Debug.Log(wayPointsReals[0].realPosition); action = redirector.Plan(data, wayPointsReals, redirector.planningDepth).action; Debug.Log(action); } }