LoxodonFramework实现Lua侧绑定UI元素的原理

在LoxodonFramework中,UI元素可以通过在面板上拖拽进行绑定,然后Lua脚本就能够通过self取到UI元素,以下是原理分析

1. 通过一个自定义列表绑定

因为VariableArray是被CustomPropertyDrawer重新编辑过的,所以在面板上的显示是这样的

2. 绑定原理

注意这里的Set方法,是用脚本的return的第一个对象进行的绑定,即对于上面的LuaTest.lua脚本来说,是用return的LuaTest这个表来进行的绑定

那么我们在使用时,可以直接通过LuaTest索引到我们绑定的UI对象

输出

是个Text,没有问题

但如果这里改成用self去索引元素的话,是取不到的

输出

3. self索引分析

原因是当前的Start方法中传入的self和LuaTest不是同一个东西,因为在C#侧使用的是Action< MonoBehaviour >的方式绑定的生命周期函数

在LuaBehavior中是将this传入,即LuaBehavior对象本身,也就是说当前Start方法中的self和LuaTest表不是同一个对象,所以通过self是取不到UI元素的

而如果是非生命周期函数的话,是可以通过self取到的

输出

4. 解决方案

总结来看,即在当前的情况下,在生命周期函数中,无法通过self(是LuaBehavior)取到UI元素,而在非生命周期函数中,可以通过self(是LuaTest)取到UI元素。

LoxodonFramework的解决方案是通过当前Lua脚本的对象去扩展LuaBehavior这个C#类,从而在生命周期函数中,通过self能够取到LuaTest(即Lua脚本return的)的对象

输出

关键在于当前LuaTest不再是一个空表,而是class()方法扩展后的表,而这里的target在LuaBehavior中有定义

也就是说在这个脚本的全局环境中,拿到的target就是LuaBehavior本身

然后在class方法中,判断是继承一个C#实例后,进入extends()方法

相关推荐
笨鸟先飞的橘猫5 小时前
C 扩展开发指南:从 Lua 到 skynet 的完整链路
c语言·lua
mxwin16 小时前
Unity Shader 光线追踪原理与实战案例
unity·游戏引擎
地狱为王1 天前
Unity使用DPDFNet实现实时语音增强(降噪)
unity·语音增强·降噪·dpdfnet
平行云PVT1 天前
国产信创实时云渲染解决方案:如何实现数字孪生与三维应用云化部署?
unity·webrtc·unreal engine·实时云渲染·国产信创·摩尔线程·砺算科技
夏炎黄1 天前
Terrain地形剪裁
unity
小贺儿开发1 天前
DeepSeek + Codex + MCP:Unity 游戏开发实测
科技·游戏·unity·ai·程序员·编程·deepseek
新的瑞拉公主1 天前
Cocos plist 粒子一键导入 Unity:Editor 工具实现与参数映射
unity·游戏开发·cocos2d-x·粒子系统·editor工具
淡海水1 天前
03-02-架构篇-Boehm GC架构解析
unity·架构·c#·gc·boehm
xcLeigh2 天前
Unity基础:Instantiate实例化——在运行时动态创建游戏物体
游戏·unity·游戏引擎·教程·instantiate
贾宝玉的玉宝贾2 天前
FreeSWITCH 简单图形化界面 70 - 监听/密语的lua脚本
开发语言·junit·lua·voip·freeswitch·sip·ippbx