在 Prefab 完成导入时收到通知。
要使用此函数,请将其添加到子类中。它允许您修改导入的 GameObject。GameObject 仅在导入期间存在,Unity 会在导入后立即销毁它们。
此函数在导入的 Prefab 在 Library 文件夹中创建之前以及写入磁盘之前被调用。因此,您可以完全控制生成的 GameObject 和组件。
在 Unity 完成导入后,对 GameObject 的任何引用都会失效。因此,您无法在 OnPostprocessPrefab 中从不同的文件中创建引用导入 Prefab 文件中网格的新的 Prefab。
要将新的 Asset 对象添加到 Prefab,请调用 AssetPostprocessor.context.AddObjectToAsset()
后处理器可以在 Prefab 中的对象上设置或修改隐藏标志。添加的 Asset 对象始终会获得 DontSaveInEditor 和 NotEditable 标志。添加的 GameObject 和组件始终会获得 DontSaveInEditor 标志。始终设置 DontSaveInEditor 标志以避免将对象保存回 Prefab 源 Asset,因为这会在每次保存 Prefab 时复制生成的物体。root
是导入的 Prefab 的根 GameObject。
using UnityEngine; using UnityEditor;
// Adds a mesh collider to each game object that contains collider in its name 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>();
// Recurse foreach (Transform child in t) Apply(child); } }