Rotacja obiektu 3D za pomocą myszy

W przykładzie będziemy obracać obiektem w dwóch osiach.
Rotacja Euler w trzech osiach wiąże się z ryzykiem tzw. gimball lock, co powoduje problemy w prawidłowym obrocie.
W związku z powyższym najlepiej jest odpowiednio zagnieżdzać obiekt, aby obracać osobno każdą z osi na innym obiekcie. W przykładzie poniżej obracamy oś x na rodzicu, a oś y na obiekcie do którego dołączony jest skrypt.

    private void Update()
    {
        if (Input.GetMouseButton(0))
        {
            float speed = 1000f;
            gameObject.transform.parent.rotation *= Quaternion.Euler(Input.GetAxis("Mouse Y") * speed * Time.deltaTime, 0f, 0f);
            transform.rotation *= Quaternion.Euler(0f, Input.GetAxis("Mouse X") * speed * Time.deltaTime, 0f);
        }
    }

Z użyciem OnMouseDrag()

    private void OnMouseDrag()
    {
        float speed = 1000f;
        gameObject.transform.parent.rotation *= Quaternion.Euler(Input.GetAxis("Mouse Y") * speed * Time.deltaTime, 0f, 0f);
        transform.rotation *= Quaternion.Euler(0f, Input.GetAxis("Mouse X") * speed * Time.deltaTime, 0f);
    }
Ask ChatGPT
Set ChatGPT API key
Find your Secret API key in your ChatGPT User settings and paste it here to connect ChatGPT with your Tutor LMS website.
Scroll to Top