通过协程定点寻路
协程的语法
yield:暂停,通常用 yield return null 来暂停协程。
StartCoroutine(方法名()):恢复执行。
WaitForSeconds:引入时间延迟,默认情况下,协程将在 yield 后的帧上恢复。使用 yield return new WaitForSecond(.1f) 后,将延迟0.1秒后执行协程
WaitForFixedUpdate(),延迟一帧后执行
代码如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Coroutine : MonoBehaviour
{
public Transform[] wayPoint;
public float moveSpeed = 2;
public IEnumerator PathFinding()
{
for (int i = 0; i < wayPoint.Length; i++)
{
//等这句语句里面的内容运行完成,才会进行i++;
yield return StartCoroutine(MoveToTarget(wayPoint[i].position));
}
}
public IEnumerator MoveToTarget(Vector3 position)
{
while (Vector3.Distance(transform.position, position) > 0.1f)
{
transform.position = Vector3.MoveTowards(transform.position, position, moveSpeed * Time.deltaTime);
yield return new WaitForFixedUpdate(); //等待一次物理帧
}
}
public void OnGUI()
{
if (GUILayout.Button("走你!"))
{
StartCoroutine(PathFinding());
}
}
}
注
需要在数组中添加空组件
``