找回密码
 立即注册
查看: 278|回复: 1

在Unreal Engine中使用Python开发引擎端流程工具-(一 ...

[复制链接]
发表于 2022-9-13 07:31 | 显示全部楼层 |阅读模式
这里开一个新坑,主要分为两个部分,一个是使用Python开发UE工具基本的教学,一个是对开发过程中遇到的一些问题的记录。
目前网上关于Python开发UE引擎工具的帖子不算很多,这里会把自己在实习期间解决问题的一些思路记录下来,一是为了降低学习的门槛,二是为了将自己踩坑的经验分享出来。
这个系列应该比较适合于流程向以及工具向的TA同学,负责具体美术流程(比如说特效、动画、场景等等)的TA同学也可以使用Python来加快负责管线的效率;当然客户端同学也很大概率可以用得上,因为Python开发确实比C++开发的迭代效率要快很多(指不用等编译);美术的同学如果想要自己制作工具,也是可以学习的!
在基本教学部分大概会分享以下部分的内容(这个部分可能会更新的比较慢一些因为在准备秋招):

  • 学习路线参考
  • 认识Unreal Python API库
  • 获取Content Browser中的资产以及场景中的内容
  • 对材质的操作
  • 对静态网格体的操作
  • 对场景中Actor的操作
  • 对资产进行管理
  • 通过C++扩充Python函数库
  • 工具开发的一般性思路
  •   还在构思捏···
除此之外还会分享一些在开发过程中遇到的小问题,可能会开一个新的专栏,这个部分就会写的更快一些,因为比较零散。
好的,废话不多说,进入学习路线篇的正文部分
<hr/>为什么要制作引擎端工具?

游戏工业化是目前国内外游戏开发的一大趋势;类比于有着规范流程的传统机加工行业,游戏流程的规范化和资源把控是游戏工业化的必经之路;而游戏工业化的一大落脚点,就是完备的工具链。为了构建完备的工具链,对游戏开发全流程的了解和对美术资源生产全流程的把控是十分必要的。(说的有点太装了)
游戏引擎本身就是一个巨大的工具集。作为所有DCC所生产的美术资源的处理和展现的终端,引擎也需要根据项目的需求进行进一步的扩充。
在引擎本身所暴露的接口的基础上:

  • 许多重复的操作可以被大批量的处理(批处理,例如批量导入和批量修改等)
  • 需要仔细核对的繁杂的人工操作可以被标准化自动化(流程控制,例如对新导入资产的贴图、材质、LOD、碰撞体等进行处理)
  • 项目中存在问题的资产可以被自动检查(规范管理,例如标记命名规范、路径规范、性能规范不达标的资产和场景对象)
  • 等等
为了达到在引擎端管理资产和加快效率,提升游戏制作工业化水平的目的,进行引擎工具链的开发是十分必要的,而Unreal Engine(虚幻引擎)为我们提供了一个便于使用的可以快速迭代的工具开发接口,那就是Unreal Python API。


个人学习路线分享

我个人在学习时大致遵循了以下的学习路线,供大家参考:
1. Python基础:Python教程 - 廖雪峰的官方网站 (liaoxuefeng.com)
2. Python in UE 环境搭建:用VSCode调试Unreal Python - 知乎 (zhihu.com)
3. Python in UE 官方文档:使用Python脚本化运行编辑器 | 虚幻引擎文档 (unrealengine.com)
4. Python in UE 官方API参考:
Unreal Python API Documentation — Unreal Python 4.27 (Experimental) documentation (unrealengine.com)
5. 相关视频教程:
①「中英字幕」Udemy - 用于UE编辑器工具脚本的Python API学习_哔哩哔哩_bilibili
②Python in UE4 [完]_哔哩哔哩_bilibili
6. 相关源码参考:
①GitHub - mamoniem/UnrealEditorPythonScripts: Some of my personal scripts i made to use for my own projects, but free of charge to be used for any project and any purpose as long as it is not violating the LICENSE file or the Unreal Engine EULA.
②GitHub - FXTD-ODYSSEY/Unreal-PyToolkit: Integrate Python Qt Framework into UE4
首先,如果没有Python开发基础,或者很长时间没有接触过Python开发的话,可以先看廖老师的教程,进行快速的入门。在有Python基础之后,就可以尝试搭建开发环境了;我个人比较推荐使用VS Code,相较于PyCharm,VS Code体量小、提示清晰、UE端也可以打断点,个人用起来比较习惯。如果是Jet Brains死忠粉的话,网上也有很多配置教程可以搜到,官方文档里也有相关资料,可以进行参考。
在具体学习时,可以先看一下官方文档和Udemy的教学视频,入门友好,对简单的轮子复现一下可以对整个API的框架有一个基本的认知。如果想要了解如何配合C++进行API扩充和定制的,就可以看第②个视频,比较深入,节奏比较快,适合对UE C++框架有一定了解的同学快速学习上手。
同时,也可以参考Github上的一些源码,我这里选择的两个,第一个是Udemy视频的配套资料。第二个是一个比较全面系统的框架,不仅有C++的扩充,还有一些在引擎工具端加载Python包的方法(比如PyQt和PySide,不同于在Python中安装包,而是直接放在工具中可以被引擎直接加载使用,但这样在VS Code中会失去引用)。
工具开发的两个问题

相信通过以上内容的学习,开发一些具体的功能和完成艺术家的零散需求就不成问题了。但还存在两个问题:

  • 没有UI,用户不友好;
  • 只是实现功能,代码可能需要重构;
首先我们来解决第一个问题,UI可以分为界面设计代码实现两个部分。关于界面设计,我们可以先站在艺术家的角度去思考,他们平常是怎么做这些工作的,哪些部分可以被合并,可以定制出哪几种配置,最好我们可以先动手实现一下,再去制作相关的工具界面,界面的顺序最好可以遵循流程的线性思维,比如从上到下,从左到右等等,比较符合一般的使用思路,在设计完成后,可以去和具体负责的美术同学讨论并细化。
关于代码实现,官方比较推荐的方法是使用Qt作为UI框架,相关的一些资料我放到下面:
【界面】使用QT designer、python搭建界面程序_weiquan fan的博客
python 之 Qt Designer工具的使用方法_zhaocs2019的博客
Qt各个类之间继承关系_屁小猪的博客
Qt Modules - Qt for Python
Slate控件是更适合UE的界面开发手段,Github上也有相关的库可以安装,但是维护停止的比较久了,不知道Epic后面会不会给Unreal Python加上界面开发组件。这里是相关的参考链接:
GitHub - 20tab/UnrealEnginePython: Embed Python in Unreal Engine 4
第二个问题,就是软件开发逃不过的一个议题,软件架构
工具开发和其他的软件开发一样,也需要减少冗余的代码,让工具具有可扩充性,具有面向对象的特性。
这就需要工具开发者需要进行基本功的修炼,对数据结构和算法的设计、软件工程、重构方法、设计模式的思想都具有一定的认识。构建常用算法的函数库,设计针对具体需求的可复用的数据结构,在工具设计时使用合适的设计模式减少代码重复度,提升可扩充性,提升代码的可读性,提升工具开发的效率。这是成为优秀工具TA的一条必经之路(个人看法,当然最基本的功能实现要做好)。
对于刚入门的同学,可以不用特别注意设计模式,主要还是先以功能实现为主,在实现功能后再对代码进行复盘和重构也不迟。

以上就是本次分享的内容啦,由于个人水平有限,认识有限,欢迎大佬们指出问题,提出观点,广泛交流嘿嘿。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2022-9-13 07:39 | 显示全部楼层
我超,佬![可怜]
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-7-2 08:56 , Processed in 0.094510 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表