From 18b40d1f67c04796ba919cee6f4ec1984f69045b Mon Sep 17 00:00:00 2001 From: ud18010 Date: Wed, 15 Jul 2026 19:55:20 +0800 Subject: [PATCH] =?UTF-8?q?ModelTranslator:=20=E8=8F=9C=E5=8D=95=E8=BD=AC?= =?UTF-8?q?=E6=8D=A2=E5=8F=96=E6=B6=88=E6=97=B6=E7=94=A8=20taskkill=20?= =?UTF-8?q?=E6=9D=80=E8=BF=9B=E7=A8=8B=E6=A0=91=EF=BC=8Cpython=20-u=20?= =?UTF-8?q?=E5=AE=9E=E6=97=B6=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 --- Client/Assets/Editor/ModelTranslatorMenu.cs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Client/Assets/Editor/ModelTranslatorMenu.cs b/Client/Assets/Editor/ModelTranslatorMenu.cs index b47de9e5..0e7f6079 100644 --- a/Client/Assets/Editor/ModelTranslatorMenu.cs +++ b/Client/Assets/Editor/ModelTranslatorMenu.cs @@ -60,6 +60,8 @@ namespace XGame.Editor { EditorApplication.update -= OnUpdate; SavePrefs(); + if (_proc != null) + UnityEngine.Debug.LogWarning("[模型转换] 窗口关闭或脚本重编译中止了正在进行的转换"); KillProc(); } @@ -177,7 +179,7 @@ namespace XGame.Editor { FileName = _pythonPath, Arguments = string.Format( - "\"{0}\" \"{1}\" -o \"{2}\" --max-size {3} --blender \"{4}\"", + "-u \"{0}\" \"{1}\" -o \"{2}\" --max-size {3} --blender \"{4}\"", script, _fbxPath, Path.Combine(RepoRoot, outRel), _maxSize, _blenderPath), WorkingDirectory = RepoRoot, UseShellExecute = false, @@ -267,10 +269,17 @@ namespace XGame.Editor private void KillProc() { if (_proc == null) return; - try { if (!_proc.HasExited) _proc.Kill(); } + try + { + // 用 taskkill /T 连 blender 子进程一起杀(Mono BCL 无 Kill(tree) 重载) + if (!_proc.HasExited) + Process.Start(new ProcessStartInfo("taskkill", "/PID " + _proc.Id + " /T /F") + { UseShellExecute = false, CreateNoWindow = true }); + } catch { /* 进程可能刚好退出 */ } _proc.Dispose(); _proc = null; + lock (_lock) _pending.Clear(); // 丢弃残留输出,避免插在 [已取消] 之后 } } }