-
Notifications
You must be signed in to change notification settings - Fork 78
Lua Register
woctordho edited this page Apr 25, 2024
·
3 revisions
要把C#接口绑定到Lua,以DialogueBoxController
为例:
- 把代码放在
Assets/Nova/Sources/
文件夹下,并且把class(或者struct、enum)写在namespace Nova中- TODO:支持绑定其他namespace下的代码
- 在class上面加上
[ExportCustomType]
attribute- 实现详见
CustomSettings.customTypeList
- 实现详见
- 在Unity Editor的上面的菜单中运行
Lua -> Clear Wrap Files
,然后按提示重新生成Lua接口- 这个class中所有public的constant、field、property和method都会生成对应的Lua接口
- 如果某个field、property或method的输入或输出的类型不是C#内置的类型,也不是自定义的标了
[ExportCustomType]
的类型,而是Unity提供的类型等等,则需要在CustomSettings._customTypeList
中定义
- 在class的
Awake
中写上LuaRuntime.Instance.BindObject("dialogueBoxController", this);
,之后在C#中创建实例时,就会把这个C# object绑定到名字叫dialogueBoxController
的Lua object- 为了避免太多的全局变量,这个Lua object默认放在
__Nova
这个table中,所以在Lua中要用__Nova.dialogueBoxController
来获取(详见dialogue_box.lua
) - 有些更加常用的class(如
SpriteController
)为了方便,写了LuaRuntime.Instance.BindObject(luaGlobalName, this, "_G");
,就是把Lua object作为全局变量(放在_G
table中),在Lua中可以直接写bg
来获取这个Lua object,而不用写__Nova.bg
- 为了避免太多的全局变量,这个Lua object默认放在
- 在Lua中使用这个object
- 用
__Nova.dialogueBoxController.rect
来调用property - 用
__Nova.dialogueBoxController:SetTextScroll(value)
来调用method- 注意:Lua有一个坑人的地方,调用method要用
:
而不是.
,因为这是一种特殊的函数调用,将object本身作为函数的第一个参数
- 注意:Lua有一个坑人的地方,调用method要用
- 用
- 在Lua中使用其他东西
- 用
Nova.DialogueState.State.Normal
来获取enum的值- 注意:这是在创建Lua接口时就生成的静态的东西,而不是在创建实例时生成的动态的东西,放在
Nova
table中,而不是__Nova
- 注意:这是在创建Lua接口时就生成的静态的东西,而不是在创建实例时生成的动态的东西,放在
- 用
Nova.AssetLoader.RenderTargetPrefix
和Nova.AssetLoader.LoadRenderTarget(rt_name)
来调用static class的property和method(详见transition.lua
) - 用
typeof(Nova.CameraController)
来获取类型
- 用
- 自定义的函数一般写在
animation_presets.lua
中,如果很多的话可以新建一个Lua文件- 新建的Lua文件需要在
requires.lua
中引用,才能被Nova加载
- 新建的Lua文件需要在