版本: Unity 6 (6000.0)
语言英语
  • C#

AssetPostprocessor.OnPostprocessPrefab(GameObject root)

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交内容,但我们会阅读用户提出的每个建议,并在适用时进行更新。

关闭

提交失败

由于某些原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

描述

在 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); } }