[Unity] Unity的lua项目中模拟每帧运行一次的协程
来源:互联网 发布:360网络收藏夹网页版 编辑:程序博客网 时间:2024/06/05 02:22
游戏中,我们经常需要把一些大量计算或一些需要持续逐帧运算的步骤交给协程处理,习惯了Monobehaviour中使用协程来完成这类操作的我们。然而,很多Unity项目在选择热更新方案的时候,基本都会选择使用slua,ulua等lua解决方案,编写的lua代码运行在C#搭建的解释器上,两者之间可以相互调用,但是性能消耗也是极大的,为了减少C#和lua之间的相互调用,逻辑尽量都放在lua这边编写,这时候也难免会有需要用到协程的尴尬。
lua本身不支持多线程,但其支持协程。用法也颇为简单,不熟悉的可以先在网上了解一下lua协程的基本用法。
这里,我定义了一个非常简单的lua协程的静态管理类,有一个Update方法,每帧都会被调用。这是有不少不足的,但对于自己来说已经够用了,这个类可以很方便地添加终止协程等操作。
----------------------------------------- @Author: zhiheng.shao-- @Date: 2017-06-14T15:40:25+08:00-- @Filename: CoroutineManager.lua-- @Description: lua协程管理类---------------------------------------local CoroutineManager = static_class("CoroutineManager")local coroutines = {}-- 协程状态local CoroutineStatus = { Runnable = "runnable", Running = "running", Suspended = "suspended", Dead = "dead",}-- function CoroutineManager.StartCoroutine(co) coroutines[co] = CoroutineStatus.Runnableendfunction CoroutineManager.Update(deltaTime) for co, status in pairs(coroutines) do coroutine.resume(co) if coroutine.status(co) == CoroutineStatus.Dead then coroutines[co] = nil end endendfunction CoroutineManager.Init() coroutines = {}end
使用示例
require "CoroutineManager"function testLuaCoroutine() local count = 0 local co = coroutine.create(function(deltaTime) while(count < 10) do count = count + 1 print("test coroutine") coroutine.yield() end end) return coendCoroutineManager.StartCoroutine(testLuaCoroutine())
阅读全文
0 0
- [Unity] Unity的lua项目中模拟每帧运行一次的协程
- unity-luaFramewrok中lua错误信息的捕获
- Unity中协程的运行
- vscode 配置unity的lua
- Unity中另类的使用Lua的一种方式
- 项目记录28--unity-tolua框架 lua使用协程
- Unity中在Uptate中只做一次的方法
- 【Lua】Unity中热更新的实现方式
- UE4模拟Unity的CameraLayer
- Unity 协程运行时的监控和优化
- Unity 协程运行时的监控和优化
- 【Unity】预览选中的.lua文件
- Unity Lua热更新的 来龙去脉
- Lua实现的对象池,Unity
- Unity编辑器对Lua文件的支持
- 【Unity Shaders】Unity里的雾效模拟
- 【Unity Shaders】Unity里的雾效模拟
- Unity中加入Android项目的Build步骤 .<unity引用Android的jar包><Android对unity做二次开发>
- Python字典小练习
- SQL Server中建立外键的方法(百度经验)
- 更改rac oracle归档日志路径
- zookeeper常用命令
- php页面静态常用函数
- [Unity] Unity的lua项目中模拟每帧运行一次的协程
- git使用笔记
- 【面试题】剑指offer30--最小的k个数
- layer回调函数
- kNN进阶实例
- 看完《如何掌握所有的程序语言》的一些思考
- 面试题49:把字符串转换成整数
- Linux IP配置
- SPICE电路仿真(4)--三极管