请问有没有什么方法实现类似UnLuaInterface的效果,既蓝图实例的生命周期去控制一个脚本对象? #1214
Replies: 8 comments 11 replies
-
UnLuaInterface其实就起一个作用,配置一个字符串形式的lua模块名。 |
Beta Was this translation helpful? Give feedback.
-
其次这种是对业务代码的侵入。 |
Beta Was this translation helpful? Give feedback.
-
提供这功能当然及其简单 ps,用一项技术就应按那项技术的思维方式来思考。有时你觉得的不便,只是你的思维方式错了。 |
Beta Was this translation helpful? Give feedback.
-
对静态语言也有一些办法,比如通过标记之类导出一个字符串的工厂函数。 |
Beta Was this translation helpful? Give feedback.
-
不明白你说的字符串的工厂函数是啥意思?我说的静态类型检查,是编译期的事情,而且不仅仅是检查个类型名字,还有接口是否匹配,比如你蓝图定义了foo(a:number):void接口,你的ts里头定义的是foo(a:string):void会报错,你是希望在运行时来一次和编译差不多开销的静态类型检查么。 你要做类似的事情完全可以在现有puerts提供的功能实现,搞些公用基类即可。 |
Beta Was this translation helpful? Give feedback.
-
例如创建了一个WBP的蓝图,其中放置了一些UI控件并且导出成变量。这个时候生成的ts定义文件中就会有这个BP的类型检查的定义了。 但如果这个WBP并不是由脚本直接创建,而是ListView或者嵌套在其他UI里面的一个子控件的时候,就希望对应的ts类能自动的创建出来。例如UnLuaInterface制定的脚本模块,里面能直接访问WBP导出的各个变量。 可能对UE和puerts都并不是太熟悉,想请教一下如果希望一个WBP或者Actor在实例化的时候,能伴随创建一个ts类的对象,同时把这个BP对象传递给ts,因为BP对应自动也有ts的签名,所以BP本身的变量和函数应该都能访问到。如果这样的话,公用基类之类的怎么组织会好一点呢? |
Beta Was this translation helpful? Give feedback.
-
不介意没静态类型校验丢失的话。实现同等功能就几十行代码: |
Beta Was this translation helpful? Give feedback.
-
补充一下,这种方式不太建议,实际使用中,反射调用Interface在UObject创建回调中不可用。 某项目的自动mixin的实践是:是需要用到的类,比如Actor,搞个c++基类,覆盖OnCreate,在OnCreate自动mixin,然后蓝图需要继承Actor的都改为继承这个。 |
Beta Was this translation helpful? Give feedback.
-
引擎对象控制脚本对象的生命周期是一个挺好用的功能,但我看了继承引擎类,和Mixin似乎都做不到。
能否有类似Unlua中UnLuaInterface的能力,蓝图可以实现这个接口,返回脚本上的类名,会自动mixin到这个对象?
Beta Was this translation helpful? Give feedback.
All reactions