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

问题描述 投票:0回答:1

我在 Testproject1 中有 BaseEmptyScene。 BaseEmptyScene 没有任何游戏对象。这个项目和场景唯一有的是一个带有名为 bang() 的静态方法的 C# 脚本。

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

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

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

此命令打开 unity ,导入包并执行方法,效果很好。 参见 Unity 命令行参数文档

我的问题是我无法告诉 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 并从另一个外部脚本向该进程发送消息......

c# unity-game-engine
1个回答
1
投票

您需要的是 AssetPostprocessor 类,而不是您迄今为止所做的(旁注:您不需要在项目中的某个地方为静态方法提供空场景)。

您最需要的是 OnPostprocessModel 方法(您也可以在此链接上找到示例代码)。
至于你的“bang”方法,你可以做这样简单的事情:

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

您不需要场景或任何东西,因为它是一个带有静态方法的静态类;您可以从任何您想要的脚本中调用

Bang
(包括您的
AssetPostprocessor
的实现)

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.