【Unity C#篇学习笔记】运用协程实现简单的被击和中毒效果

本文介绍了如何在Unity中使用协程实现物体颜色的平滑过渡,从红色渐变到黑色,以及如何通过StopAllCoroutines避免多个协程同时运行。此外,还展示了如何优化代码,减少重复的GetComponent和SetColor调用,通过预分配变量提升效率,并允许自定义过渡时间。

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

首先,协程的准备工作

关键的代码段,写在了OnGUI中,在判断按钮的if语句块下

if (GUI.Button(new Rect(40, 50, 150, 50), "被击"))
        {
            StartCoroutine(WaitBehit());
        }

然后创建新的结构,包含了协程需要执行的具体内容,固定写法 IEnumerator name()

IEnumerator WaitBehit()
    {
        // GetComponentInChildren会在该物体各个子物体的属性中查找对应的值(SkinnedMeshRenderer)
        var smr = Monster.GetComponentInChildren<SkinnedMeshRenderer>();
        //没有返回类型,所以不需要设置
        smr.sharedMaterial.SetColor("_Color", Color.white);

        yield return new WaitForSeconds(0.05f);

        smr.sharedMaterial.SetColor("_Color", Color.black);
    }

简单易懂,按下按钮后, 执行SetColor为白色,等待0.05秒后,执行SetColor为黑色

但是缺少了过渡效果,下面我们在中毒的效果中加入此项

if (GUI.Button(new Rect(40, 120, 150, 50), "中毒"))
        {
            StartCoroutine(WaitDu());
        }

同样的,协程固定写法,然后是创建协程的结构

 IEnumerator WaitDu()
    {

        // 声明一个_time为0的数值进入循环
        float _time = 0;
        // 始终为真,会一直循环,所以利用yield break打破循环,条件是当_time大于2时
        while (true)
        {
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值