untiy学习——开启协程

本文介绍如何在Unity3D中利用StartCoroutine方法和Fade协程实现游戏物体随时间逐渐变为透明的效果,并展示了如何使用WaitForSeconds类为这一过程添加延迟。

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

继上一篇,我们要调用Fade方法,我们就要使用unity3D中的StartCoroutine方法。
下面我们就通过StartCoroutine方法来开启定义协程Fade,代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class CoroutineTest : MonoBehaviour {

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        if (Input.GetKey(KeyCode.LeftArrow))
            StartCoroutine("Fade");
    }
    IEnumerator Fade()
    {
        for (float f = 1f; f >= 0; f -= 0.1f)
        {
            Color c = GetComponent<Renderer>().material.color;
            //Color c = renderer.material.color;
            c.a = f;
            GetComponent<Renderer>().material.color = c;
            yield return null;

        }
    }
}

将该脚本挂载在某个游戏对象上,开始运行游戏,在游戏运行期间按下键盘方向左键便开启了一个协程Fade,也就实现了游戏对象随着时间而逐渐变得透明的功能。
这里写图片描述
注:
在场景中创建一个cube并且拖入材质,拖入以上脚本,画红线的地方是我自己选择的,运行场景。这里写图片描述
注:这就是最终结果。

但是执行过脚本之后你会发现一个问题,那就是协程是每帧都会恢复执行的,如果想要一个延时的效果,经过一段时间之后再恢复执行是否有可能呢?答案是可以的。这里又会引入一个新的类WaitForSeconds。通过它可以实现延时恢复执行逻辑的需求。
我们现在做一个使用WaitForSeconds类的实例:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ExampleClass : MonoBehaviour {

    // Use this for initialization
    void Start () {
        StartCoroutine("Example");
    }
    IEnumerator Example()
    {
        print(Time.time );
        yield return new WaitForSeconds(5);
        print(Time.time);
    }
    // Update is called once per frame
    void Update () {

    }
}

将这个脚本挂在场景内摄像机上,然后运行游戏,可以在unity3D的输出窗口看到打印出的语句。
这里写图片描述
注:看到使用WaitForSeconds使协程Example推迟了5秒才恢复执行之后的逻辑。

接下来我们要做的是使用WaitForSeconds来延缓游戏物体变得透明。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class CoroutineTest : MonoBehaviour {

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        if (Input.GetKey(KeyCode.LeftArrow))
            StartCoroutine("Fade");
    }
    IEnumerator Fade()
    {
        for (float f = 1f; f >= 0; f -= 0.1f)
        {
            Color c = GetComponent<Renderer>().material.color;
            //Color c = renderer.material.color;
            c.a = f;
            GetComponent<Renderer>().material.color = c;
            yield return new WaitForSeconds(.5f);

        }
    }
}

效果图:
这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值