Unity 3D协程

2023-11-06

Unity3D 是单线程的

StartCoroutine 开启协程
Coroutine StartCoroutine(IEnumerator routine);
Coroutine StartCoroutine(string methodName, object value = null);
yield 暂停协程执行
yield return null  //暂停一帧,然后再执行
StopCoroutine 停止一个协程

StopCoroutine只能停止同一个游戏脚本中的方法名和传入string型参数相同的协程,而无法影响别的脚本中开启的协程,StopCoroutine方法只能用来停止那些使用了StartCoroutine的string型参数的重载版本开启的协程

协程延时效果
  • WaitForSeconds 暂停几秒
  • WaitForFixedUpdate 暂停协程直到下一次FixedUpdate时才会继续
  • WaitForEndOfFrame 等到所有摄像机和GUI被渲染完成后再恢复协程执行
迭代器
  • IEnumerable
//非泛型
public interface IEnumerable
{
  IEnumerator  GetEnumerator();
}

//泛型
public interface IEumerable<out T> :IEumberable
{
  IEnumerator<T> GetEnumerator();
  IEnumerator   GetEnumerator();
}
  • IEnumerator
//非泛型
public interface IEumerator
{
  Object Current {get;}     //当前所指向的值
  bool MoveNext();          //指向下一个结点
  void Reset();
}

//泛型
public interface IEnumerator<out T>: IDisposable, IEnumerator
{
  void Dispose();
  Object Current {get;}        
  T Current {get;}
  bool MoveNext();
  void Reset();
}

迭代器块中的局部变量会被分配到堆上

WWW和协程

WWW类是提供一个用来从提供的URL获取内容的工具类,并且返回该实例来下载URL的内容。WWW类的构造函数除了创建一个新的实例之外,还会创建和发送一个GET请求,并且会自动开启一个流来下载从URL获取内容

使用WWW实现GET请求和POST请求

public class HttpWrapper : MonoBehaviour
{
  public void GET(string url, Action<WWW> onSuccess, Action<WWW> onFail = null)
  {
    WWW www = new WWW(url);
    StartCoroutine(WaitForResponse(www, onSuccess, onFail));
  }

  public void POST(string url, Dictionary<string, string> post, Action<WWW> onSuccess, Action<WWW> onFail)
  {
    WWWForm form = new WWWForm();
    foreach(KeyValuePair<string, string> post_arg in post)
    {
      form.AddField(post_arg.Key, post_arg.Value);
    }
    WWW www = new WWW(url, form);

    StartCoroutine(WaitForResponse(www, onSuccess, onFail));
  }

  private IEumerator WaitForResponse(WWW www, Action<WWW> onSuccess, Action<WWW> onFail = null)
  {
    yield return null;
    if(www.error == null)
    {
      onSuccess(www);
    }
    else
    {
      Debug.LogError("WWW Error");
      if(onFail != null)  onFail(www);
    }
  }
}
参考

