2016-07-31 24 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); 
相关问题