@Zimaell

Как сделать плавный поворот к точке?

Делаю движение по чекпоинтам

spoiler
public class Unit : MonoBehaviour{
    public Vector3 CheckPoint;
    public int NumCheckPoint = 0;
    public Dictionary<int, Vector3> CheckPointsMove = new Dictionary<int, Vector3>();
    private float speed = 2f;
    private GameObject head;

  void Start(){
    head = gameObject.transform.Find("Head").gameObject;
    CheckPointsMove[0] = new Vector3(2, 1, 2);
    CheckPointsMove[1] = new Vector3(10, 1, 2);
    CheckPointsMove[2] = new Vector3(10, 1, 13);
    }

    void Update(){
        MoveEnemy();
        }

  void MoveEnemy(){
    head.transform.LookAt(new Vector3(CheckPoint.x, 0, CheckPoint.z));

    if(CheckPoint==transform.position){
      ++NumCheckPoint;
      foreach(KeyValuePair<int, Vector3> v in CheckPointsMove){
        if(v.Key == NumCheckPoint){
          CheckPoint = v.Value;
          }
        }
      }
    transform.position = Vector3.MoveTowards(transform.position, CheckPoint, speed*Time.deltaTime);
    }

для теста в старте задаются точки по которым он должен передвигаться, а так же его башня с дулом которая должна крутиться при повороте (смены точки).
Во первых при подъезде к точке он чего-то дуло плавно опускает вниз (то есть смотрит дулом на точку на полу), хотя координаты по Y стоят 0, во вторых при повороте он резко поворачивает в сторону точки.
Подскажите сделать плавный поворот башни к точке, да и почему он опускает дуло (смотрит на точку по Y)?
  • Вопрос задан
  • 400 просмотров
Решения вопроса 1
Почему смотрит в пол:
head.transform.LookAt(new Vector3(CheckPoint.x, 0, CheckPoint.z)

0 означает, что он будет смотреть на точку на уровне пола, это не угол поворота, а глобальная координата точки, на которую надо смотреть. Сделай так:
head.transform.LookAt(new Vector3(CheckPoint.x, head.transform.Position.y, CheckPoint.z)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы