【unity知识点】实现延迟调用——InvokeRepeating Invoke CancelInvoke Coroutine使用介绍

简介: 【unity知识点】实现延迟调用——InvokeRepeating Invoke CancelInvoke Coroutine使用介绍

InvokeRepeating Invoke CancelInvoke

当需要在Unity中实现延迟调用的功能时,你可以使用InvokeRepeatingInvokeCancelInvoke协程(Coroutine)来完成。下面是它们的具体示例用法:

  1. 使用InvokeRepeating方法实现重复调用:
using UnityEngine;

public class ExampleScript : MonoBehaviour
{
    void Start()
    {
        InvokeRepeating("MethodName", 2f, 1f);
    }

    void MethodName()
    {
        Debug.Log("Repeatedly called every 1 second");
    }
}

上述示例中,MethodName方法会在启动2秒后开始被重复调用,并且每隔1秒执行一次。

  1. 使用Invoke方法实现延迟调用:
using UnityEngine;

public class ExampleScript : MonoBehaviour
{
    void Start()
    {
        Invoke("MethodName", 3f);
    }

    void MethodName()
    {
        Debug.Log("Delayed method call after 3 seconds");
    }
}

上述示例中,MethodName方法会在启动后延迟3秒进行一次调用。

  1. 使用CancelInvoke方法取消调用:
using UnityEngine;

public class ExampleScript : MonoBehaviour
{
    void Start()
    {
        InvokeRepeating("MethodName", 2f, 1f);
        Invoke("CancelMethod", 5f);
    }

    void MethodName()
    {
        Debug.Log("Repeatedly called every 1 second");
    }

    void CancelMethod()
    {
        Debug.Log("Cancelled the repeating method call");
        CancelInvoke("MethodName");
    }
}

上述示例中,CancelMethod方法会在启动后延迟5秒被调用,并且会取消之前通过InvokeRepeating方法设定的重复调用。

Coroutine

1. 使用协程(Coroutine)实现类似Invoke的延迟调用:

使用协程(Coroutine)实现延迟调用:

using UnityEngine;

public class ExampleScript : MonoBehaviour
{
    IEnumerator Start()
    {
        yield return new WaitForSeconds(2f);
        MethodName();
    }

    void MethodName()
    {
        Debug.Log("Delayed method call after 2 seconds");
    }
}

上述示例中,通过使用协程的方式实现了在启动2秒后执行MethodName方法的延迟调用。

以上是使用InvokeRepeatingInvokeCancelInvoke和协程(Coroutine)实现延迟调用的示例。你可以根据具体需求选择最合适的方法来实现你的功能。

2. 要使用协程(Coroutine)来实现类似于InvokeRepeating的重复调用效果

要使用协程(Coroutine)来实现类似于InvokeRepeating的重复调用效果,你可以使用yield return new WaitForSeconds语句来控制协程的执行间隔。下面是一个示例:

using UnityEngine;

public class ExampleScript : MonoBehaviour
{
    IEnumerator Start()
    {
        while (true)
        {
            yield return new WaitForSeconds(1f);
            MethodName();
        }
    }

    void MethodName()
    {
        Debug.Log("Repeatedly called every 1 second");
    }
}

上述示例中,Start方法作为协程被启动后,会进入一个无限循环。在每次循环中,通过yield return new WaitForSeconds(1f)语句等待1秒后,再调用MethodName方法。这样就实现了类似于InvokeRepeating方法的重复调用效果。

3. 区别

在某些情况下,协程和Invoke(或InvokeRepeating)方法实现的功能可以相互替代。但是,它们之间存在一些重要的区别。

  1. 语法:协程使用了yield语句来控制代码执行流程,而Invoke方法则直接传递方法名和延迟时间作为参数。
  2. 精度:协程的精度更高,因为它们可以在每一帧之后或者指定的时间间隔之后执行代码。而Invoke方法则受到Unity的帧率限制,可能无法达到非常精准的时间间隔。
  3. 可读性:协程通常比Invoke方法更加可读,因为它们可以使用常规的控制流结构(例如if语句和for循环)来组织代码,而不是依赖回调函数。
  4. 功能:协程在处理复杂的逻辑和异步操作时更加方便。例如,协程可以用于在后台加载资源、等待用户输入、等待网络请求响应等。

