当前位置:   article > 正文

XLua官方Examples 06_Coroutine lua协程怎么和Unity协程相配合_xlua coroutine.yield()

xlua coroutine.yield()

XLua官方教程目录 总结篇

 

1.coruntine_test.lua

  1. local cs_coroutine = (require 'cs_coroutine')
  2. local a = cs_coroutine.start(function()
  3. print('coroutine a started')
  4. coroutine.yield(cs_coroutine.start(function()
  5. print('coroutine b stated inside cotoutine a')
  6. coroutine.yield(CS.UnityEngine.WaitForSeconds(1))
  7. print('i am coroutine b')
  8. end))
  9. print('coroutine b finish')
  10. while true do
  11. coroutine.yield(CS.UnityEngine.WaitForSeconds(1))
  12. print('i am coroutine a')
  13. end
  14. end)
  15. cs_coroutine.start(function()
  16. print('stop coroutine a after 5 seconds')
  17. coroutine.yield(CS.UnityEngine.WaitForSeconds(5))
  18. cs_coroutine.stop(a)
  19. print('coroutine a stoped')
  20. end)

2.cs_coroutine.lua

  1. local util = require 'xlua.util'
  2. local gameobject = CS.UnityEngine.GameObject('Coroutine_Runner')
  3. CS.UnityEngine.Object.DontDestroyOnLoad(gameobject)
  4. local cs_coroutine_runner = gameobject:AddComponent(typeof(CS.XLuaTest.Coroutine_Runner))
  5. return {
  6. start = function(...)
  7. return cs_coroutine_runner:StartCoroutine(util.cs_generator(...))
  8. end;
  9. stop = function(coroutine)
  10. cs_coroutine_runner:StopCoroutine(coroutine)
  11. end
  12. }

3.C# CoroutineTest

  1. using UnityEngine;
  2. using XLua;
  3. namespace XLuaTest
  4. {
  5. public class CoroutineTest : MonoBehaviour
  6. {
  7. LuaEnv luaenv = null;
  8. // Use this for initialization
  9. void Start()
  10. {
  11. luaenv = new LuaEnv();
  12. luaenv.DoString("require 'coruntine_test'");
  13. }
  14. // Update is called once per frame
  15. void Update()
  16. {
  17. if (luaenv != null)
  18. {
  19. luaenv.Tick();
  20. }
  21. }
  22. void OnDestroy()
  23. {
  24. luaenv.Dispose();
  25. }
  26. }
  27. }

4.C# Coroutine_Runner

  1. using UnityEngine;
  2. using XLua;
  3. using System.Collections.Generic;
  4. using System.Collections;
  5. using System;
  6. namespace XLuaTest
  7. {
  8. public class Coroutine_Runner : MonoBehaviour
  9. {
  10. }
  11. public static class CoroutineConfig
  12. {
  13. [LuaCallCSharp]
  14. public static List<Type> LuaCallCSharp
  15. {
  16. get
  17. {
  18. return new List<Type>()
  19. {
  20. typeof(WaitForSeconds),
  21. typeof(WWW)
  22. };
  23. }
  24. }
  25. }
  26. }

5.调试

CoroutineTest.cs挂载到相机后运行即可

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/95838
推荐阅读
相关标签
  

闽ICP备14008679号