我想用光线投射最后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();
}
}
答案 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能够以定义的速度运行。