[UE] 自动注册蓝图和脚本mixin的一个方案
llint opened this issue · comments
detail | 详细描述
TypeScript/EntryPoint.ts
TypeScript/ScriptBindings/Game/Blueprints/B_PlayerController_C.ts
在UE5中,如果想让PuerTS呈现出和UnLua类似的一个蓝图一个脚本绑定方式,并且可以在PuerTS下实现自动注册,可以在TypeScript根目录下创建上面EntryPoint.ts文件,然后将所有需要自动绑定mixin的脚本按蓝图的目录组织形式放到ScriptBindings目录下面。然后将TsGameInstance.cpp里面的JsEnv->Start的第一个参数改成“EntryPoint”
,那么启动之后,该脚本会自动的将ScriptBindings目录下面的所有脚本文件基于路径和文件名规范(比如:B_PlayerController_C.ts
)的方式,自动将蓝图类和这个ts类做mixin - 脚本的路径会被用来决定蓝图的asset path,因此这个路径需要和蓝图资产的路径对应。
EntryPoint.ts除了做mixin自动绑定,当然还可以做其他的初始化操作,但是注意 - 最终EntryPoint.ts仍然会从JsEnv.Start函数返回,UE引擎会重新获得控制权 - 所以从这种意义上来讲,任何在JsEnv->Start启动的脚本的主要用途其实就是进行脚本系统层级的注册和初始化操作。从UE引擎来讲,在运行时,真正脚本逻辑的触发其实是从C++到蓝图层再到ts层(或者UnLua的话就是Lua层)- 引擎始终是核心的驱动。
然后再搞一个自动根据蓝图生成ts模板代码的编辑器工具,这样是不是就基本和unlua的工作流一致了。