2017-02-16 2 views
3

개체를 끌 수있게하려고합니다. 이 객체는 너무 많이 회전 할 수 있습니다. (문에 Similair).unity 최소 및 최대 거리 사이에서 회전

다음은 작동하는 객체를 회전시키는 편집 된 코드입니다. 난 maxrotation 및 minrotation에 대한 2 개의 벡터가 있습니다.

이 코드는 사용자가 상호 작용 가능 개체를 끌 때마다 호출됩니다. (갱신 좋아하지만 드래그하는 경우에만)

 if (GestureManager.Instance.IsNavigating && 
    HandsManager.Instance.FocusedGameObject == gameObject) 
     { 
      //speed and navigiation of rotation 
      float rotationFactor; 
      rotationFactor = ManipulationManager.Instance.ManipulationPosition.y * RotationSensitivity; 
      totransform.Rotate(new Vector3(rotationFactor, 0, 0)); 
     } 

여기 if 문 내가를 사용할 수 있다면 그것은 좋은 것입니다. 그리고 나는 꽤 많은 것들을 시도했지만 여전히 효과가 없습니다.

코드 붙여 넣기는 다음과 같이 작동합니다. 객체는 드래그 가능해야하지만 특정 지점까지만 드래그 가능해야합니다.

totransform는 그가

모든 아이디어는 위대하고 가장 극명하게 될 것이다 회전됩니다 변환입니다.

친절하게 제공합니다.

+0

흠, 무엇을 시도 했습니까? 당신은 totransform.Rotate 전에'Debug.Log (rotationFactor);'를 수행하고 원하는 최대 및 최소 위치에 값을 복사 한 다음'if (withinThatRange) {Rotate}'를 수행 할 수 있습니다. 일해야한다! 또는 먼저 회전을 확인하십시오. – Maakep

+0

btw "totransform"은 오타가 아닙니다. 맞습니까? – Maakep

+0

아, 미안해. 내가 정정하지 않았어. 내가 바꿀거야. totransform은 변형 될 객체의 변형입니다. –

답변

2

eulerAngles을보고 싶다고 생각합니다. 받고있는 값을 확인한 후 회전하기 전에 if 문을 설정하십시오. 다음은 원하는 값을 찾을 수있는 샘플 코드입니다.

if (GestureManager.Instance.IsNavigating && 
    HandsManager.Instance.FocusedGameObject == gameObject) 
{ 
    //speed and navigiation of rotation 
    float rotationFactor = ManipulationManager.Instance.ManipulationPosition.y * RotationSensitivity; 

    Debug.Log(totransform.eulerAngles); 
    if (totransform.eulerAngles.x < 100) { 
     totransform.Rotate(new Vector3(rotationFactor, 0, 0)); 
    } 
} 
+0

그래서 x = -90의 최소 회전과 최대 0이라고 가정 해 보겠습니다. 디버깅 할 때 나는 3과 같은 숫자로 변환 된 eulerangle의 X 값을 확인합니다. 원래의 x 회전은 -80입니다. 하지만 응용 프로그램을 실행 한 후에 만 ​​eulerangle을 호출 할 때 3으로 바뀝니다. –

+0

아, 맞습니다 ... 검사관의 -1은 359도입니다. 양수의 경우 더 이해가됩니다. http://imgur.com/a/l1qfC hehe. – Maakep

+0

글쎄, 오일러는 정확한 각도를 얻지 만, 경위와 같은 숫자는 아닙니다. 예를 들어, 시계 반대 방향으로 -90도 시계 방향으로 270도입니다. 이는 달걀 껍질에서 얻은 것입니다. transform.localEulerAngles를 사용하십시오. – Maakep

0

그래서 나에게 도움이되는 해결책은 다음과 같습니다. 먼저 이동 변수를 선언합니다 (이 아래에서는 보이지 않지만이 경우에는 2입니다). 그런 다음 커버 된 거리를 추적하고 한계를 두었습니다.

물론이 코드에는 2 대신에 움직임을 사용하는 것과 같은 몇 가지 개선 사항이 있습니다.하지만 시간 제약 때문에 나는하지 않았습니다.

if (GestureManager.Instance.IsNavigating && 
    HandsManager.Instance.FocusedGameObject == gameObject) 
     { 

       //here we get the movement direction and set it in movement. 
       if (GestureManager.Instance.NavigationPosition.y > 0) 
       { 
        movement = 2; 
       } 
       else if (GestureManager.Instance.NavigationPosition.y < 0) 
       { 
        movement = -2; 
       } 


      //the first part is false if we reach higher then maxdistance and the movement is going up 
      //the second part is false if we reach the lower distance and the movement is going down. 
      if ((!(distance > maxdistance.x) || movement < 0) && ((!(distance < mindistance.x) || movement > 0))) 
       { 
        //here we add the movement to the distance so we know if it gets closer or further 
        distance += movement; 
        //here we rotate 
        totransform.Rotate(new Vector3(movement, 0, 0)); 
       } 
     }