玩家在使用StartCoroutine时结结巴巴,我该如何修复它

本文关键字:何修复 结结巴巴 StartCoroutine 玩家 | 更新日期: 2023-09-27 17:59:20

不确定StartCoroutine是否造成了口吃。但是,当禁用脚本而不在Inspector中使用时,使用脚本时会出现停顿。

我使用的是一个附加在ThirdPersonController上的路点脚本。我在ThirdPersoncontroller中添加了Nav MesH Agent。

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

然后烘烤。

在"动画师"窗口中,我使用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;
            }
        }
    }
}

玩家在使用StartCoroutine时结结巴巴,我该如何修复它

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

yield return null;

这个:

yield return new WaitForEndOfFrame();

或者这个:

yield return new WaitForSeconds(1);