password22
@password22

Как настроить rotation камеры по оси Y с персонажем, а по оси X без?

Добрый день! Не могу никак понять как сделать просмотр камерой вверх без вращения персонажа, если камера по оси у вращается вместе с персонажем. Сам в unity не так давно, сложно пока разбираться и понимать какие-то вещи, где присутствует какая-то математика.

Это скрипт самого персонажа, я использую два джойстика - один для бега, второй для вращения камеры
public class Player : MonoBehaviour
{
    public SimpleTouchController leftController;
    private float movementSpeed = 7.0f;
    private float gravity = 20.0f;

    CharacterController character;
    Transform cameraTransform;
    Vector3 move = Vector3.zero;


    private void Start()
    {
        character = GetComponent<CharacterController>();
        cameraTransform = Camera.main.transform;
    }


    void Update()
    {
        float horizontal = leftController.GetTouchPosition.x;
        float vertical = leftController.GetTouchPosition.y;

        if(character.isGrounded)
        {
            move = new Vector3(horizontal, 0.0f, vertical);
            move = cameraTransform.TransformDirection(move);
        }

        move.y -= gravity * Time.deltaTime;
        character.Move(move * movementSpeed * Time.deltaTime);
    }

}


Это скрипт камеры
public class Camera : MonoBehaviour
{
    public GameObject target; // персонаж
    public SimpleTouchController rightController;

    private float rotateSpeed = 5;
    private Vector3 offset;


    void Start()
    {
        offset = target.transform.position - transform.position;
    }

    void LateUpdate()
    {
        float horizontal = rightController.GetTouchPosition.x;
        float vertical = rightController.GetTouchPosition.y;

        target.transform.Rotate(0, horizontal, 0);

        float desiredAngle = target.transform.eulerAngles.y;    //берем вращение игрока в мировом пространстве
        Quaternion rotation = Quaternion.Euler(0, desiredAngle, 0); //поворачиваем на y градусов вокруг оси y
        transform.position = target.transform.position - (rotation * offset);  

        transform.LookAt(target.transform);
    }
}


Перечитал и пересмотрел весь интернет, но все никак не могу разобраться в кватернионах, углах и так далее..

Буду рад любой помощи! Спасибо.
  • Вопрос задан
  • 23 просмотра
Пригласить эксперта
Ответы на вопрос 1
DanceM
@DanceM Куратор тега Unity
Кто хочет -ищет способ, кто не хочет -ищет причину
Сделайте два объекта, они будут центром вращения, один по одной оси, другой - по другой. Прикрепите к ним камеру.

Иерархия, например:

персонаж (вращается по оси Y)
-- точка_вращения_по_X
---- камера

После скриптом крутите то один, то другой, простыми углами, без кватернионов и математики.

Перечитал и пересмотрел весь интернет
Ну конечно, вот прям "весь" и вот миллиард человек в инетрнете не нашли решения за все годы существования Unity?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы