Описание
Получает уведомление, когда префаб завершает импорт.
Чтобы использовать эту функцию, добавьте ее в подкласс. Он позволяет вам изменять импортированный GameObject. GameObjects существуют только во время импорта, и Unity уничтожает их сразу после импорта.
Эта функция вызывается перед созданием импортированного префаба в папке библиотеки и перед его записью на диск. Таким образом, вы имеете полный контроль над сгенерированными игровыми объектами и компонентами.
Любые ссылки на GameObjects становятся недействительными после того, как Unity завершит импорт. Таким образом, вы не можете создать новый Prefab в файле, отличном от OnPostprocessPrefab, который ссылается на сетки в импортированном файле Prefab.
Чтобы добавить новые объекты Asset в Prefab, вызовите AssetPostprocessor.context.AddObjectToAsset()
Постпроцессор может устанавливать или изменять флаги скрытия для объектов в префабе. К добавленным объектам активов всегда добавляются флаги DontSaveInEditor и NotEditable. Добавленные игровые объекты и компоненты всегда получают добавленный флаг DontSaveInEditor. Флаг DontSaveInEditor всегда установлен, чтобы объект не сохранялся обратно в исходный ресурс префаба, потому что это дублирует сгенерированные объекты каждый раз, когда сохраняется префаб.
root
— это корневой GameObject импортированного префаба.
using UnityEngine;
using UnityEditor;
// Добавляет меш-коллайдер к каждому игровому объекту, имя которого содержит коллайдер
public class Example : AssetPostprocessor
{
void OnPostprocessPrefab(GameObject g)
{
Apply(g.transform);
}
void Apply(Transform t)
{
if (t.name.ToLower().Contains("collider"))
t.gameObject.AddComponent<MeshCollider>();
// Рекурсия
foreach (Transform child in t)
Apply(child);
}
}