Не уверен, что StartCoroutine делает заикание. Но когда отключить скрипт, чтобы не использовать его в инспекторе, заикание исчезает при использовании сценария.Игрок заикается при использовании StartCoroutine, как я могу его исправить?
Я использую сценарий путевых точек, прикрепленный к ThirdPersonController. Я добавил в ThirdPersoncontroller также агент Nav MesH.
У меня есть в иерархии также две сферы как путевые точки в окне Naviagtion, которые я отметил на флажке, чтобы сделать их навигацией Static, и я сделал навигацию по статическому по плоскости.
Затем запечено.
В окне Animator я создал новую State Walk с использованием 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' в любом месте функции 'Patrolling()'. Цикл while будет работать, а 'startPatorl' -' false'. Вы должны установить 'startPatorl' где-нибудь. Я не знаю, что вы делаете, и поэтому не можете сказать, где это сделать, но это проблема. – Programmer
@Programmer Что я делаю, это перемещение игрока между путевыми точками. Сценарий ошибочен так, как он есть (а не startPatrol для всей скриптовой логики)? –
Да. Просто взглянув на это, это неправильно. Единственная причина, по которой он не замерзал, состоит в том, что это функция сопрограммы, и у вас есть «yield return null;» внутри цикла while. Без этого он просто заморозил бы вашу игру. Кроме этого, я не понимаю остальную часть вашего кода ... У вас есть «путевые точки», хранящиеся в 'patrolPoints', и вы хотите переместить своего игрока из' patrolPoints [0] 'в длину' patrolPoints'? – Programmer