UE4嵌入Python运行PyQt

13 篇文章 1 订阅
12 篇文章 0 订阅

相关链接

UE4Python专栏

一个大佬写的插件

大佬插件文档

如何UE4加载PyQt不崩溃

上文说了怎么用UE4嵌入Python,成功以后发现一个问题,使用PyQt时候直接崩溃,尝试多线程、多进程无果以后找到了上述大佬写的插件。

众所周知,网上能找到的都是虚幻自己带的python插件,但是这个插件不能被打包进游戏里面,如果想在游戏里面运行python就需要自己写。

之前有个第三方的UnrealEnginePython插件地址,但是由于长时间停止更新,新版本已经编译不过了,但仍然有很高的参考价值。

根据第四个链接,可以看到虚幻官方插件是如何做的,简单来说就是把PyQt自己的句柄传递给UE4让其代为显示,这样才不会引起崩溃。

这就给我们一个思路,可以查看上述大佬的代码,也是用的这个原理:

 

因为我们要自己写插件,所以需要参考官方的这个库是怎么实现的,正好了解到C++如何暴露库给Python(方法在前一期文字)由于unreal这个库是运行时动态加载的,我们不能直接看到py文件,所以需要去官方python插件里面找这个库的实现:

UE_4.26\Engine\Plugins\Experimental\PythonScriptPlugin\Source\PythonScriptPlugin

我们用vscode快速搜索这个插件,可以找到以下代码:

看到PyMethodDef PySlateMethods[]我们就很眼熟了,这正是C++嵌入Python的入口,里面包含了很多函数,其中高亮部分就是上述PyQt使用的核心部分。

具体的代码留到下一期再分析,通过学习官方的这个Python插件,能够了解很多功能是如何实现的。

拓展资料

UE4反射论述了Python是怎么调用到UE4蓝图的

经过查看官方UE4Python插件我得出结论

unreal.parent_external_window_to_slate()可以将Qt的窗口句柄设置到UE4的Slate句柄上,具体步骤如下:

在插件中找到PySlate.cpp根据上图找到这个函数的真正位置

重点是这里,SetWindowLongPtr,我们百度搜索一下这个win函数

可以看到GWL_HWNDPARENT的含义

补充:

可以在UE4里面直接调用Python的EXE,创建独立的PyQt进程,然后与UE4的python进行socket通讯,这样也能实现功能,而且比较容易实现。

之前测试凡是导入PyQt库的话直接会引起引擎崩溃,暂时找不到解决办法,只能先这样解决了。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值