C# 玩家在使用StartRoutine时口吃,我如何修复?
不确定Start例程是否会导致口吃。但是当禁用脚本而不在检查器中使用它时,在使用脚本时就会出现口吃 我正在使用连接到ThirdPersonController的waypoints脚本。 我在第三个PersonController中添加了Nav网格代理 我在层次结构中还有两个球体作为导航窗口中的航路点,我在复选框上打了勾,使它们成为静态导航,我在飞机上也做了静态导航 然后烤了 在Animator窗口中,我使用HumanoidWalk创建了新的状态Walk,并将其设置为默认值,以便所有玩家在运行游戏时开始自动行走 玩家在两个航路点之间行走,但都结巴了。 如果我没有使用脚本,那么玩家也可以正常行走,其他玩家也可以正常行走,只有在使用脚本时才会出现口吃 这是航路点脚本:C# 玩家在使用StartRoutine时口吃,我如何修复?,c#,unity3d,unityscript,unity5,C#,Unity3d,Unityscript,Unity5,不确定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示例。一段时间以来,我试图做的是,玩家将在航路点之间行走。所以问题是:在你的问题中,脚本中存储的航路点在哪里?