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);
    }
}


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

Буду рад любой помощи! Спасибо.
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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