2017-02-09 3 views
1

버튼을 누르고있는 동안 객체를 회전시키는 스크립트가 있습니다. 회전 평면은 드롭 다운 메뉴에서 선택한 축에 따라 다릅니다. 이 스크립트는 대부분 Y 축과 Z 축에서 작동하지만 X 축에서 예상치 못한 동작을합니다.유니티 X 축 회전 버크

왼쪽 회전 버튼을 길게 누르면 볼륨이 -90까지 회전하여 '고정'상태가됩니다. 나는 그 다음 오른쪽 회전 버튼을 누르고 다시 갇히기 전에 90을 넘지 않습니다. 더 거친 것은 심지어 특정 방향을 고수하고 대체 방향으로 전환 한 후 볼륨이 다른 방향으로 돌아가는 대신 처음부터 붙어 있지 않은 방향으로 계속 진행하는 것입니다. 이렇게하면 왼쪽 및 오른쪽 회전 단추가 서로 바뀝니다.

다음은 모든 주요 작업 코드입니다.

public void Update() 
{ 
    axis = axisDropdown.value; 
    Vector3 originalRot = transform.eulerAngles; 

    if (buttonHeld) 
    { 
     if (rotateRight) 
     { 
      if (axis == 0) 
      { 
       originalRot.x += 1; 
       transform.rotation = Quaternion.Euler(originalRot); 
      } 
      else if (axis == 1) 
      { 
       originalRot.y += 1; 
       transform.rotation = Quaternion.Euler(originalRot); 
      } 
      else if (axis == 2) 
      { 
       originalRot.z += 1; 
       transform.rotation = Quaternion.Euler(originalRot); 
      } 
      else 
      { 
       print("Error: Selected axis option is invalid"); 
      } 
     } 
     else 
     { 
      if (axis == 0) 
      { 
       originalRot.x -= 1; 
       transform.rotation = Quaternion.Euler(originalRot); 
      } 
      else if (axis == 1) 
      { 
       originalRot.y -= 1; 
       transform.rotation = Quaternion.Euler(originalRot); 
      } 
      else if (axis == 2) 
      { 
       originalRot.z -= 1; 
       transform.rotation = Quaternion.Euler(originalRot); 
      } 
      else 
      { 
       print("Error: Selected axis option is invalid"); 
      } 
     } 
    } 
} 

나는 다른 유사한 문제를 읽었지 만 모두 약간 다른 것처럼 보이므로 어떤 도움을 주시면 감사하겠습니다.

+0

그것이 짐벌 잠금 효과 – Bijan

+0

네입니다 날 것으로 보인다을 바로 짐벌 잠금 효과를 보았다. 그게 내 문제와 똑같은 것 같아. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까? – jarthur

답변

2

이것은 실제로 짐발 잠금 효과로 인해 발생합니다. 그것은 쿼터니언을 돌리기보다는 내 물체의 오일러 각을 변경하려고했기 때문에 발생했습니다. 여기

이 문제를 피하기 위해 노력 코드 :

public void Update() 
{ 
    axis = axisDropdown.value; 
    Vector3 originalRot = transform.eulerAngles; 

    if (buttonHeld) 
    { 
     if (rotateRight) 
     { 
      if (axis == 0) 
      { 
       transform.RotateAround(volume.transform.position, Vector3.right, 50 * Time.deltaTime); 
      } 
      else if (axis == 1) 
      { 
       transform.RotateAround(volume.transform.position, Vector3.up, 50 * Time.deltaTime); 
      } 
      else if (axis == 2) 
      { 
       transform.RotateAround(volume.transform.position, Vector3.forward, 50 * Time.deltaTime); 
      } 
      else 
      { 
       print("Error: Selected axis option is invalid"); 
      } 
     } 
     else 
     { 
      if (axis == 0) 
      { 
       transform.RotateAround(volume.transform.position, Vector3.left, 50 * Time.deltaTime); 
      } 
      else if (axis == 1) 
      { 
       transform.RotateAround(volume.transform.position, Vector3.down, 50 * Time.deltaTime); 
      } 
      else if (axis == 2) 
      { 
       transform.RotateAround(volume.transform.position, Vector3.back, 50 * Time.deltaTime); 
      } 
      else 
      { 
       print("Error: Selected axis option is invalid"); 
      } 
     } 
    } 
} 
+0

당신이 해결책을 찾은 것을보고, 대답을 수락하는 것을 잊지 마십시오 – Bijan

+0

그래, 그냥 9 시간 더 기다려야 해. – jarthur