Xlua学习

 

1.Xlua中在哪添加新的搜索路径,如何自定义搜索脚本路径

2.util.lua脚本的路径

 

3.脚本最后的return含义:返回到之前require这个lua脚本的地方,一般用一个变量来接,返回的一般是一个表。

4.如何打印已经加载过的表(require列表)

for k,v in pairs(package.loaded) do

         print(k)

end  

5.lua behaviour组件的lua脚本里的表如何在其他脚本调用

  1.插入表:主要是luabehaviour运行的lua脚本其实没有require,可以使用这个方法可以让该表可以跨脚本使用。PlayerViewer是表名

    _G.PlayerViewer=PlayerViewer

  2.获取其他物体上的lua behaviour组件,获取里面的LuaTable的引用scriptEnv。然后就可以通过这个引用来调用表了。

  

  

  TipBox:GetComponent("LuaBehaviour").scriptEnv.showTip

 

6.如何写枚举:  参数分别为枚举表和起始下标

  1. function CreateEnumTable(tbl, index)   
  2.     local enumtbl = {}   
  3.     local enumindex = index or 0   
  4.     for i, v in ipairs(tbl) do   
  5.         enumtbl[v] = enumindex + i   
  6.     end   
  7.     return enumtbl   
  8. end  

7.Xlua的协程,需要引用这个脚本:

local yield_return = (require 'cs_coroutine').yield_return

co = coroutine.create(function()

                   print("协程启动");

                   yield_return(CS.UnityEngine.WaitForSeconds(3))

                   print('Wait for 3 seconds')

                   print("协程结束")

end)

coroutine.resume(co)

8.关于lua的表删除的是对应位置。但是存的时候也要把键存成数字,不能是字符串为键,不然删不掉。也就是说remove这种删除方式只能删除有顺序的东西,默认下标为1234这种的东西

 

9.在开发时使用Xlua可以不用Generate。如果Generate后,增加新的 [LuaCallCSharp]标签后还要进行Generate,或是clear All Generate。

  如何在XLUA中使用DOTween插件?见收藏内的内容 

10.lua中的代码如果开启了协程,报错unity中不会提示。

  在开启协程前面加上一个assert就可以打印出来了

11.怎么在Xlua中接入C#的数组?

  没法接,只能在C#里想办法把数据转换成链表结构传入LUA,就像这样:

  

12.XLUA中如何在协程外关闭所有协程?

  XLUA内定义的协程其实还是调用了C#的协程,就像这样:

  

  我们想要关闭协程只要在这里调用一下StopAllCoroutines()函数就可以了。注意,这个函数只能关闭本behaviour下的协程,其他脚本的协程可是关不掉的

  记得在lua脚本中注册一下停止协程的函数哦

  

 13.LUA中不支持64位整数的形式(long)

  在编译器下运行是没有问题的,不过如果发布到手机端后会导致程序闪退的情况。

  这种时候如果服务器发过来的数据结构是long长整形的话,可以在解包的时候使用一个新的int变量进行存储,然后调用这个int变量,就不会闪退了

 

转载于:https://www.cnblogs.com/CasualAttachment/p/7326920.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用XLua可以在Unity中实现Lua脚本的编写,同时也可以让Lua脚本与C#代码进行交互。 以下是基本的使用步骤: 1. 下载XLua插件并导入到Unity中。 2. 在Unity中创建一个新的Lua文件,编写Lua脚本代码。 3. 在C#代码中使用XLua的API来加载并运行Lua脚本,例如: ``` using XLua; public class LuaManager : MonoBehaviour { private LuaEnv luaEnv; void Awake() { luaEnv = new LuaEnv(); luaEnv.DoString("require 'main'"); // 加载并执行Lua脚本 } void Update() { luaEnv.Tick(); // 更新Lua环境 } void OnDestroy() { luaEnv.Dispose(); // 释放Lua环境 } } ``` 在上面的例子中,`Awake()`方法中创建了一个Lua环境,然后通过`DoString()`方法加载并执行了Lua脚本。`Update()`方法中每帧都调用了`Tick()`方法来更新Lua环境,`OnDestroy()`方法中释放了Lua环境。需要注意的是,在实际的项目中,可能需要更加复杂的逻辑和管理方式来处理Lua脚本的加载和运行。 4. 在Lua脚本中使用XLua提供的API来调用C#代码或者导出Lua模块,例如: ``` -- 导出一个Lua模块 local module = {} module.foo = function() print("Hello from Lua!") end return module -- 调用C#代码 local gameObject = CS.UnityEngine.GameObject("LuaObject") local transform = gameObject.transform transform.position = CS.UnityEngine.Vector3(1, 2, 3) ``` 在上面的例子中,导出了一个名为`module`的Lua模块,并定义了其中的一个函数`foo()`。同时,也调用了C#代码的API来创建了一个新的GameObject,并修改了它的Transform组件的位置。 XLua还提供了其他的功能,例如自定义导出规则、GC优化等。在使用XLua之前,建议先了解一些基本的Lua语法和C#Lua交互的机制,以便更好地使用XLua
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值