Я провел весь день, пытаясь выяснить проблему, с которой я столкнулся в школьном проекте, поэтому я прибегаю к последнему средству: stackoverflow!
Моя проблема: Я пытаюсь повернуть символ относительно камеры, вокруг которой можно вращать символ.
ввод: контроллер xbox
соответствующая информация:
- Камера вращается вокруг персонажа по горизонтали с помощью правого джойстика
- Движение персонажа происходит с помощью левого джойстика
- Персонаж уже перемещается относительноКамера работает как положено. Я пытаюсь повернуть символ , что происходит отдельным способом.
- Когда левый джойстик перемещается вниз, персонаж всегда должен быть направлен (и двигаться в направлении) к камере.
- Когда левый джойстик потянется вверх, персонаж всегда должен быть обращен к камере (и удаляться от нее).
Я оставляю много кода внеПросто чтобы это было читабельно для вас, ребятаЕсли вам что-то нужно, просто спросите, и я предоставлю.
Что у меня есть: https://imgur.com/TERUXV6
Почему это не так: Идеальное вращение персонажа.Тем не менее, я обманываю здесь.Камера вращается в соответствии с мировыми координатами.Как только я поворачиваю камеру, это становится очевидным.
Следующий скрипт прикрепляется к игровому объекту персонажа.
public class CharacterBehaviour : MonoBehaviour
{
public GameObject HumanoidModel;
[SerializeField]private Transform _mainCameraTransform;
private void Update()
{
ApplyMovement();
RotateCharacter();
}
private void ApplyMovement()
{
//get input movement vector
Vector3 inputMovement = new Vector3(_inputMoveCharacterXAxis, 0, _inputMoveCharacterZAxis);
//make sure camera forward is player movement forward
Vector3 mainCameraForwardXz = Vector3.Scale(_mainCameraTransform.forward, new Vector3(1, 0, 1)); //multiplied by (1, 0, 1) to remove Y component
Vector3 mainCameraRightXz = Vector3.Scale(_mainCameraTransform.right, new Vector3(1, 0, 1)); //multiplied by (1, 0, 1) to remove Y component
Vector3 movementInCameraForwardDirection = mainCameraForwardXz * inputMovement.z;
Vector3 movementInCameraRightDirection = mainCameraRightXz * inputMovement.x;
Vector3 movementForward = movementInCameraForwardDirection + movementInCameraRightDirection;
_velocity = movementForward * MaximumSpeed;
}
private void RotateCharacter()
{
Vector3 inputDirection = new Vector3(_inputMoveCharacterXAxis, 0, _inputMoveCharacterZAxis);
HumanoidModel.transform.LookAt(HumanoidModel.transform.position +
HumanoidModel.transform.forward + inputDirection);
}
Следующий скрипт прикрепляется к основному игровому объекту GameObject
public class CameraBehaviour : MonoBehaviour
{
[SerializeField] private Transform _characterTransform;
[SerializeField] private Transform _mainCameraTransform;
private void Update ()
{
RotateCamera();
}
// Rotate camera horizontally
private void RotateCamera()
{
_mainCameraTransform.RotateAround(_characterTransform.position, Vector3.up, _inputRotateCameraHorizontal);
}
}
Источник проблемы - функция RotateCharacter ().Я знаю, что мне нужно провести некоторые вычисления, чтобы сделать вращение персонажа относительно вращения камеры, я просто не могу понять, что это за вычисление и почему.
Заранее спасибо!
Триндил