2016-03-31 10 views
0

私はGoogle Cardboardで遊んでいます。私は操縦席に座っていて、問題なく周りを見ることができます。ゲームオブジェクトを左右に傾ける

今や、私は操縦席を左右に傾けて、静かではなく現実的な感覚を与えたいと思っています。

これまでのところ、私はこれがあります。

using UnityEngine; 
using System.Collections; 

public class Tilt : MonoBehaviour 
{ 
    float speed = 0.25f; 

    void Update() 
    { 
     Tilter(); 
    } 

    void Tilter() 
    { 
     if (transform.rotation.z < 5f) { 
      transform.Rotate (new Vector3 (0f, 0f, speed)); 
     } 

     if (transform.rotation.z > 5f) 
      transform.Rotate (new Vector3 (0f, 0f, -speed)); 
    } 

} 

これは期待通りに左にコックピットを傾ける開始するが、回転は5の値よりも大きくなったら、コックピットは、他の方法で回転しない、それを反対方向の代わりに同じ方法で回転し続けます。

+0

あなたがあなたのコードで持っている論理的な問題のビットは、完璧に働いていても、あなたのローテーションはz = 5でロックされてしまうということです。 5を通過する瞬間、5に戻り、少し下になると、5以上に戻ります。これは、基本的に振動(速度に依存する振幅) )。それはあなたの意図ですか? – Serlite

+0

@Tomそれはすばらしい質問でした。なぜあなたはそれを削除しましたか?問題は解決されていますか? – Programmer

+0

@Programmer私はインスペクタで間違ったことを割り当てていたことを知る前に、約15分間それをタイプしました.-ちょっとばかげたミス!あなたはそれを残して、私の恥ずかしそうな答えを入れるべきだったと思いますか? : ') – Tom

答えて

2

私はこのコードを試していませんが、何をしようとしているのか分かっていれば、Mathf.SinとTime.timeを使用して-1から1の範囲の値を連続的に取得し、あなたのコックピットの回転範囲。たとえば:

using UnityEngine; 
using System.Collections; 

public class Tilt : MonoBehaviour 
{ 
    float speed = 1.0f; 
    float rotationAngle = 45; 

    void Update() 
    { 
     Tilter(); 
    } 

    void Tilter() 
    { 
     float rotationZ = rotationAngle * Mathf.Sin(Time.time * speed); 
     transform.Rotate (new Vector3 (0f, 0f, rotationZ)); 
    } 

} 

この例では、ゆっくりと(再び、私はそれを試していない)ようにして、再び0に、-45に続いて、再び0に、0から45まで、あなたのコックピットを回転させる必要があります。

速度を増減して、回転を速くするか遅くすることができます。

関連する問題