#unity3d #unityscript #unity5
#unityscript #unity3d
Вопрос:
У меня есть BaseEmptyScene в Testproject1. В BaseEmptyScene нет никаких игровых объектов. Единственное, что есть в этом проекте и сцене, — это скрипт на c # со статическим методом bang() .
У меня есть второй проект под названием Sphere со сценой под названием «Сфера». В нем есть базовые объекты GameObjects Sphere и Cube, без скрипта. Я пошел «Активы> Экспорт пакета» и экспортировал все в SphereCube.unitypackage
Вот моя командная строка для выполнения метода bang() после импорта SphereCube.unitypackage в Testproject1.
C:Program FilesUnityEditor>Unity.exe -projectPath SomePathTempProj -importPackage PathSphereCube.unitypackage -executeMethod TestClass.bang
Эта команда открывает unity, импортирует пакет и выполняет метод bang fine. см. Аргумент командной строки unity 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);
...
}
Я даже не могу изменить активную сцену на недавно добавленную сцену, потому что, насколько это касается unity, при выполнении метода существует только 1 сцена.
Есть ли какой-нибудь способ выполнить метод после завершения импорта? Есть ли какое-то событие, которое вызывает …. Что-то проще, чем получение текущего PID Unity и отправка этому процессу сообщения из другого внешнего скрипта…
Ответ №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
)
Надеюсь, это поможет!
Комментарии:
1. Спасибо, отметьте; OnPostprocessModel кажется тем, что мне нужно. Но он не вызывается. Пустой проект, который у меня был, теперь имеет только метод OnPostprocessModel (go) и делает то, что делает Bang. Через cmd я открываю «пустой» проект и импортирую свой пакет SphereCube. На данный момент я ожидал, что будет вызвана OnPostprocessModel .. но это не так. OnPostprocessModel просто переходит в файл ресурсов скрипта в проекте, верно?
2. Да, но класс должен иметь «AssetPostprocessor» в качестве базового класса (см. Пример кода по ссылке на документы Unity в моем ответе). Если вы сделали это подобным образом, но метод все еще не вызывается, попробуйте открыть Unity и импортировать оттуда. Если все еще не срабатывает, это проблема с вашей стороны, которую вам нужно исправить. Если это работает таким образом, что-то не так с AssetPostprocessor при запуске импорта из cmd