Unreal Engine内嵌插件WebBrowser从HTML页面到Blueprint通讯
- 问题
- 解决办法
- 将引擎内插件拷贝到工程目录下
- 修改插件代码
- 蓝图接口使用
问题
Unreal Engine内嵌WebBrowser插件可以通过调用ExecuteJavascript接口执行js代码,但无法从JS调用Blueprint蓝图函数
解决办法
修改内嵌WebBrowser插件代码
将引擎内插件拷贝到工程目录下
Unreal Engine修改插件很简单:从UE安装目录下找到插件对应的源代码,将整个源代码目录拷贝到项目下Plugins目录(如果不存在则新建)下即可。当项目目录下Plugins目录下的插件和安装程序自带插件同名时,优先使用项目下Plugin是目录下插件代码。
将D:\Program Files\Epic Games\UE_5.2\Engine\Plugins\Runtime下WebBrowserWidget
整体拷贝到项目的Plugins目录下
注意:要从工程的Unreal Engine对应版本的安装程序拷贝插件代码
修改插件代码
编辑[project path]\Plugins\WebBrowserWidget\Source\WebBrowserWidget\Public\WebBrowser.h
增加UFUNCTION蓝图接口函数
UFUNCTION(BlueprintCallable, Category = "Web Browser")
void BindUObject(const FString& Name, UObject* Object, bool bIsPermanent);
编辑[project path]\Plugins\WebBrowserWidget\Source\WebBrowserWidget\Private\WebBrowser.cpp
增加蓝图接口实现函数
void UWebBrowser::BindUObject(const FString &Name, UObject* Object, bool bIsPermanent)
{
if (WebBrowserWidget.IsValid())
{
WebBrowserWidget->BindUObject(Name, Object, bIsPermanent);
}
}
蓝图接口使用
打开uproject项目,进入插件选项,激活Web Browser插件,关闭项目
重新编译C++工程
再次打开uproject项目
创建或者打开一个User Widget,添加WebBrowser组件
WebBrowser组件已经有我们自定义的BindUObject蓝图接口了
在初始化时调用BindUObject蓝图函数
在HTML页面中JS调用绑定对象函数,调用规则为:window.ue.Name.FuinctionName(param_string)
if (null != window.ue && null != window.ue.player) {
window.ue.player.notify(JSON.stringify(json));
}
在BindUObject中指定的Object蓝图类中实现FunctionName函数