c++定义USTRUCT给lua使用,在C++中通过RPC调用lua代码时报错
yfcyt opened this issue · comments
谢谢大佬的回复!
是大佬截图的地方报的错,堆栈信息涉及一些商业隐私,不太方便截上来,我完整的描述一下我的情景:
我用的版本是:sluaunreal-2.1.2
我想要定义一个UStruct结构体FPlayerData,从C++传递(const TArray&)到Lua中,想在lua中访问从C++传递过来的FPlayerData数组
1.定义FPlayerData
USTRUCT(BlueprintType)
struct FPlayerData
{
GENERATED_BODY()
public:
UPROPERTY()
FString PlayerName;
UPROPERTY()
FString PlayerId;
};
namespace NS_SLUA
{
DefTypeName(FPlayerData);
DefDeduceType(FPlayerData, Struct);
}
2.定义一个PlayerController,提供一个服务端调用客户端执行的RPC函数
UCLASS()
class UNREALPROJ_API AXXXPlayerController : public APlayerController
{
//调用Lua代码
template<class ...ARGS>
void CallLuaFunc(const char* FuncName, ARGS&& ...args);
//将数据同步到客户端
UFUNCTION(Client, Reliable, Category = "XXXX")
void ClientUpdatePlayer(const TArray<FPlayerData>& PlayerDatas);
}
void AXXXPlayerController::ClientUpdatePlayer_Implementation(const TArray& PlayerDatas)
{
CallLuaFunc("UpdatePlayer", PlayerDatas);
}
template<class ...ARGS>
void AXXXPlayerController::CallLuaFunc(const char* FuncName, ARGS && ...args)
{
auto LuaWidget = Cast(HUDWidget);
if (LuaWidget)
{
auto Self = LuaWidget->GetSelfTable();
if (Self.isValid()) Self.callField(FuncName, Self, std::forward(args)...);
}
}
代码调用过程:
在Server端通过ClientUpdatePlayer将const TArray& PlayerDatas传递到ClientClientUpdatePlayer_Implementation
最终将PlayerDatas通过callField方法传递到了Lua的UpdatePlayer方法中
发现在Lua中无法使用PlayerDatas数据,并且报上面的错误日志
请问一下,应该如何正确的传递自定义的USTRUCT并通过const TArray& 传递到lua层?
OK,我明天抽空构造一下现场看看
OK,我明天抽空构造一下现场看看
好的,谢谢大佬