Unreal Engine 项目增量同步工具
- python使用 tkinter 做的 GUI 界面。
- 精确过滤和搬运那 6 个 UE 核心文件夹(Config, Content, Plugins, Source, Binaries, Build)。
- 用 subprocess 调用 robocopy 的 8 线程加速逻辑(/MT:8)以及对 .uproject 文件的拷贝。
import os
import shutil
import subprocess
import tkinter as tk
from tkinter import filedialog, messagebox
def fast_copy(src_dir, dest_dir, log_text):
if not src_dir or not dest_dir:
messagebox.showwarning("错误", "请先选择源路径和目标路径!")
return
try:
if not os.path.exists(dest_dir):
os.makedirs(dest_dir)
# 针对 UE 项目的核心文件夹
folders = ["Config", "Content", "Plugins", "Source", "Binaries", "Build"]
for folder in folders:
src = os.path.join(src_dir, folder)
dst = os.path.join(dest_dir, folder)
if os.path.exists(src):
log_text.insert(tk.END, f"正在同步: {folder}...\n")
log_text.see(tk.END)
log_text.update()
# 使用 Windows 的 robocopy 多线程提高速度(/MT:8 代表8线程)
subprocess.run(['robocopy', src, dst, '/E', '/MT:8', '/R:0', '/W:0'], shell=True)
# 拷贝 .uproject 文件
for file in os.listdir(src_dir):
if file.endswith(".uproject"):
shutil.copy2(os.path.join(src_dir, file), os.path.join(dest_dir, file))
break
log_text.insert(tk.END, "🎉 完成!任务已结束。\n")
messagebox.showinfo("成功", "项目搬运完成!")
except Exception as e:
messagebox.showerror("失败", f"发生错误: {str(e)}")
# UI 界面部分
def start_gui():
root = tk.Tk()
root.title("UE 项目增量搬运工具 v1.0")
root.geometry("500x400")
# 源路径
tk.Label(root, text="UE 工程路径 (Source):").pack(pady=5)
src_var = tk.StringVar()
tk.Entry(root, textvariable=src_var, width=60).pack(padx=20)
tk.Button(root, text="选择源目录", command=lambda: src_var.set(filedialog.askdirectory())).pack(pady=5)
# 目标路径
tk.Label(root, text="导出目标路径 (Destination):").pack(pady=5)
dest_var = tk.StringVar()
tk.Entry(root, textvariable=dest_var, width=60).pack(padx=20)
tk.Button(root, text="选择目标目录", command=lambda: dest_var.set(filedialog.askdirectory())).pack(pady=5)
# 日志显示框
tk.Label(root, text="执行日志:").pack(pady=5)
log_text = tk.Text(root, height=8, width=60)
log_text.pack(padx=20)
# 执行按钮
tk.Button(root, text="🚀 开始搬运", bg="#4CAF50", fg="white", font=("Arial", 12, "bold"),
command=lambda: fast_copy(src_var.get(), dest_var.get(), log_text)).pack(pady=20)
root.mainloop()
if __name__ == "__main__":
start_gui()
💡 附:如何把这个脚本打包成电脑软件(.exe)
# 在终端中运行这行命令,可以将 Python 脚本打包成不需要安装环境的独立 exe 文件
# --noconsole: 运行时隐藏黑色的 CMD 命令行窗口
# --onefile: 把所有依赖打包进单独的一个 exe 文件
pyinstaller --noconsole --onefile --name "UE_Project_Mover" your_script_name.py
温馨提示:因为代码中用到了 Windows 的 robocopy 指令来加速 UE 项目中巨量小文件的传输,所以这个打包出来的 .exe 软件目前只能在 Windows 系统上完美运行哦!这刚好符合绝大多数 UE 开发者(游戏开发、地景设计等)的环境。