Проблема с поворотом камеры от первого лица

Общие вопросы о Unity3D

Проблема с поворотом камеры от первого лица

Сообщение Woolf 11 окт 2018, 07:16

Камраден, хелп!

Хочу сделать что-то вроде стандартного MouseLook, но только чтобы он поворачивал от текущего положения камеры (а не формировал своё положения из установленных переменных, как в дефолтном MouseLook)

Делаю так

Синтаксис:
Используется csharp
    void Update() {

        // Read the mouse input axis
        if (!isFreeze) {
            float rotX = Input.GetAxis("Mouse X") * 0.9f * sensitivityX;
            float rotY = -Input.GetAxis("Mouse Y") * 0.9f * sensitivityY;
            curRotX = curRotX + rotX;
            curRotY = curRotY + rotY;
         
            transform.Rotate(curRotY, curRotX, 0);
        }

        curRotX = Mathf.Lerp(curRotX, 0, Time.deltaTime * 20f);
        curRotY = Mathf.Lerp(curRotY, 0, Time.deltaTime * 20f);

    }


Пока кручусь только по горизонтали, или только по вертикали, всё отлично, но как только начинаю крутиться совместно и по горизонтали и по вертикали, горизонт заваливается b-(

Изображение

Как поправить эту беду?
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Проблема с поворотом камеры от первого лица

Сообщение 1max1 11 окт 2018, 07:51

Пока кручусь только по горизонтали, или только по вертикали, всё отлично, но как только начинаю крутиться совместно и по горизонтали и по вертикали, горизонт заваливается b-(

Синтаксис:
Используется csharp
class test : MonoBehaviour
{
    float speed = 100.0f;

    void Update()
    {
        float x = Input.GetAxis("Mouse X") * speed * Time.deltaTime;
        float y = Input.GetAxis("Mouse Y") * speed * Time.deltaTime;

        transform.Rotate(Vector3.right, -y);
        transform.Rotate(transform.InverseTransformDirection(Vector3.up), x);
    }
}
 
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Проблема с поворотом камеры от первого лица

Сообщение waruiyume 11 окт 2018, 08:40

от текущего положения камеры

Синтаксис:
Используется csharp
void OnEnable()
    {
        rotationY = -Vector3.SignedAngle(transform.up, Vector3.up, transform.right);
        Vector3 fwrd = transform.forward;
        fwrd.y = 0;
        rotationX = Vector3.SignedAngle(fwrd, Vector3.forward, Vector3.down);
    }
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Проблема с поворотом камеры от первого лица

Сообщение Woolf 12 окт 2018, 03:28

Оба метода отлично работают, спасибо.
А как, например, сделать ограничение по наклону по Y?

Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Проблема с поворотом камеры от первого лица

Сообщение 1max1 12 окт 2018, 08:47

А как, например, сделать ограничение по наклону по Y?

Поищи что-то по теме "clamp angle unity", вот к примеру:
https://forum.unity.com/threads/euler-a ... lp.137868/
или
https://answers.unity.com/questions/659 ... ation.html.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 13


cron