Поворот камеры

Программирование для iPhone & Android

Поворот камеры

Сообщение alexey.terno 24 май 2019, 16:15

Я хочу реализовать поворот камеры вокруг ее точки положения через тачскрин - вожу пальцем по экрану и камера поворачивается.
Из нескольких примеров собрал вот такой код:
Синтаксис:
Используется csharp
public class NewBehaviourScript : MonoBehaviour
{
    public Camera cam;
    private float rotx = 0.0f;
    private float roty = 0.0f;
    private Vector3 origRot;

    public float speedrot = 0.5f;
    public float dir = -1;
    private float smoothTime = 5f;

    void Start()
    {
        origRot = cam.transform.eulerAngles;
        rotx = origRot.x;
        roty = origRot.y;
    }

    void Update()
    {
        Touch inittouch = new Touch();

        if (Input.touchCount > 0)
        {
            Touch t = Input.GetTouch(0);

            if (t.phase == TouchPhase.Began)
            {
                inittouch = t;
            }

            if (t.phase == TouchPhase.Moved)
            {
                float deltax = Input.touches[0].deltaPosition.y;
                float deltay = -Input.touches[0].deltaPosition.x;

                Quaternion camrot = cam.transform.localRotation;
                camrot *= Quaternion.Euler(deltax, deltay, 0f);

                cam.transform.localRotation = Quaternion.Slerp(cam.transform.localRotation, camrot, smoothTime * Time.deltaTime);
            }

            if (t.phase == TouchPhase.Ended)
            {
                inittouch = new Touch();
            }
        }
    }
}
 


В принципе, код работает, но при повороте по горизонтали (вокруг оси Y) камера поворачивается еще и вокруг оси Z. Вот пример, как это происходит:
https://youtu.be/42r0E93cuXU
Как избавиться от поворота по оси Z, чтобы камера всегда была параллельна горизонту?
alexey.terno
UNIт
 
Сообщения: 117
Зарегистрирован: 19 май 2019, 19:07

Re: Поворот камеры

Сообщение waruiyume 24 май 2019, 16:35

Взять это
https://gist.github.com/M-Pixel/e8aa79890297b975994e
и вместо мыши использовать свайпы.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Поворот камеры

Сообщение 1max1 24 май 2019, 16:40

Синтаксис:
Используется csharp
    void Start()
    {
        origRot = cam.transform.localEulerAngles;
        rotx = origRot.x;
        roty = origRot.y;
    }
           
            if (t.phase == TouchPhase.Moved)
            {
                rotx += Input.touches[0].deltaPosition.y;
                rotx = Mathf.Clamp(rotx, -89f, 89f);
                roty -= Input.touches[0].deltaPosition.x;
                var e = new Vector3(rotx,roty,0f);
                cam.transform.localEulerAngles = Vector3.Lerp(cam.transform.localEulerAngles, e, smoothTime * Time.deltaTime);
            }
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Поворот камеры

Сообщение alexey.terno 24 май 2019, 20:05

У меня корректно работает последний пример с небольшими изменениями:
Синтаксис:
Используется csharp
if (t.phase == TouchPhase.Moved)
{
    rotx += Input.touches[0].deltaPosition.y * speedrot;
    //rotx = Mathf.Clamp(rotx, -89f, 89f);
    roty -= Input.touches[0].deltaPosition.x * speedrot;
    Vector3 e = new Vector3(rotx, roty, 0f);
    cam.transform.localEulerAngles = e;// Vector3.Lerp(cam.transform.localEulerAngles, e, smoothTime * Time.deltaTime);
}
 


Если я оставляю строчку
Синтаксис:
Используется csharp
Vector3.Lerp(cam.transform.localEulerAngles, e, smoothTime * Time.deltaTime)

то вращение в обратную сторону происходит с некоторой инерцией - поворачиваю вправо, потом начинаю поворачивать влево, а камера еще некоторое время продолжает вращаться вправо и только потом поворачивает влево.
Пока оставлю так. Спасибо за помощь!
alexey.terno
UNIт
 
Сообщения: 117
Зарегистрирован: 19 май 2019, 19:07

Re: Поворот камеры

Сообщение 1max1 24 май 2019, 20:09

Можно перевести в кватернионы и крутить ими, можно еще попробовать https://docs.unity3d.com/ScriptReferenc ... wards.html
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Поворот камеры

Сообщение bachudacar 03 июл 2019, 12:18

У меня вращение только в одну сторону работает... :-?
NextGen 3D
Аватара пользователя
bachudacar
UNец
 
Сообщения: 1
Зарегистрирован: 03 июл 2019, 12:11


Вернуться в iPhone & Android

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2