协程在unity中特别常用,在tolua中,我们也能在lua文本中实现协程调用;但是在demo范例中,除了协程调用,还有一些warp绑定一类的知识,可能学习起来会懵B;为了方便学习,我们可以对例子做出简单修改,使学生知识点更加串联。
打开ToLua/Examples/05_LuaCoroutine的TestCoroutine类文件,将类改外以下代码(去掉了绑定相关代码,指定为lua文件)。

using UnityEngine;
using System;
using System.Collections;
using LuaInterface;//例子5和6展示的两套协同系统勿交叉使用,此为推荐方案
public class TestCoroutine : MonoBehaviour
{public TextAsset luaFile = null;private LuaState lua = null;private LuaLooper looper = null;void Awake(){#if UNITY_5 || UNITY_2017 || UNITY_2018Application.logMessageReceived += ShowTips;
#elseApplication.RegisterLogCallback(ShowTips);
#endif        //初始化状态lua = new LuaState();//调用状态开始方法lua.Start();looper = gameObject.AddComponent<LuaLooper>();//调用协程需要借助外部组件 不然等待不会执行looper.luaState = lua;//如果移动了ToLua目录,自己手动修复吧,只是例子就不做配置了string fullPath = Application.dataPath + "\\ToLua/Examples/05_LuaCoroutine";//添加lua文件路径lua.AddSearchPath(fullPath);lua.DoFile("TestLuaCoroutine.lua");LuaFunction f = lua.GetFunction("TestCortinue");f.Call();f.Dispose();f = null;}void OnApplicationQuit(){looper.Destroy();lua.Dispose();lua = null;
#if UNITY_5 || UNITY_2017 || UNITY_2018Application.logMessageReceived -= ShowTips;
#elseApplication.RegisterLogCallback(null);
#endif}string tips = null;void ShowTips(string msg, string stackTrace, LogType type){tips += msg;tips += "\r\n";}void OnGUI(){GUI.Label(new Rect(Screen.width / 2 - 300, Screen.height / 2 - 200, 600, 400), tips);if (GUI.Button(new Rect(50, 50, 120, 45), "Start Counter")){tips = null;LuaFunction func = lua.GetFunction("StartDelay");func.Call();func.Dispose();}else if (GUI.Button(new Rect(50, 150, 120, 45), "Stop Counter")){LuaFunction func = lua.GetFunction("StopDelay");func.Call();func.Dispose();}else if (GUI.Button(new Rect(50, 250, 120, 45), "GC")){lua.DoString("collectgarbage('collect')", "TestCoroutine.cs");Resources.UnloadUnusedAssets();}}
}

其实如上代码,调用携程就和调用普通lua方法一样,只是借用了LuaLooper组件去实现协程的功能,如果不写
looper = gameObject.AddComponent();//调用协程需要借助外部组件 不然等待不会执行
looper.luaState = lua;
就会发现,携程方法会卡在wait的部分,不会往下执行。
其实也就是调用lua普通方法,在lua类里面,普通方法在去调用或停止对应的协程。
携程调用方式有两种,一种是作者封装好的,一种是类unity的,类unity的消耗较大,作者推荐为本方式调用协程。

由于去掉了lua与unity绑定,所以改为了加载外部lua文件,lua文件也是参考绑定的文件,只是去掉了unity相关的www加载代码,lua文件如下。

function fib(n)local a, b = 0, 1while n > 0 doa, b = b, a + bn = n - 1endreturn a
endfunction CoFunc()print('Coroutine started')    for i = 0, 10, 1 doprint(fib(i))                    coroutine.wait(0.1)                        end coroutine.wait(0.1)     print("current frameCount: "..Time.frameCount)coroutine.step()print("yield frameCount: "..Time.frameCount)
endfunction TestCortinue()  coroutine.start(CoFunc)
endlocal coDelay = nilfunction Delay()local c = 1while true docoroutine.wait(1) print("Count: "..c)c = c + 1end
endfunction StartDelay()coDelay = coroutine.start(Delay)
endfunction StopDelay()coroutine.stop(coDelay)
end

ToLua 入门06_LuaCoroutine相关推荐

  1. ToLua 入门05_AccessingLuaVariables

    Tolua中的变量怎么去使用和赋值,在案例场景ToLua/Examples/04_AccessingLuaVariables中可以去学习:本章我们就分析下具体使用方式,首先先看一下提供的示范代码. u ...

  2. Lua快速入门篇(基础概述)(Yanlz+toLua+xLua)

    <Lua热更新> ##<Lua热更新>发布说明: ++++"Lua热更新"开始了,立钻哥哥终于开始此部分的探索了. ++++作为游戏发布迭代的重要技术:Lu ...

