示例#1
0
 private void Chase(GameObject target)
 {
     if (motor.RotateTowards(target.transform.position, data.turnSpeed))
     {
         // Do Nothing
     }
     else if (!CanMove(data.moveSpeed))
     {
         avoidenceStage = AvoidenceStage.ObstacleDetected;
     }
     else
     {
         if (Vector3.SqrMagnitude(transform.position - target.transform.position) >= (closeEnough * closeEnough))
         {
             motor.Move(data.moveSpeed);
         }
     }
 }
示例#2
0
    public void Avoid()
    {
        if (avoidenceStage == AvoidenceStage.ObstacleDetected)
        {
            // Rotate left
            motor.Rotate(-1 * data.turnSpeed);

            // If I can now move forward, move to stage 2!
            if (CanMove(data.moveSpeed))
            {
                avoidenceStage = AvoidenceStage.AvoidingObstacle;

                // Set the number of seconds we will stay in Stage 2
                exitTime = avoidenceTime;
            }
        }
        else if (avoidenceStage == AvoidenceStage.AvoidingObstacle)
        {
            // If we can move forward, do so
            if (CanMove(data.moveSpeed))
            {
                // Subtract from our timer and move
                exitTime -= Time.deltaTime;
                motor.Move(data.moveSpeed);

                // If we have moved long enough, return to chase mode
                if (exitTime <= 0)
                {
                    avoidenceStage = AvoidenceStage.NotAvoiding;
                }
            }
            else
            {
                avoidenceStage = AvoidenceStage.ObstacleDetected;
            }
        }
    }