2017-12-22 6 views
0

마우스 움직임의 마지막 0.25 초 동안 raycast를하고 싶습니다.지난 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.25보다 클 경우 해당 인스턴스를 대기열에서 제외합니다. –

답변

2

FixedUpdate를 사용하려면 일정량의 큐에 간단히 추가하면됩니다. 특정 수만큼 대기열에 넣은 다음 대기열에서 제외하고 대기열에 넣습니다. 이것은 당신이하지 않는 사촌 일을 더 간단하게 만들 것입니다

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(); 
} 

: 당신은 0.02가 예를 들어 델타 시간을 알고 있다면

, 당신은

0.25/0.02 = 12.5 

12 라운드를하고 필요 타이머를 추적해야합니다. 즉, FixedUpdate가 정의 된 속도로 실행될 수 있는지 여부입니다.

관련 문제