-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;
}
}
}
}
您的程序进入无限循环,因为'startPatorl'永远不会设置为'在'巡逻()'函数的任何位置TRUE'。 while循环将在'startPatorl'为'false'时运行。你应该在某处设置'startPatorl'。我不知道你在做什么,因此不知道该在哪里做,但这是问题所在。 – Programmer
@Programmer我正在做的是在路点之间移动玩家。脚本错了(不是startPatrol整个脚本逻辑)? –
是的。只是看着它是错的。它没有冻结的唯一原因是因为这是一个协同函数,并且在while循环内有'yield return null;'。没有这个,它会冻结你的游戏。除此之外,我不理解其余的代码......你有'patrolPoints'存储'路点',你想把你的播放器从'patrolPoints [0]'移动到'patrolPoints'的长度? – Programmer