JoyJay
JoyJay
就是继承了LuaActor的蓝图里添加了CapsuleComponent组件,同时还有USkeletalMeshComponent也一样,OnBeginCursorOver都是是nil,OnBeginCursorOver是定义在父类UPrimitiveComponent里的委托,是Public且带反射UPROPERTY的,不仅是我们的项目拿不到OnBeginCursorOver,我在里面的Demo里也拿不到。
C++里的Cast是不行吧,C++的Cast本身是一个泛型函数,开lua接口要实例化一个类型,lua最后得到的还是一个Parent指针,事实上我想要派生类的对象。
tolua也是一种能lua和C++交互的方案,他们提供了Cast的接口。FindRow这个泛型函数和SpawnActor不一样,它内部是uint8指针用reinterpret_cast强转到目标类型的,我验证后也发现slua的确能从以基类指针返回出派生类的指针给lua,但FindRow却是原始的uint8指针强转的,根本不知道是哪个派生类,所以考虑lua是不是该提供一个Cast接口。 至于大佬提到的特例化一个,一方面游戏里的配置表结构很多,已经频繁修改,而且不一定是C++里的数据结构,还有策划自己配的蓝图的UStruct,特例化还是个下下策吧? 而且我也想过试试特例化,但在插件中include自己定义Struct是查找不到目录,然后我转向在UGameInstance的Init里导出FindRow函数,却编译不通过,不知道问题在哪。
好的,感谢大佬,本来我想抄一下tolua的实现方式,但发现和tolua的耦合性太多,还是官方能支持一下最好。
 在UGameInstance的Init里导出函数,编译通不过,什么原因呢?
严重性 代码 说明 项目 文件 行 禁止显示状态 错误(活动) E0864 LuaCppBinding 不是模板 democpp D:\Download\sluaunreal-master\sluaunreal-master\Source\democpp\MyGameInstance.cpp 63
导出函数需要在命名空间NS_SLUA下啊,好吧
> > > > 你的这个需求没办法直接写一个通用函数搞定,你可以考虑自己写一个特例化导出函数实现FTableRowbase的转换为你需要的类型,FTableRowbase(包括FXxxx)的类型都没有反射信息,不支持动态的cast行为。 > > 你提到的tolua是支持unity的吧?c#有很好的反射支持,所以很容易实现这个特性。 > > 大部分有USTRUCT标记的结构体也是有反射信息的,包括FTableRowbase 大佬有实现Cast的思路?UStruct和UClass里都有UProperty和UFunction,但都要知道具体名字和类型才能还原对象的数据,FindPropertyByName要知道成员名字,ContainerPtrToValuePtr是模板函数要知道成员类型。
那我如果想像使用ALuaActor一样,让lua的table继承C++类,可以仿ALuaActor也定义一个Lua用的类?