2017-12-22 13 views
0

マウスの動きの最後の0.25秒間レイキャストしたいと思います。最後の0.25秒間にマウスの位置をどのようにドリルするのですか

移動時間が0.25秒を超えるものは、私のキューから削除する必要があります。

現在、最大サイズ(サイズ)のキューを使用しています。最大サイズを超えると、エントリの削除が開始されます。代わりにこのメソッドを変換して、代わりに0.25f秒より古いエントリを削除しますか?

//Ray Cache 
    public Queue<Ray> inputRays; 
    int counter = 0; 
    int size = 10;//size of queue 

/**********************************************/ 

private void Start() 
{ 
    inputRays = new Queue<Ray>(); 
} 

private void FixedUpdate() 
{ 
    QueueInputRays(); 
} 


    private void QueueInputRays() 
    { 
     if (counter < size) 
     { 
      inputRays.Enqueue(Camera.main.ScreenPointToRay(Input.mousePosition)); 
      counter += 1; 
     } 
     else 
     { 
      inputRays.Enqueue(Camera.main.ScreenPointToRay(Input.mousePosition)); 
      inputRays.Dequeue(); 
     } 
    } 
+1

これを解決する方法の1つは、レイを直接使用するのではなく、レイを含む新しいクラスとレイがキャストされた時間を使用することです。次に、キューの前面にあるインスタンスを見て、その時間と今の時間を比較します。したがって、時間が0.25より大きい場合は、そのインスタンスをデキューします。 –

答えて

2

FixedUpdateを使用する場合は、一定量だけキューに追加するだけです。特定のカウントまでエンキューし、デキューしてエンキューします。

あなたは0.02、インスタンスのためのデルタ時間であることがわかっている場合、あなたは12にし、それラウンド

0.25/0.02 = 12.5 

が必要になります。

private Queue<Ray>queue = new Queue<Ray>(); 
public void AddToQueue(Ray ray) 
{ 
    if(this.queue.Count > 12){ this.queue.Dequeue(); } 
    this.queue.Enqueue(ray); 
} 
public Ray[] GetRays() 
{ 
    return this.queue.ToArray(); 
} 

これはあなたがいないんだって物事をよりシンプルになりますタイマーを追跡しなければならない。つまり、FixedUpdateが定義された速度で実行できるかどうかです。

関連する問題