前言
- 曾经了解过协程
- 今天了解到还可以在协程里面启动协程,刚好可以用来做一个循环移动的程序。代码如下。
public float speed = 20;
void Start()
{
Transform[] pos = GameObject.Find("pos1").GetComponentsInChildren<Transform>();
StartCoroutine(Walk(pos));
}
private IEnumerator Walk(Transform[] pos)
{
while (true)
{
foreach (var item in pos)
{
yield return StartCoroutine(Chase(item.position,item.name));
Debug.Log("我已经到达了该位置" + item.name);
}
if (Input.GetKeyDown(KeyCode.K))
{
StopAllCoroutines();
}
}
}
private IEnumerator Chase(Vector3 target,string name)
{
float dis = 0;
//当距离小于1.5f的时候就停止
do
{
transform.position = Vector3.Lerp(transform.position, target, Time.deltaTime * speed);
dis = (transform.position - target).sqrMagnitude;
Debug.Log("我在朝当前位置移动:" + name);
yield return null;
} while (dis > 2.25f);
}