ue4 fgui的事件绑定 到unlua里面要怎么写

    UUIPackage::AddPackage(TEXT("/Game/UI/Chat"), this);

MainView = UUIPackage::CreateObject("Chat", "Main", this)->As<UGComponent>();
MainView->MakeFullScreen();
MainView->SetParentToRoot();

List = MainView->GetChild("list")->As<UGList>();
List->SetVirtual();
List->SetItemProvider(FListItemProvider::CreateUObject(this, &UDemoChat::GetListItemResource));
List->SetItemRenderer(FListItemRenderer::CreateUObject(this, &UDemoChat::RenderListItem));

Input = MainView->GetChild("input")->As<UGTextInput>();
Input->OnSubmit.AddUniqueDynamic(this, &UDemoChat::OnSubmit);

MainView->GetChild("btnSend")->OnClick.AddUniqueDynamic(this, &UDemoChat::OnClickSendBtn);
 
UnLua代码:
	UE4.UUIPackage.AddPackageWithPath("/Game/FGUI/Basics",self)
UE4.UUIPackage.AddPackageWithPath("/Game/FGUI/Chat", self);

self.view = UE4.UUIPackage.CreateObject("Chat","Main",self)
self.view:MakeFullScreen();
self.view:SetParentToRoot();
self.view:GetChild("btnSend").OnClick:Add(self, self.OnButtonClicked)
C++ 的Demo代码如上
参考这个然后成Unlua代码(成功显示了界面,这里的self是UObject对象),首先找不到AddUniqueDynamic方法,执行会报错。然后用Add去注册监听,引擎成功执行,但是回调方法没有成功到,打断点是成功执行到了如下图的C++层。

struct TMulticastDelegateLib
{
/**
* Add a callback to the delegate. Parameters must be a UObject and a Lua function
*/
static int32 Add(lua_State *L)
{
T *Delegate = nullptr;
UObject *Object = nullptr;
const void *CallbackFunction = nullptr;
bool bSuccess = GetMulticastDelegateInfo(L, Delegate, Object, CallbackFunction);
if (!bSuccess)
{
return 0;
 
由于FGUI对于UE4这块没有Unlua的例子,只有C++的例子,在事件注册这一块一直没成功。

还望大佬 帮忙指导下

已邀请:

谷主

赞同来自:

抱歉,我也不会unlua。

walker

赞同来自:

self.ListMenu:SetItemRenderer({self.WorldContextObject, function(t, ...)
self:RenderMenu(...)
end})

Ayou001

赞同来自:

self.view:GetChild("btnSend").OnClick:Add(self, self.OnButtonClicked)
改成
local SendBtn = self.view:GetChild("btnSend")

SendBtn.OnClick:Add(SendBtn, function()
self.OnButtonClicked(self)
end
)

 

养乐多

赞同来自:

你这个 
UE4.UUIPackage.AddPackageWithPath 是魔改的函数吧 不都是 UE4.UUIPackage.AddPackage 我的FGUI导出资源 为什么没有生成:uaset 存蓝图项目,和c++项目的区别吗?

要回复问题请先登录注册