Я пишу камеру в стиле шутера от первого лица и контроллер персонажей.Моя модель персонажа супер базовая - это прямоугольник для тела и куб для головы.У меня есть единственный сустав в голове, чтобы я мог вращать вокруг этого сустава.В Unity у меня камера привязана к голове, поэтому, куда бы она ни указывала, камера будет смотреть.
У меня есть один скрипт на C #, в котором я выполняю все свои переводы и поворотыдля персонажа и движения головы.Я предоставляю сценарий Transform
моего сустава через редактор Unity.
Моя проблема в том, что всякий раз, когда я поворачиваю голову вокруг, как вертикально, так и горизонтально, голова начинает делать бочку.Голова будет вверх ногами или в любой ориентации.Я могу понять, почему - если я посмотрю налево, а затем посмотрю вверх, то при последующем взгляде назад вправо голова будет вращаться в странной ориентации для настоящей головы - она начнет выполнять броски ствола.
Я пытался изменить код так, чтобы он «вращался» вокруг верхних и правых векторов тела моего персонажа, но это, похоже, ничего не меняет.Я все еще испытываю вращение бочки.
Я также пытался изменить относительное пространство от себя к миру, что «исправляет», пока мой персонаж стоит прямо в мире.Если мой персонаж начинает вращаться, то вращение головы начинает выглядеть странно.
Как я могу заставить свою голову вращаться только вокруг верхних и правых векторов моего персонажа?Не должно иметь значения, находится ли мой персонаж вверх ногами, на боку и т. Д. Вращение головы должно вращаться влево и вправо, вверх и вниз, как и следовало ожидать.
Вот мой код, который выполняет поворотыдо головы сустава.HeadJoint
- это совместное преобразование, которое перемещает голову.transform
- преобразование персонажа.В этом коде я пытаюсь повернуть голову вокруг векторов вверх и вправо персонажа, но, похоже, это все равно создает эффект броска бочки ...
private void ApplyHeadVerticalRotation()
{
var amountX = (-Input.GetAxis("Mouse Y")) * Time.deltaTime * RotationSpeed;
HeadJoint.Rotate(transform.right, amountX);
}
private void ApplyHeadHorizontalRotation()
{
var amountY = Input.GetAxis("Mouse X") * Time.deltaTime * RotationSpeed;
HeadJoint.Rotate(transform.up, amountY);
}
Редактировать:
Я имел в виду включить эту ссылку в код моего скрипта ...