關於Unity中的NavMeshAgent的remainingDistance問題


Unity中的NavMeshAgent的remainingDistance問題

在Unity官方案例中,要讓某個人物移動到某個地方,一般來說都是下面這樣的代碼:

agent.SetDestination(position);

要判斷是否停止的話,在《Unity官方案例精講》里面提到可以用remainingDistance來判斷移動是否結束,remainingDistance也就是(距離終點)剩余移動距離,讓它跟stopingDistance(結束距離)進行比較,如果小於,那么就是移動終止了,類似下面這樣的代碼.

agent.SetDestination(position);
if(agent.remainingDistance < agent.stoppingDistance){
	// 移動終止
	Debug.log("移動結束了");
}

但實際上,上面的代碼是有弊端的.....這就是最坑的地方啊!!!!!!!!!!!

事實上,使用SetDestination后,remainingDistance不是立刻更新的,因為agent還要計算距離什么的,所以此時的remainingDistance=0,所以上述代碼中即使沒有移動結束,依然會打印"移動結束"........被坑了差不多半學期吧,一直沒去想有什么更好的解決辦法,一直都是按照書上講的寫....看來以后還是不能盲從書上的東西.

那么如何解決這個問題呢,事實上,NavMeshAgent里面有個pathPending屬性,它英文解釋是:

Is a path in the process of being computed but not yet ready? (Read Only)

表示一個路徑是否還沒准備完畢並且正在計算中.如果已經准備完畢,返回True,否則返回False,這個正在計算中也就是我們使用SetDestination之后那一段"空白時間"(也就是remainingDistance沒有更新的那一段時間),所以正確的判斷移動是否結束的代碼應該是下面這樣:

agent.SetDestination(position);
if(!agent.pathPending && agent.remainingDistance < agent.stoppingDistance){
	// 移動終止
	Debug.log("移動結束了");
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM