跳转至

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 开发者(游戏开发、地景设计等)的环境。