用协程实现循环移动

文章目录

前言
  • 曾经了解过协程
  • 今天了解到还可以在协程里面启动协程,刚好可以用来做一个循环移动的程序。代码如下。
 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);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值