·本文为B站系列教学视频《使用 UnrealEnginPython 插件进行UE4中的Python开发》——《Day 01 初识 UnrealEnginePython》的学习笔记,UP主为腾讯游戏策划、虚幻社区贡献者 世欺子。
文章目录
本节课对基于虚幻引擎(Unreal Engine
)的 Python
集成开发插件 UnrealEnginePython
进行简要介绍,接着在虚幻引擎(Unreal Engine)5.0.3 版本中安装 UnrealEnginePython
,并为插件安装 Python
第三方库 Matplotlib
,最后对 Python
集成开发环境进行测试。
1.1 UnrealEnginePython 简介
在 Unreal Engine
中想要搭建深度学习、强化学习的开发环境,就需要使用 UE
中C++
的蓝图进行转写,操作起来比较麻烦;如果能在 UE
中 直接集成并使用 Python
开发,就会比较方便。想要实现这个目标,有两种方式:
- 一种是使用
UE
官方自带的 Python编辑器脚本插件(Python Editor Script Plugin
),官方文档为《使用Python脚本化运行虚幻编辑器》;
- 另一种就是使用本系列教学视频中的
UnrealEnginePython
插件,Github
主页 https://github.com/20tab/UnrealEnginePython。
1.1.1 UnrealEnginePython 与 Python Editor Script Plugin 对比
Python Editor Script Plugin
仅可以通过控制台调用和运行在外部IDE
编写的Python
代码,并且只可以在Editor
(编辑环境)下使用Python相关代码模块,如果想要在Runtime
中也使用,则需要对其进行dll
封装;UnrealEnginePython
内嵌了一个IDE
,我们不需要离开UE
到外部去编写Python
代码,并且在Editor
和Runtime
都可以直接使用Python相关代码模块。
1.1.2 UnrealEnginePython 的特性
摘自 UnrealEnginePython
的 Github
主页 https://github.com/20tab/UnrealEnginePython:
- 在
Unreal Engine
中(Editor & Runtime)嵌入整个Python VM
的插件。 - 轻松访问所有
UE
内部API
及其反射系统,可以使用该插件编写其他插件、自动化任务以及编写单元测试和实现游戏元素。 - 该插件会自动添加
PyActor
(对应UE
中的Actor
类)、PyPawn
(对应UE
中的Pawn
类)、PyCharacter
(对应UE
中的Character
类)以便在游戏中将Python进行“温和”(非破坏性)的集成。 - 进行二次开发。在打包项目后,也可以更改
Python
代码,可以从已经打包的游戏中构建一个全新的游戏。
(图源:《在Unreal Engine中使用Python开发引擎端流程工具-(一)学习路线篇》)
1.2 开发环境配置
本人主要使用 Unreal Engine 5.0.3
和 Visual Studio 2022
进行学习,两者的安装和配置可以参阅 Unreal Engine
官方文档 《安装虚幻引擎》 以及 《设置Visual Studio》。
1.2.1 UnrealEnginePython 的下载与安装
参阅UP主提供的开发环境配置笔记 《UE 5.0 使用 Unreal Engine Python插件进行 Runtime Python 开发》。
-
新建“第三人称游戏”工程项目
UEPython_Tutorial
,项目默认设置这里我选择 C++(也可以选择蓝图)、不含初学者内容。UnrealEnginePython
此版本要求使用C++工程来进行编译,蓝图工程则可以使用新建C++类的方式,新建任意C++类,来为项目添加C++代码。
-
前往 https://github.com/crazytuzi/UnrealEnginePython,下载
UnrealEnginePython
源代码,该版本的UnrealEnginePython
支持 UE 4.27.2 和 UE 5.0.3 。
-
下载完毕后将压缩包解压,并将文件夹
UnrealEnginePython_master
重命名为UnrealEnginePython
。
然后拷贝至UEPython_Tutorial
项目文件夹下的Plugins
目录(我没有在项目目录下看见Plugins
目录于是就自己新建了一个)
-
关闭项目
UEPython_Tutorial
并重新打开,弹出编译窗口,选择是(Y)
来对插件进行编译。
-
在
UEPython_Tutorial/Config/DefaultEngine.ini
中添加Python
源,笔者使用UE5
引擎自带的Python
源(代码如下)。[Python] Home=../../../Engine/Binaries/ThirdParty/Python3/Win64
-
使用此配置就可以考虑将
Runtime
下调用的pip
包也一并安装到引擎目录下的Python
中。-
Runtime 和 Editor
- 具体的流程架构,需要分离好Editor和Runtime Data,Editor依赖于Runtime Data,但Runtime Data不能依赖于Editor。 —— 《基于行为树的MOBA技能系统:技能系统与可视化节点技能编辑器》
- Runtime:任何编译目标都会加载该模块;Editor:只在编辑器下加载该模块;LoadingPhase:描述什么时候加载该模块,这个比较重要,依赖其他模块的模块应该在依赖模块之后加载,不然就会报错找不到对应模块。——《虚幻引擎编译系统总结》
- 《EHostType::Type》
- Editor、Development、Runtime的区别:Edit和Development是并行关系都依赖RunTime文件可以用RunTime文件下的库,但是Edit和 Development不能用Runtime下的库,Runtime与发布后的Game相关。——《UE4初学问题》
-
-
打包项目时插件会自动将
UE5
引擎自带的Python
源拷贝至打包后的Engine/Binaries/
文件夹下,无需自己再手动拷贝Python
环境。 -
此步非常关键,决定了在《使用Unreal Engine Python插件进行UE4中的Python开发》学习笔记6 打包后的项目能否正常启动。
6. 查看插件是否成功安装。在
UE
窗口的 菜单栏 选择 “编辑”,然后在弹出的下拉菜单中选择 “插件”,可以看到UnrealEnginePython_master
已经成功安装,并且 内容浏览器 的Content
目录下面多出一个Scripts
文件夹(存放使用UnrealEnginePython
内置IDE
编写的Python
脚本)。
-
1.2.2 使用 UnrealEnginePython 编写一个简单的 Python 脚本
-
在
UE
窗口的 菜单栏 中选择 “窗口”,然后在弹出的下拉菜单中点击Python Editor
打开内置的IDE
。
-
在
Python Editor
窗口工具栏上点击New
按钮新建一个Python
脚本,此时UE
窗口右下角会出现 “已检测到1项源内容文件的变更” 的提示消息框,可以勾选 “不再询问”,然后选择 “导入”,这样每次保存Python
脚本时,都会实时去更新Scripts
文件夹下的内容。
-
下面在
IDE
中写一段简单的代码进行测试:def HelloWorld(): print("Hello, World!") HelloWorld()
在
Python Editor
窗口工具栏上点击Save
按钮保存代码。在UE
窗口的 菜单栏 中选择 “窗口”,然后选择 “输出日志”,可以看到 “输出日志” 窗口出现在UE
窗口下方。
4. 点击
Python Editor
窗口工具栏的Execute
按钮执行Python
脚本,可以看到 “输出日志” 窗口打印出 “Hello, world!”。
1.2.3 为 UnrealEnginePython 安装第三方模组 Matplotlib 库
-
打开命令提示符,安装
Numpy
库和Matplotlib
库,输入命令行:C:\Users\Xavicii>d: D:\>cd D:\Epic Games\UE_5.0\Engine\Binaries\ThirdParty\Python3\Win64\ D:\Epic Games\UE_5.0\Engine\Binaries\ThirdParty\Python3\Win64\>python -m pip install numpy D:\Epic Games\UE_5.0\Engine\Binaries\ThirdParty\Python3\Win64\>python -m pip install matplotlib
注意这里的操作和教学视频中的不同:教学视频中使用的是
UE4.27
版本,并且将Matplotlib
库直接安装在UnrealEnginePython
插件的文件夹\Binaries\Win64
下。而本人使用的UE5.0.3
版本,根据UP主提供的UE 5.0
开发环境配置笔记 《UE 5.0 使用 Unreal Engine Python插件进行 Runtime Python 开发》,需要将Matplotlib
库直接安装在对应引擎版本的Python文件夹下,否则在运行后面的测试代码是会出现各种报错,比如找不到Matplotlib
库、Numpy
库import
错误等等。
-
复制 UP主提供在 http://cucvr.com/?/article/25 中的测试代码到
Python Editor
,测试代码的目的是在UE
中生成图形纹理资产,以检验Matplotlib
能否正常装载,:'''在内存中生成纹理,绘制图形,将图形数据传输到纹理内存,将其另存为资产并打开相关的编辑器''' import unreal_engine as ue # EPixelFormat defines the various pixel formats for a texture/image, we will use RGBA with 8bit per channel from unreal_engine.enums import EPixelFormat import matplotlib # set the Agg renderer as we do not need any toolkit matplotlib.use('Agg') import matplotlib.pyplot as plt # set texture/plot dimensions and dpi, ensure dpi is a float ! width = 1024 height = 1024 dpi = 72.0 # create a new figure with the specified sizes fig = plt.figure(1) fig.set_dpi(dpi) fig.set_figwidth(width/dpi) fig.set_figheight(height/dpi) # plot a simple graph with a label on the y axis plt.plot([1, 2, 3, 4]) plt.ylabel('some numbers') # draw the graph (in memory) fig.canvas.draw() # create a texture in memory (will be saved later) texture = ue.create_transient_texture(width, height, EPixelFormat.PF_R8G8B8A8) # copy pixels from matplotlib canvas to the texture as RGBA texture.texture_set_data(fig.canvas.buffer_rgba()) # save the texture texture.save_package('/Game/FirstGraphTexture') # open its editor ue.open_editor_for_asset(texture)
-
点击
Python Editor
窗口工具栏的Execute
按钮执行Python
脚本,可以看到“Texture2D_8”纹理图案生成并被保存到资产管理器中。