延迟 cmd -executeMethod 或从 cmd 设置活动场景

Delay cmd -executeMethod or Set Active scene from cmd

我在 Testproject1 中有 BaseEmptyScene。 BaseEmptyScene 没有任何游戏对象。这个项目和场景只有一个 c# 脚本,其中包含名为 bang() 的静态方法。

我有第二个名为 Sphere 的项目,场景名为 'Sphere'。它有基本的 GameObjects 球体和立方体,没有脚本。我去了“资产 > 导出包”并将所有内容导出到 SphereCube.unitypackage

这是我在将 SphereCube.unitypackage 导入 Testproject1 后执行方法 bang() 的命令行。

C:\Program Files\Unity\Editor>Unity.exe -projectPath SomePath\TempProj -importPackage Path\SphereCube.unitypackage -executeMethod TestClass.bang 

这个命令打开 unity ,导入包并执行方法 bang fine。 see unity command Line Argument doc

我的问题是我无法告诉 unity 在完成导入包后执行该方法。这是 bang() 的样子——目前它总是将场景数显示为 1。它应该是 2,因为导入完成后我可以在 Assets 文件夹中看到两个场景(带有 1 个脚本的空场景和导入的 SphereCube 场景)

private static void bang(){
...

        sw.WriteLine("Scene Count = " + SceneManager.sceneCount);
        sw.WriteLine("Active Scene = " + SceneManager.GetActiveScene().name + " " + SceneManager.GetActiveScene().path);

...
}

我什至无法将活动场景更改为新添加的场景,因为就统一而言,执行该方法时只有 1 个场景。

有什么方法可以在导入完成后执行该方法吗?是否有一些事件引发......比获取当前 运行 Unity PID 并从另一个外部脚本向该进程发送消息更容易......

您需要的是 AssetPostprocessor class,而不是您目前所做的(旁注:您的项目中的某个静态方法不需要空场景).

很可能您需要的是 OnPostprocessModel 方法(您也可以在此 link 上找到示例代码)。
对于你的 'bang' 方法,你可以做一些像这样简单的事情:

using UnityEngine;
public static class YourClass {
     public static void Bang(GameObject myGO) {
          //Do whatever you want with the GO you just imported
     }
}

你不需要场景或任何东西,因为它是静态的 class 和静态方法;你可以从你想要的任何脚本调用 Bang(包括你对 AssetPostprocessor 的实现)

希望对您有所帮助!