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.
if (Input.GetMouseButton(0))
{
float speed = 2000f;
transform.localRotation *= Quaternion.Euler(0f,0f, Input.GetAxis("Mouse X") * -speed * Time.deltaTime);
transform.parent.transform.rotation *= Quaternion.Euler(Input.GetAxis("Mouse Y") * speed * Time.deltaTime, 0f, 0f);
}
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);
}