  3. gridcontrol值为0时设置为空_XASSET 4.0入门指南

    XASSET 5.1已经发布 XASSET 5.1为Unity项目提供了可以快速投入到生产环境中使用的具有更智能和灵活的资源分包.热更新机制和稳健高效的资源加载和内存管理的资源管理方案.它不仅可以服务 ...

  4. Unity(入门、中级、中高级、高级)

    Unity Unity 入门 1.Unity的安装与激活 1.1.中国版与国际版 中国版 https://unity.cn/ 国际版 https://unity.com/ 1.2.Unity下载 ht ...

  5. unity 3d网络游戏实战(全).pdf_“游戏开发入门指南——Unity+”的食用指南

    虽然专栏的文章已在置顶中按内容分好类了([置顶]游戏开发入门指南专栏目录),但不排除仍然有初学者面对繁杂的内容感觉无从下手.因此额外带来一篇食用指南,旨在给想要通过本专栏学习游戏开发的同学一条相对容易 ...

  6. 【游戏开发实战】Unity老工程师开始搞Laya了,不想看官方文档,那就看我的教程吧(Laya2.12.0版本 | 案例 | 入门 | 教程)

    文章目录 一.前言 二.我做的Laya案例集合工程 三.LayaAir IDE下载 四.Hello World工程 1.新建空项目 2.新建场景:HelloWorld.scene 3.创建一个Labe ...

  7. “游戏开发入门指南——Unity+”的食用指南

    "游戏开发入门指南--Unity+"的食用指南 虽然专栏的文章已在置顶中按内容分好类了([置顶]游戏开发入门指南专栏目录),但不排除仍然有初学者面对繁杂的内容感觉无从下手.因此额外 ...

  8. 极速入门ILRuntime热更新

    极速入门ILRuntime热更新 关于我们 1.认识ILRuntime 2.建立第一个ILRuntime程序 3.ILRuntime源码分析 4.深入ILRuntime热更新原理 5.深入ILRunt ...

  9. Lua语言基础入门 (Lua学习一)

    Lua语言快速入门 这篇博客主要是简单的讲解一下Lua的基础知识,涉及的东西不是很深,提供一些学习的思路,对具体的技术不展开介绍,网上资料很多写的都比我好,仅仅为了使用Lua,而不是做基于Lua的项目 ...

  10. 用Construct 2制作入门小游戏~

    今天在软导课上了解到了Construct 2这个神器,本零基础菜鸟决定尝试做一个简单的小游戏(实际上是入门的教程啊= = 首先呢,肯定是到官网下载软件啊,点击我下载~ 等安装完毕后我便按照新手教程开始 ...

最新文章

  1. PHP的serialize与json_encode
  2. 7z apache解析漏洞_解析漏洞(Web漏洞及防御)
  3. CSS3动画(典型模板)
  4. Cannot resolve field [product], input field list:[user, EXPR$0]
  5. mysql10038_navicat for mysql (10038)如何解决
  6. hbuilder自述文件_一次修复一个自述文件
  7. sha java 应用_Java中常用的加密算法应用MD5,SHA,RSA
  8. mongodb和mysql创建表_MongoDB 数据库创建删除、表(集合)
  9. 三,linux系统的由来
  10. ReactWebpack 环境安装
  11. codevs1688 求逆序对
  12. java中的方法与方法之间的关键_Java中包与包之间方法的调用及其关键字区分(基础)...
  13. 《MATLAB 神经网络43个案例分析》:第23章 Elman神经网络的数据预测----电力负荷预测模型研究
  14. gpuinfo测试软件,gpuinfo
  15. STM32驱动SPI FLASH(W25Q64)
  16. 一元函数微分学与多元函数微分学的对比学习
  17. Windows NT 简介
  18. CMS 执行的七个阶段
  19. matplotlib画多个子图
  20. DirectX创建Windows窗口

热门文章

  1. 无需任何软件,简单修改Win7开机登陆界面背景图片
  2. web漏扫问题处理1
  3. 电音中DJ/Producer/MC/EDM/Remix/Mix的名词解释(转)
  4. 华为vrrp默认优先级_华为vrrp配置实例
  5. 浏览器的“心脏”——内核
  6. 2020中兴捧月-傅里叶-丰收祭赛题常规解法
  7. 数据可视化案例(六)——智慧医院数据可视化
  8. 电脑的热点手机连接不上怎么办
  9. GIS空间分析(一)——空间分析与GIS
  10. java试题及答案下载_java练习题与答案百度云下载.doc