Unity 3D脚本编程—-使用c#语言开发跨平台

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity 3D协程 的相关文章

  • Unity用Vuforia做AR实现脱卡效果

    有时在识别目标丢失后我们仍希望虚拟物体能够出现在摄像机前 或者到一个特定的位置 我们能对其进行操作 这就是脱卡功能 自带的脱卡功能应该是ExtendedTracking 允许模型在识别图丢失的时候还存在 位置不变 在丢失的时候的位置 这样也
  • UnityLuaMvvM Lua 带通知的Mode类

    实现数据更新UI自动刷新的核心代码 欢迎关注https gitee com xiongks UnityMVVM mode function modeType local obj obj modeType modeType obj filds
  • unity game界面按下play会不断闪烁,按下暂停键(pause)或者中止/下一步(step),game界面的画面会接连变化

    没找到答案 改了两个下午的程序 改完还是这样 后来发现是FixedUpdate Update与OnDrawGizmos的问题 OnDrawGizmos是每帧都会绘制 用FixedUpdate理所当然就那啥了 分析的时候 就突然想到是不是这俩
  • 游戏开发unity编辑器扩展知识系列:修改纹理资源的TextureType

    需要用TextureImporter导入资源 调用如下代码 TextureImporter importer TextureImporter TextureImporter GetAtPath path importer textureTy
  • Unity3d Terrain地形制作系列(一)

    游戏简单地形 地形制作 地形制作 第一步在场景里加载一个地形对象 第二步 我们在属性面板里找到绘制地形 然后选择Set Height 绘制高度 应该我们要制作低凹的效果 所有先让他有个高度 不然是不能实现低凹的效果 如图 我们然后选择绘制地
  • Unity中loading页加载的实现

    首先创建一个Global cs 使用单例用于存储场景的名字 便于后续脚本的调用 此脚本不必挂载在游戏物体上 using UnityEngine using System Collections public class Global Mon
  • Unity Animator 动画没切换

    恶魔射手 Survival Shooter 项目 有两个动画 一个是静止时的Idle 一个是走路时候的Move 如下图 设置好动画状态机后发现按方向键后还是Idle 没反应 而一直按着方向键后呢又动起来了 最后找到了真相 原来选中了 Has
  • unity制作一个可以自由滑动收缩的历史记录功能。

    公司在做一款模拟经营类的卖车游戏 需要一个简单的历史记录功能 放在左上角 记录最近20条的收入 支出记录 超过2秒不动则收起 收起时展示最近的一个消息记录 用到的组件是ScrollView 使用方法可以参考我写过的一篇博客 ScrollVi
  • 1.17 从0开始学习Unity游戏开发--场景切换

    前面的所有文章我们都在一个固定的游戏场景内进行开发 在最开始介绍场景这个概念的时候就已经提及 这个场景可以是一张地图 或者是一个对战房间等等 所以显然这个场景可以有多个 并且可以从一个场景切换到另外一个场景 那么在Unity中如何进行场景切
  • c#获取cpu序列号

  • FBX导入Unity中模型没有材质的处理

    一 3dMax导出FBX时的注意事项 导出时 确保maps文件存在 里面放着fbx用到的image 二 在Unity中的设置 1 文件拖入Unity的Assets文件夹中 2 查看模型的材质是否存在 如下所示 材质为None 此时拖入sce
  • Unity中实现倒计时的几种方式

    1 Time time using UnityEngine public class TimeTest MonoBehaviour public float secound 10 void Update Timing private flo
  • Unity与Android的Back键冲突解决

    Unity与Android的Back键冲突解决 上一篇的最后留下了两个问题 Unity视图下横屏闪退 Unity视图下Android无法响应back返回上一activity 对于第一个问题 应该是Unity横屏下视图的某些设置跟Androi
  • Golang协程与通道整理

    协程goroutine 不由OS调度 而是用户层自行释放CPU 从而在执行体之间切换 Go在底层进行协助实现 涉及系统调用的地方由Go标准库协助释放CPU 总之 不通过OS进行切换 自行切换 系统运行开支大大降低 通道channel 并发编
  • 【原神游戏开发日志1】缘起

    原神游戏开发日志1 缘起 版权声明 本文为 优梦创客 原创文章 您可以自由转载 但必须加入完整的版权声明 文章内容不得删减 修改 演绎 相关学习资源见文末 大家好 最近看到原神在TGA上频频获奖 作为一个14年经验的游戏开发行业的老兵 我就
  • 【Unity】如何让Unity程序一打开就运行命令行命令

    背景 Unity程序有时依赖于某些服务去实现一些功能 此时可能需要类似打开程序就自动运行Windows命令行命令的功能 方法 using UnityEngine using System Diagnostics using System T
  • 游戏开发创建操作之玩家信息系统的建立

    游戏一般都需要玩家信息系统 那么我们应该如何搭建玩家信息系统 接下来我将展示一种简单的方法 完整代码如下 using System Collections using System Collections Generic using Uni
  • 游戏开发常见操作梳理之NPC药品商店系统(NGUI版)

    后续会出UGUI Json的版本 敬请期待 游戏开发中经常会出现药品商店 实际操作与武器商店类似 甚至根据实际情况可以简化设置 废话不多说 直接上代码 药品商店的源码 using System Collections using Syste
  • 游戏开发常见操作梳理之小地图的制作

    游戏中一般存在小地图系统 实际上就是设置一个新的摄像机放置在玩家的正上方 然后在小地图上显示新摄像机看见的东西就可以了 在小地图上一般存在放大地图和缩小地图的按钮可以方便放大和缩小地图 这些操作是如何实现的呢 接下来直接上核心代码 usin
  • 游戏开发中常见系统梳理之背包系统的实现一

    游戏中几乎都存在大大小小的背包系统 接下来我将讲述背包系统具体是如何实现的 完整源码 以下是使用unity NGUI实现 使用txt配置的方法 后续更新UGUI Json实现的背包系统敬请期待 背包中的物品我们常常将其制作成预设体 通过改变

