unity3D中协程IEnumerator使用

本文介绍Unity中使用协程实现物体颜色变化及路点巡逻功能。通过点击按钮,物体颜色从白色变为红色,1秒后恢复原色。此外,演示了如何让对象沿预设路点巡逻,每到达一个路点等待2秒后继续巡逻。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

练习 :物体本身是白色,当点击攻击按钮后,物体变红,1秒后变回原来的颜色

public class ChangeColor : MonoBehaviour
{
    private Color oldColor;
    private MeshRenderer render;
    private void Start(){
        render = this.GetComponent<MeshRenderer>();
        oldColor = render.material.color;
    }
    private void Damage(){
        StartCoroutine("ChangeColorFunc");     //调用
      // StartCoroutine(ChangeColorFunc());  //函数参数调用
      // StopCoroutines();只能停止一字符串启动的协程
    }
    private IEnumerator ChangeColorFunc() {     //定义协程
        render.material.color = Color.red;
        yield return new WaitForSeconds(1);
        render.material.color = oldColor;
    }
    private void OnGUI()
    {
        if (GUILayout.Button("攻击"))
            Damage();
    }
}

多个路点巡逻:每到一点等待一段时间再继续巡逻

/// <summary>
/// 路点巡逻
/// </summary>
public class PathTest : MonoBehaviour{
    public Transform[] points;//路点
    public float speed = 5;
    private bool loop = true;
    private void OnGUI() {//找到一个路点等待2秒,并且可以循环巡逻
        if (GUILayout.Button("开始"))
            StartCoroutine(MoveToPath());
        else if (GUILayout.Button("停止"))
            StopAllCoroutines();//停止本对象中所有协程
    }
    private IEnumerator MoveToPath(){
        do
        {
            foreach (var point in points)
            {
                //协程嵌套
                //找到目标点后再找下一个点,等待MoveToTarget()方法执行结束后再启用协程
                yield return StartCoroutine(MoveToTarget(point.position));
                yield return new WaitForSeconds(2);
            }
        } while (loop);

    }
    //找目标点,不是一次,而是分多次,所以此处适宜用协程
    private IEnumerator MoveToTarget(Vector3 target){
        while (transform.position != target){
            transform.position = Vector3.MoveTowards(transform.position, target,
                speed * Time.deltaTime);
            yield return new WaitForFixedUpdate();
        }
        //yield return new WaitForSeconds(2);
    }
 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值