Вращение игрока и вращение камеры - PullRequest
0 голосов
/ 26 октября 2018

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

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

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

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, заключается в том, что это кватернион.Компонент y в кватернионе не совпадает с осью y в углу Эйлера (то, что вы привыкли видеть), кватернионы очень запутанные, поэтому вам почти никогда не следует устанавливать в них отдельные значения.Если вы хотите редактировать их, используйте только встроенные методы.

0 голосов
/ 26 октября 2018

Получите направление, в котором камера смотрит с 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...