随机推荐

  • react+antd mobile实现 H5底部tab页面

    1 引入底部tab页所需组件 第二步 创建tabs负责放入底部的页面路由 第三步在return里面对tab进行配置以及引用所需的页面组件内 其中 activekey 是切换tab的key值当他切换等于对应的路由是就展示对应的页面
  • 【Java】将文本转化成语音

    1 需要的jar包 2 把dll文件放在 JAVA HOME bin下 注意系统是32位还是64位 也可以放在C Windows System32下 如果是64位应该放在C Windows SysWOW64 下 3 java代码 impor
  • CA2W格式化多个时需要加强制转换,CDuiString格式化也需强转

    CString str str Format L s CM2W ss data str Format L s s LPCTSTR CM2W ss data LPCTSTR CM2W asdfg str Format L s LPCTSTR
  • 基于Zynq FPGA对雷龙SD NAND的测试

    文章目录 一 SD NAND特征 1 1 SD卡简介 1 2 SD卡Block图 二 SD卡样片 三 Zynq测试平台搭建 3 1 测试流程 3 2 SOC搭建 四 软件搭建 五 测试结果 六 总结 一 SD NAND特征 1 1 SD卡简
  • webpack5学习进阶:多页面应用、Tree Shaking、PWA、Shimming

    文章目录 一 多页面应用 1 entry 配置 1 1 将两个本地文件打包在一起 1 2 还可以打包第三方库文件 1 3 多页面打包 2 index html 模板配置 3 多页面环境搭建 二 Tree Shaking 摇树优化 1 配置
  • rocketMQ系列(一): 消息中间件及rocketMQ简介

    一 消息中间件介绍 消息中间件是基于队列与消息传递技术 在网络环境中为应用系统提供同步或异步 可靠的消息传输的支撑性软件系统 消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流 并基于数据通信来进行分布式系统的集成 通过提供消息传递
  • 什么是弱网测试?为什么要进行弱网测试?怎么进行弱网测试?

    什么是弱网测试 由于处在移动互联网盛行的时代 网络形态除了有线连接外 还有2G 3G 4G Wifi 5G等多种手机网络连接方式 首先额外补充一些5G的知识 2分钟了解什么是5G 在前不久结束的 MWC 2018 上 5G 成了全球的一个热
  • caffe-python lmdb 读写(转)

    lmdb write import lmdb import numpy as np import cv2 import caffe from caffe proto import caffe pb2 basic setting 这个设置用来
  • ORA-01186/ORA-01122/ORA-01110/ORA-01206

    author skate time 2011 12 14 在前几天检查一套DG库的时候 当read only打开stanby库的时候 在alert log里发现错误log如下 Wed Dec 14 15 45 19 2011 Complet
  • vb excel编程实例_有VB的基础,如何学习VBA

    VBA的全称Visual Basic for Applications 在Office等许多软件中 看到的宏 便是VBA 基于我的理解 VB基础指什么 这里的VB基础指能够看得懂简单的VB代码 对if结构 for结构有一定的认识 理解变量有
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • Spring Data 查询方法的规则定义(五)

    有句话这样说 欲练神功 挥刀自宫 请亲们先回到第一个 从Spring data 介绍 开始看 搭好环境 跟着步伐一块走 Spring Data 的方法必须严格按照它的规范进行编写 如果写错了就不行 下面是网上找的一张图 仔细看 咱们先拿几个
  • Mutimap用法

    Multimap 1 创建 Multimap
  • 牛客网&&华为机试&&坐标移动

    牛客网 华为机试 坐标移动 代码实现 include
  • 分库分表实战之从根上带你吃透MySQL的索引

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 问题分析 为什么查询变慢呢 接上期 我们知道了MySQL查询的全过程 也知道了整个过程的瓶颈在于磁盘IO 那怎么降低磁盘IO次数呢 答案就是索引 正确的使用索引 我们
  • css3网格布局

    网格布局是flex的升级版 父级属性display grid 即可把这个div变成网格 父级属性grid template columns 20 20 20 20 设置有多少列 每列有多宽 auto自动填 1fr 2fr 设置比例倍数 父级
  • 如何使用命令行编译以及运行java文件

    要想编译和运行java文件 很简单 只需要两个命令 1 javac 作用 编译java文件 使用方法 javac Hello java 如果不出错的话 在与Hello java 同一目录下会生成一个Hello class文件 这个class
  • 26-LeetCode刷题之删除有序数组中的重复项

    个人主页 你帅你先说 欢迎点赞 关注 收藏 既选择了远方 便只顾风雨兼程 欢迎大家有问题随时私信我 版权 本文由 你帅你先说 原创 CSDN首发 侵权必究 为您导航 题目 解题思路 代码实现 题目 26 删除有序数组中的重复项 解题思路 思
  • android的RecyclerView使用

    Android中的RecyclerView是一个可复用的列表控件 它比ListView更加灵活和强大 RecyclerView可以用来展示大量的数据 并且支持多种布局方式 包括线性布局 网格布局 瀑布流布局等 下面是使用RecyclerVi
  • Unity 3D协程

    Unity3D 是单线程的 StartCoroutine 开启协程 Coroutine StartCoroutine IEnumerator routine Coroutine StartCoroutine string methodNam