C# 玩家在使用StartRoutine时口吃,我如何修复?

C# 玩家在使用StartRoutine时口吃,我如何修复?,c#,unity3d,unityscript,unity5,C#,Unity3d,Unityscript,Unity5,不确定Start例程是否会导致口吃。但是当禁用脚本而不在检查器中使用它时,在使用脚本时就会出现口吃 我正在使用连接到ThirdPersonController的waypoints脚本。 我在第三个PersonController中添加了Nav网格代理 我在层次结构中还有两个球体作为导航窗口中的航路点,我在复选框上打了勾,使它们成为静态导航,我在飞机上也做了静态导航 然后烤了 在Animator窗口中,我使用HumanoidWalk创建了新的状态Walk,并将其设置为默认值,以便所有玩家在运行游戏

不确定Start例程是否会导致口吃。但是当禁用脚本而不在检查器中使用它时,在使用脚本时就会出现口吃

我正在使用连接到ThirdPersonController的waypoints脚本。 我在第三个PersonController中添加了Nav网格代理

我在层次结构中还有两个球体作为导航窗口中的航路点,我在复选框上打了勾,使它们成为静态导航,我在飞机上也做了静态导航

然后烤了

在Animator窗口中,我使用HumanoidWalk创建了新的状态Walk,并将其设置为默认值,以便所有玩家在运行游戏时开始自动行走

玩家在两个航路点之间行走,但都结巴了。 如果我没有使用脚本,那么玩家也可以正常行走,其他玩家也可以正常行走,只有在使用脚本时才会出现口吃

这是航路点脚本:

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;
            }
        }
    }
}
使用UnityEngine;
使用系统集合;
公共班级巡逻:单一行为
{
公共交通点;
私人代理;
私有int dest=0;
//用于初始化
void Start()
{
agent=GetComponent();
启动例行程序(巡逻());
}
IEnumerator巡逻()
{
bool startPatorl=false;
对于(int i=0;i=巡逻点.长度)
{
i=0;
dest=0;
}
agent.destination=巡逻点[dest].transform.position;
收益返回空;
}
}
}
}

我认为问题在于您的协同程序循环太多,请尝试更改这一行

yield return null;
关于这一点:

yield return new WaitForEndOfFrame();
或者这个:

yield return new WaitForSeconds(1);

您的程序将进入无限循环,因为
startTorl
从未在
Patrolling()
函数中的任何位置设置为
true
。当
startTorl
false
时,while循环将运行。您应该在某个地方设置
startTorl
。我不知道你在做什么,因此不知道该在哪里做,但这就是问题所在。@Programmer我正在做的是在航路点之间移动玩家。脚本是错误的(不是StartControl整个脚本逻辑)?是的。只要看看它,它就错了。它没有冻结的唯一原因是因为这是一个协程函数,您有
返回null在while循环中。如果没有这一点,它只会冻结你的游戏。除此之外,我不明白你剩下的代码。。。您在
巡逻点中存储了
航路点
,您想将玩家从
巡逻点[0]
移动到
巡逻点的长度
?@程序员您说得对,这不是一个好脚本。我应该使用并查看unity docs示例。一段时间以来,我试图做的是,玩家将在航路点之间行走。所以问题是:在你的问题中,脚本中存储的航路点在哪里?