2016-07-31 1 views
-1

Не уверен, что 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; 
      } 
     } 
    } 
} 
+0

Ваша программа переходит в бесконечный цикл, потому что 'startPatorl' никогда не устанавливается в' true' в любом месте функции 'Patrolling()'. Цикл while будет работать, а 'startPatorl' -' false'. Вы должны установить 'startPatorl' где-нибудь. Я не знаю, что вы делаете, и поэтому не можете сказать, где это сделать, но это проблема. – Programmer

+0

@Programmer Что я делаю, это перемещение игрока между путевыми точками. Сценарий ошибочен так, как он есть (а не startPatrol для всей скриптовой логики)? –

+0

Да. Просто взглянув на это, это неправильно. Единственная причина, по которой он не замерзал, состоит в том, что это функция сопрограммы, и у вас есть «yield return null;» внутри цикла while. Без этого он просто заморозил бы вашу игру. Кроме этого, я не понимаю остальную часть вашего кода ... У вас есть «путевые точки», хранящиеся в 'patrolPoints', и вы хотите переместить своего игрока из' patrolPoints [0] 'в длину' patrolPoints'? – Programmer

ответ

0

Я думаю, что проблема в том, что ваш сопрограммная зацикливается слишком много, попробуйте изменить эту линию

yield return null; 

йота это:

yield return new WaitForEndOfFrame(); 

или это:

yield return new WaitForSeconds(1); 
Смежные вопросы