protected override void MoveTowardsTarget()
    {
        float sqrDist = GetTargetSquareDistance();

        if (sqrDist <= HoldRange * HoldRange)
        {
            _engaging = false;
        }
        if (sqrDist >= ReengageRange * ReengageRange)
        {
            _engaging = true;
        }
        if (_engaging)
        {
            base.MoveTowardsTarget();
        }
        else
        {
            Vector3 local = GetTargetLocalPosition();
            float   angle = Mathf.DeltaAngle(transform.eulerAngles.y, Mathf.Atan2(local.x, local.z) * Mathf.Rad2Deg - 180);
            float   speed = 1f;

            Controllable.Accelerate(speed);
            SmoothTurnTowardsAngle(angle);
        }
    }
예제 #2
0
 protected virtual void MoveAlongWaypoints()
 {
     if (_currentWaypoint)
     {
         Controllable.Accelerate(1f);
         float angle = Vector3.SignedAngle(transform.forward, _currentWaypoint.OutgoingVector, Vector3.up);
         SmoothTurnTowardsAngle(angle);
     }
 }
예제 #3
0
    protected virtual void MoveTowardsTarget()
    {
        Vector3 local = GetTargetLocalPosition();
        float   angle = Mathf.DeltaAngle(transform.eulerAngles.y, Mathf.Atan2(local.x, local.z) * Mathf.Rad2Deg);
        float   speed = 1f;

        if (local.sqrMagnitude < HoldRange * HoldRange)
        {
            speed = 0f;
        }

        Controllable.Accelerate(speed);
        SmoothTurnTowardsAngle(angle);
    }
예제 #4
0
 protected override void MoveAlongWaypoints()
 {
     Controllable.Accelerate(0);
     Controllable.Turn(0);
 }