Я хочу, чтобы игрок смотрел в том направлении, куда смотрит камера.
Камера следует за игроком (стиль игры от третьего лица).
Я пробовал это с
transform.localRotation = new Quaternion(transform.localRotation.x,
cameraMain.transform.localRotation.y,
transform.localRotation.z,
transform.localRotation.w);
но это не работает.
Иногда игрок начинает вращаться в другом направлении.
x / y / z равно 1/1/1.
Что происходит, когда вы используете transform.rotation = cameraMain.transform.rotation
?
затем игрок получает возможность поворота камеры по осям x и z и начинает вращаться вокруг земли и сквозь нее.
Определите направление, в котором смотрит камера, с помощью 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 Несколько мгновений назад я понял, что совершил ошибку, и отредактировал ее. Это должно сработать.
следующий код заставит объект (указанный в параметре) смотреть в том направлении, куда смотрит основная камера:
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 в угле Эйлера (что вы привыкли видеть), кватернионы очень сбивают с толку, поэтому вам почти никогда не следует устанавливать в них отдельные значения. Если вы хотите их редактировать, используйте только встроенные методы.
обратите внимание, что я не пробовал этот код, поэтому, если он не работает, сообщите мне, чтобы я мог обновить сообщение!
это должен быть transform.eulerAngles
Какой у плеера
transform.localScale
?