Вращение игрока и вращение камеры

Я хочу, чтобы игрок смотрел в том направлении, куда смотрит камера.

Камера следует за игроком (стиль игры от третьего лица).

Я пробовал это с

transform.localRotation = new Quaternion(transform.localRotation.x,
  cameraMain.transform.localRotation.y, 
  transform.localRotation.z, 
  transform.localRotation.w);

но это не работает.

Иногда игрок начинает вращаться в другом направлении.

Какой у плеера transform.localScale?

Ruzihm 26.10.2018 20:24

x / y / z равно 1/1/1.

AlpakaJoe 26.10.2018 20:26

Что происходит, когда вы используете transform.rotation = cameraMain.transform.rotation?

Ruzihm 26.10.2018 20:28

затем игрок получает возможность поворота камеры по осям x и z и начинает вращаться вокруг земли и сквозь нее.

AlpakaJoe 26.10.2018 20:30
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
420
2

Ответы 2

Определите направление, в котором смотрит камера, с помощью cameraMain.transform.forward, сделайте копию со значением y, равным нулю, затем используйте Quaternion.SetLookRotation, чтобы смотреть в этом направлении с глобальным направлением вверх .:

Vector3 cameraDirection = cameraMain.transform.forward;
Vector3 characterLookDirection = new Vector3(cameraDirection.x,
                                             0f,
                                             cameraDirection.z);
Quaternion newRotation = new Quaternion();
newRotation.SetLookRotation(characterLookDirection, Vector3.up); 
transform.rotation = newRotation;

@AlpakaJoe Несколько мгновений назад я понял, что совершил ошибку, и отредактировал ее. Это должно сработать.

Ruzihm 26.10.2018 20:51

следующий код заставит объект (указанный в параметре) смотреть в том направлении, куда смотрит основная камера:

public void lookInDirectionOfCamera(Transform object) {
   RayCastHit hit;
   if (Physics.raycast(cameraMain.transform.position, cameraMain.transform.forward, out hit)) {
      object.forward = hit.point - object.position;
   }else { //if the raycast didnt hit anything, make the object face 100 units in front of the camera
      Vector3 point = Camera.main.transform.position + Camera.main.transform.forward * 100;
      object.forward = point - object.position;
   }
}

Это заставит игрока повернуться лицом к точке, которая направлена ​​к камере. Если вы просто хотите, чтобы у них было одинаковое вращение по оси Y, не используйте кватернионы! Вместо этого вы можете просто сделать это с помощью углов Эйлера:

transform.eulerAngles = new Vector3(transform.eulerAngles.x,
cameraMain.transform.eulerAngles.y,
transform.eulerAngles.y);

Причина не использовать transform.localRotation в том, что это Quaternion. Компонент y в кватернионе не совпадает с осью y в угле Эйлера (что вы привыкли видеть), кватернионы очень сбивают с толку, поэтому вам почти никогда не следует устанавливать в них отдельные значения. Если вы хотите их редактировать, используйте только встроенные методы.

обратите внимание, что я не пробовал этот код, поэтому, если он не работает, сообщите мне, чтобы я мог обновить сообщение!

Edvin Forsum 26.10.2018 20:49

это должен быть transform.eulerAngles

derHugo 27.10.2018 09:02

Другие вопросы по теме