使用UnrealEngine主要有两种方式:1.通过EpicGameLauncher安装 2. 通过源代码自行编译。
1. 通过EpicGameLauncher安装时,安装的版本和安装位置记录在注册表的这个位置:
HKEY_LOCAL_MACHINE\SOFTWARE\EpicGames\Unreal Engine
每个版本都会有一个子目录,对应版本的安装路径在这个子目录的InstalledDirectory属性中:
2. 通过源代码安装
如果你的项目是通过源代码编译的引擎来操作的,那么在uproject文件中会保存该引擎的guid,比如:
"FileVersion": 3,
"EngineAssociation": "{9453D6AB-4C8B-9CBE-4B26-8AA51A358E17}",
"Category": "Samples",
这个就是源代码引擎的guid,可以通过这个guid找到源代码引擎所在位置。这些源代码引擎的注册表位置是:
HKEY_CURRENT_USER\Software\Epic Games\Unreal Engine\Builds
这个Builds目录下的键值就是以这些GUID作为名词,如:
注意键名词是有大括号的哈,查找用的python脚本:
import os import sys import json import winreg import argparse import redef find_ue_path(project_path):"""查找 Unreal Engine 路径1. 从 .uproject 文件读取 EngineAssociation2. 如果是 GUID 格式,尝试从注册表查找3. 如果是版本号格式,尝试构造默认路径"""if not project_path or not os.path.exists(project_path):return Nonetry:with open(project_path, 'r') as f:project_data = json.load(f)engine_association = project_data.get("EngineAssociation")if not engine_association:return None# 检查是否是 GUID 格式(包含大括号)if isinstance(engine_association, str) and re.match(r"^\{[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\}$", engine_association):# 在注册表中查找 GUIDfor hive in [winreg.HKEY_CURRENT_USER, winreg.HKEY_LOCAL_MACHINE]:try:key_path = r"Software\Epic Games\Unreal Engine\Builds"with winreg.OpenKey(hive, key_path) as key:try:path = winreg.QueryValueEx(key, engine_association)[0]if os.path.exists(path):return pathexcept:passexcept:pass# 尝试作为版本号处理if isinstance(engine_association, str):# 尝试在注册表中查找版本号for hive in [winreg.HKEY_LOCAL_MACHINE]:try:key_path = r"SOFTWARE\EpicGames\Unreal Engine"with winreg.OpenKey(hive, key_path) as key:try:# 打开版本号子键 with winreg.OpenKey(key, engine_association) as version_key:path = winreg.QueryValueEx(version_key, "InstalledDirectory")[0]if os.path.exists(path):return pathexcept:passexcept:passexcept Exception as e:print(f"处理项目文件时出错: {e}", file=sys.stderr)return Nonedef main():parser = argparse.ArgumentParser(description='查找 Unreal Engine 路径')parser.add_argument('--project', help='.uproject 文件路径')args = parser.parse_args()ue_path = find_ue_path(args.project)if ue_path:print(ue_path)return 0else:print("找不到 Unreal Engine 路径", file=sys.stderr)return 1if __name__ == "__main__":sys.exit(main())
bodong@BODONG-PC12 MINGW64 /g/TMTechDemos (master|SPARSE) $ python ./find_ue_path.py --project ./TMTechDemos.uproject I:/UnrealEngine-EpicGamesbodong@BODONG-PC12 MINGW64 /g/TMTechDemos (master|SPARSE) $ python ./find_ue_path.py --project 'g:/UnrealProjects/TPSDemo/TPSDemo.uproject' C:\Program Files\Epic Games\UE_5.4