我在 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 并从另一个外部脚本向该进程发送消息......
您需要的是 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
的实现)
希望这有帮助!