前言

  最近在虚幻商城看到一个简单而好用的免费小插件 Restart Editor
  经过之前的进阶菜单折腾之后,我觉得 Python 实现也不难。
  所以我就用 Python 来进行扩展了。

Python 脚本重启引擎

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# -*- coding: utf-8 -*-
"""
自动重启引擎
"""

from __future__ import division
from __future__ import print_function
from __future__ import absolute_import

__author__ = 'timmyliang'
__email__ = '820472580@qq.com'
__date__ = '2020-09-18 15:53:10'

import sys
import subprocess
import unreal
from UE_Util import error_log, toast

editor_util = unreal.EditorLoadingAndSavingUtils()
sys_lib = unreal.SystemLibrary()
paths = unreal.Paths()

@error_log
def main():
# NOTE 保存对象
check = editor_util.save_dirty_packages_with_dialog(True,True)
if not check:
toast(u"保存失败")
return

uproject = paths.get_project_file_path()
editor = sys.executable

# NOTE 启动当前引擎
subprocess.Popen([editor,uproject,'-skipcompile'],shell=True)

# NOTE 退出引擎
sys_lib.quit_editor()


if __name__ == "__main__":
main()

  重启引擎之前先判断是否有资源需要进行报错操作,如果保存失败则跳过重启步骤
  然后获取引擎路径,这里通过 sys.executable 可以获取到 UE4Editor.exe
  继而通过 subprocess 外调命令行启动一个新的虚幻。
  接着就是退出当前虚幻。

  其实脚本并不复杂,我也看了 C++ 插件的调用方式。
  C++ API 里面直接就有一个 restart 相关的函数,调用就完事了~

配置

  结合之前弄好的菜单扩展,可以通过配置 json 文件实现 C++ 插件的位置配置。
  唯一比较遗憾的是 Python 无法添加自定义的图标。
  虽然有 ToolMenuEntry 类里面有 setIcon 的 API ,但是 Python 暂时还无法扩充自定义的 style_set_name
  所以图标只能设置现有的引擎 style_set_name