当前位置: 首页 > 编程笔记 >

unity3d 协程

杜晨朗
2023-03-14
本文向大家介绍unity3d 协程,包括了unity3d 协程的使用技巧和注意事项,需要的朋友参考一下

示例

首先,必须了解,游戏引擎(例如Unity)在“基于框架”的范例上工作。

在每一帧中执行代码。

其中包括Unity自己的代码以及您的代码。

在考虑框架时,一定要了解,绝对不能保证框架何时发生。他们不会定期跳动。帧之间的间隙可以是例如0.02632,然后是0.021167,然后是0.029778,依此类推。在该示例中,它们全都是“大约” 1/50秒,但它们都是不同的。而且在任何时候,您可能需要花费更长或更短的时间才能获得帧。并且您的代码可以在框架内的任何时间执行。

牢记这一点,您可能会问:如何在Unity中的代码中访问这些框架?

很简单,您可以使用Update()呼叫,也可以使用协程。(实际上,它们是完全相同的东西:它们允许代码在每个帧中运行。)

协程的目的是:

您可以运行一些代码,然后“停止并等待”直到以后的某个帧

您可以等待到下一帧,可以等待许多帧,或者可以等待未来几秒钟的大约时间。

例如,您可以等待“大约一秒钟”,这意味着它将等待大约一秒钟,然后从现在开始大约一秒钟将您的代码放在某个帧中。(实际上,在该html" target="_blank">框架内,代码可以在任何时间运行。)要重复:它不会精确到一秒钟。准确的计时在游戏引擎中毫无意义。

在协程内部:

要等待一帧:

// 做点什么
yield return null;  // 等到下一帧
// 做点什么

等待三帧:

// 做点什么
yield return null;  // 等到从现在开始三帧
yield return null;
yield return null;
// 做点什么

等待大约半秒钟:

// 做点什么
yield return new WaitForSeconds (0.5f); // 等待约0.5秒钟的画面
// 做点什么

每帧都要做一些事情:

while (true)
{
    // 做点什么
    yield return null;  // 等到下一帧
}

该示例实际上与将某些内容简单地放入Unity的“ Update”调用中完全相同:“执行某项操作”中的代码每帧运行一次。

示例

将股票代码附加到GameObject。当该游戏对象处于活动状态时,刻度线将运行。请注意,当游戏对象变为非活动状态时,脚本会仔细停止协程。这通常是正确设计协程用法的重要方面。

using UnityEngine;
using System.Collections;

public class Ticker:MonoBehaviour {

    void OnEnable()
    {
        StartCoroutine(TickEverySecond());
    }

    void OnDisable()
    {
        StopAllCoroutines();
    }

    IEnumerator TickEverySecond()
    {
        var wait = new WaitForSeconds(1f); // 谨记:它仅是近似的
        while(true)
        {
            Debug.Log("Tick");
            yield return wait;  // 等待一帧,大约从现在开始1秒钟
        }
    }
}
           

 类似资料:
  • 本文向大家介绍unity3d 结束协程,包括了unity3d 结束协程的使用技巧和注意事项,需要的朋友参考一下 示例 通常,您将协程设计为在达到某些目标时自然终止。 要从协程“内部”阻止协程,您不能像在普通功能中早退一样简单地“返回”。而是使用yield break。 您还可以强制脚本启动的所有协程在完成之前停止。 从调用方停止特定协程的方法因启动方式而异。 如果您通过字符串名称启动了协程: 那么

  • 本文向大家介绍unity3d 可以作为协程的MonoBehaviour方法,包括了unity3d 可以作为协程的MonoBehaviour方法的使用技巧和注意事项,需要的朋友参考一下 示例 可以将三种MonoBehaviour方法制成协程。 Start() OnBecameVisible() OnLevelWasLoaded() 例如,这可用于创建仅在摄像机可见对象时执行的脚本。        

  • Unity3D 是一个跨平台的浏览器/移动游戏软件框架。 Unity3D引擎采用了和大型、专业的游戏开发引擎相同的架构方式和开发方式实现Web3D,对于Web3D行业来说,是一次大的飞跃,游戏是VR行业 的最高端,呵呵,但是现在都已经平民化了,甚至过春节在山区也能碰见搞VR的老乡,因为会用3Dmax或者VRP也算VR了,呵呵,但是Unity3D的 出现和大量应用将把Web3D拉到Game的快车道上

  • 本文向大家介绍unity3d 介绍,包括了unity3d 介绍的使用技巧和注意事项,需要的朋友参考一下 示例 预制件是一种资产类型,可以存储完整的GameObject及其组件,属性,附加组件和序列化的属性值。在许多情况下这很有用,包括: 在场景中复制对象 在多个场景中共享一个公共对象 能够一次修改预制件并将更改应用于多个对象/场景 创建具有轻微修改的重复对象,同时可以从一个基础预制件中编辑公共元素

  • 本文向大家介绍unity3d Custom Property Drawer,包括了unity3d Custom Property Drawer的使用技巧和注意事项,需要的朋友参考一下 示例 有时,您有包含数据但不从MonoBehaviour派生的自定义对象。除非您为对象类型编写自己的自定义属性抽屉,否则将这些对象添加为MonoBehaviour类中的字段不会产生视觉效果。 下面是添加到MonoBe

  • 本文向大家介绍unity3d Parenting 与 Children ,包括了unity3d Parenting 与 Children 的使用技巧和注意事项,需要的朋友参考一下 示例 Unity使用层次结构来使您的项目井井有条。您可以使用编辑器在层次结构中为对象分配位置,但是也可以通过代码来实现。 为人父母 您可以使用以下方法设置对象的父对象 每当您设置变换父对象时,它都会将对象位置保留为世界位