2016-07-31 22 views
-1

不確定StartCoroutine是否會導致口吃。但是,當禁用腳本不在檢查器中使用它時,使用它發生的腳本時,口吃不見了。使用StartCoroutine時,玩家會口吃,我該如何解決它?

我正在使用附加到ThirdPersonController的航點腳本。 我添加到ThirdPersoncontroller也導航MesH代理。

我在層次結構也有兩個球是在Naviagtion窗口,我選中的複選框航點,使它們的靜態導航也是我做靜態導航在飛機上。

然後烘烤它。

在動畫窗口,我創建使用HumanoidWalk並集是默認設置,以便所有玩家開始運行遊戲時自動行走新的國家大道。

該播放器的航點之間行走,但它是所有口吃。 如果我沒有使用腳本,那麼玩家步行也很好,而且其他玩家我只有在使用它的口吃腳本時才行得通。

這是航點腳本:

using UnityEngine; 
using System.Collections; 

public class Patrol : MonoBehaviour 
{ 
    public Transform[] patrolPoints; 
    private NavMeshAgent agent; 
    private int dest = 0; 

    // Use this for initialization 
    void Start() 
    { 
     agent = GetComponent<NavMeshAgent>(); 
     StartCoroutine (Patrolling()); 
    } 


    IEnumerator Patrolling() 
    { 
     bool startPatorl = false; 

     for (int i = 0; i < patrolPoints.Length; i++) 
     { 
      while (!startPatorl) 
      { 

       if (agent.remainingDistance < 2.5f) 
       { 
        i++; 
        dest = i; 
       } 

       if (i >= patrolPoints.Length) 
       { 
        i = 0; 
        dest = 0; 
       } 

       agent.destination = patrolPoints[dest].transform.position; 
       yield return null; 
      } 
     } 
    } 
} 
+0

您的程序進入無限循環,因爲'startPatorl'永遠不會設置爲'在'巡邏()'函數的任何位置TRUE'。 while循環將在'startPatorl'爲'false'時運行。你應該在某處設置'startPatorl'。我不知道你在做什麼,因此不知道該在哪裏做,但這是問題所在。 – Programmer

+0

@Programmer我正在做的是在路點之間移動玩家。腳本錯了(不是startPatrol整個腳本邏輯)? –

+0

是的。只是看着它是錯的。它沒有凍結的唯一原因是因爲這是一個協同函數,並且在while循環內有'yield return null;'。沒有這個,它會凍結你的遊戲。除此之外,我不理解其餘的代碼......你有'patrolPoints'存儲'路點',你想把你的播放器從'patrolPoints [0]'移動到'patrolPoints'的長度? – Programmer

回答

0

我認爲問題是,你的協程是循環太多,試圖改變這一行

yield return null; 

絲毫這樣的:

yield return new WaitForEndOfFrame(); 

或本:

yield return new WaitForSeconds(1); 
相關問題