综上所述,虽然协程和Invoke方法可以实现类似的效果,但它们在实际应用中有不同的优势和劣势。在选择使用哪种方法时,你需要权衡各种因素,如代码可读性、精度、复杂性等。

4. 补充

# 开始协程:
private Coroutine myCoroutine;
myCoroutine = StartCoroutine(MyCoroutine());

# 停止协程:
StopCoroutine(myCoroutine);

# 停止名为 "Start" 的协程
StopCoroutine("Start");

# 停止当前对象上所有正在运行的协程
StopAllCoroutines();
目录
相关文章
|
3天前
|
图形学
【unity知识点】Unity 协程/携程Coroutine
【unity知识点】Unity 协程/携程Coroutine
4 0
|
26天前
|
图形学 异构计算
蓝易云 - Unity下如何实现低延迟的全景RTMP|RTSP流渲染
以上就是在Unity中实现低延迟的全景RTMP/RTSP流渲染的基本步骤。具体的实现可能会根据你的具体需求和所使用的库有所不同。
38 0
|
7月前
|
Go 调度 C#
Unity——协程(Coroutine)
Unity——协程(Coroutine)
136 0
|
10月前
|
编解码 数据处理 vr&ar
VR头显Unity下如何实现毫秒级延迟的RTMP或RTSP播放?
VR头显Unity下如何实现毫秒级延迟的RTMP或RTSP播放?
194 1
|
10月前
|
编解码 开发工具 图形学
Unity环境下RTMP推流+RTMP播放低延迟解决方案
在本文之前,我们发布了Unity环境下的RTMP推流(Windows平台+Android平台)和RTMP|RTSP拉流(Windows平台+Android平台+iOS平台)低延迟的解决方案,今天做个整体汇总,权当抛砖引玉。
479 0
|
10月前
|
Linux 图形学 Android开发
Unity3D下如何实现跨平台低延迟的RTMP、RTSP播放
好多开发者,希望我们能探讨下Unity平台RTMP或RTSP直播流数据播放和录制相关的模块,实际上,这块流程我们已经聊过多次,无非就是通过原生的RTMP或者RTSP模块,先从协议层拉取到数据,并解包解码,回调YUV或RGB数据,然后,在Unity创建响应的shader,获取图像数据填充纹理即可,说起来流程很简单,但是每个环节,如果做到极致体验,都非常难。简单来说,多一次拷贝,都会增大性能瓶颈或延迟。
|
10月前
|
数据采集 编解码 图形学
Unity实现Camera和Audio数据的低延迟RTMP推送技术探讨
关于Unity实现RTMP直播推送技术方案,之前零散的写过几篇介绍,得到了好多开发者的关注。以Android平台为例,目前视频这块,我们demo实现的是Camera数据的采集,然后编码投递到底层,如果设备没有性能瓶颈,可达到高帧率(60帧)均匀的RTMP推送效果。
|
10月前
|
开发工具 图形学 Android开发
如何在Unity3d平台下低延迟播放RTMP或RTSP流
随着VR类、工业仿真、智慧城市等场景的快速发展,开发者对Unity3d低延迟的直播需求量越来越大,前两年,大牛直播SDK发布了Windows平台、Android平台和iOS平台的Unity3d RTMP和RTSP的播放,好多公司用起来体验都非常好,以下介绍大概实现流程。
137 0
|
11月前
|
数据采集 编解码 数据处理
Unity下如何实现低延迟的全景RTMP|RTSP流渲染
Unity下如何实现低延迟的全景RTMP|RTSP流渲染
145 0
|
vr&ar 图形学
【100个 Unity小知识点】 | Unity中常用的几种单例写法
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。