2014-10-02 3 views
1

Сделайте эту камеру идеальной для моего целевого объекта с одним оговоркой. Кажется, не может заставить персонажа смотреть вверх и вниз. Левое и правое движение отлично, вверх и вниз не двигаются вообще. Что я делаю неправильно с частью "Mouse Y"?Unity 3d Следуйте за камерой

public GameObject target; 
    public float rotateSpeed = 7; 
    Vector3 offset; 

    void Start() { 
     offset = target.transform.position - transform.position; 
    } 

    void LateUpdate() { 
     float horizontal = Input.GetAxis("Mouse X") * rotateSpeed * Time.deltaTime; 
     float verticle = Input.GetAxis("Mouse Y") * rotateSpeed * Time.deltaTime; 
     target.transform.Rotate(0, horizontal, 0); 

     float desiredAngle = target.transform.eulerAngles.y; 

     Quaternion rotation = Quaternion.Euler(0, desiredAngle, verticle); 
     transform.position = target.transform.position - (rotation * offset); 

     transform.LookAt(target.transform); 
    } 

ответ

1

Вы не используете verticle в вашем Transform.Rotate вызова (по вертикали?). Редактировать: Извините, я просто прекратил смотреть, как только попал в первую проблему, глядя дальше, есть еще одна проблема, похожая на ту, которую я обратился в this question. «Порядок операций» является неправильным (см новых комментариев):

public GameObject target; 
public float rotateSpeed = 7; 
Vector3 offset; 

void Start() { 
    offset = target.transform.position - transform.position; 
} 

void LateUpdate() { 
    float horizontal = Input.GetAxis("Mouse X") * rotateSpeed * Time.deltaTime; 
    float verticle = Input.GetAxis("Mouse Y") * rotateSpeed * Time.deltaTime; 
    //You didn't use verticle before. Depending on your model/setup you might verticle as the 3rd (Z) parameter to get rotation in the right direction 
    target.transform.Rotate(verticle, horizontal, 0); //This line rotates the transform 

    float desiredAngle = target.transform.eulerAngles.y; 

    Quaternion rotation = Quaternion.Euler(0, desiredAngle, verticle); 
    transform.position = target.transform.position - (rotation * offset); 

    transform.LookAt(target.transform); //This sets the absolute rotation of the transform. This call will "override" the above call to Rotate 
} 

Чтобы дать более подробную информацию вы должны дать объяснение того, что ваша конечная цель это с этим кодом, потому что приглядевшись я «видя« странности »с тем, что пытается сделать образец кода.

+0

Пробовал это раньше. Кажется, хочет двигаться, но нет. Экран становится шатким, как будто он пытается двигаться вверх или вниз, но затем переориентируется на игрока. – Volearix

+0

И на самом деле этот конкретный код просто заставляет моего игрока вращаться по оси x, а камера не следует ...: \ – Volearix

+0

Я добавил несколько комментариев, чтобы объяснить, почему он не двигается, но вам нужно добавить некоторую информацию на вопрос. –

0

Последняя строка кода (transform.Lookat) переопределяет предыдущий код ... в основном говорит: «Всегда смотрите на цель, независимо от того, что еще происходит».

Смежные вопросы