2017-02-16 10 views
3

私はオブジェクトをドラッグできるようにしようとしています。このオブジェクトはあまり回転できません。 (Similairをドアに)。unity最小距離と最大距離の間で回転する

ここには、動作するオブジェクトを回転させる編集されたコードがあります。 私は、最大回転と最小回転のための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をデバッグすると、私はeulerangleのXの値をチェックします。これは3のような数値に変換されます。元のxの回転は-80です。アプリケーションを実行した後でしか、オイラーアングルを呼び出すと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)); 
       } 
     } 
関連する問題