我如何在最后0.25秒内光线投射鼠标位置

时间:2017-12-22 09:59:14

标签: c# unity3d game-physics raycasting

我想用光线投射最后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 个答案:

答案 0 :(得分:2)

如果您要使用FixedUpdate,那么您只需添加到队列一定数量。入队直到某个计数,然后出队并入队。

如果您知道0.02是增量时间,那么您需要

0.25 / 0.02 = 12.5

将它舍入到12并且:

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能够以定义的速度运行。