コード例 #1
0
ファイル: DataRecord.cs プロジェクト: archerhw/MPCRed
 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;
 }
コード例 #2
0
ファイル: DataRecord.cs プロジェクト: archerhw/MPCRed
    // 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);
        }
    }