版本:Unity 6 (6000.0)
语言中文(简体)
  • C#

PrefabUtility.GetCorrespondingObjectFromOriginalSource

建议更改

成功!

感谢您帮助我们提升 Unity 文档的质量。虽然我们无法接受所有提交,但我们会阅读来自每位用户的建议修改并对适用的内容进行更新。

关闭

提交失败

由于某种原因,您建议的修改无法提交。请在几分钟后<a>重试</a>。感谢您花时间帮助我们提升 Unity 文档的质量。

关闭

取消

声明

public static TObject GetCorrespondingObjectFromOriginalSource(TObject componentOrGameObject);

参数

componentOrGameObject 从中查找对应原始对象的组件或游戏对象。

返回值

TObject 原始来源的对应对象或 null。

说明

检索给定对象的来源对象。

对于您传递给此方法的任何对象,Unity 会沿着对应对象链追踪,直到不再有更多对象并在找到最后一个对象后返回该对象。

您可以使用此方法来查找原始预制体资产,它是最原始的输入对象。

例如,在下图中,显示了预制体资产“A”包含子代嵌套预制体“B”,子代嵌套预制体“B”又包含子代嵌套预制体“C”。



由于此结构,预制体“C”存在于“A”和“B”中。它原本添加在“B”中,但是链中的最后一个对象是“C”

因此,在此示例场景中,当将 GameObject“C (实例)”作为源传递给此方法时,此方法将返回资产“C”。

以下示例脚本向编辑器中添加了一个菜单项,它将启动一个简单的向导,允许您测试此方法的结果。

using UnityEditor;
using UnityEngine;
public class AssetSourceTestWizard : ScriptableWizard
{
    public GameObject instance;

[MenuItem("Test/Asset Source Test Wizard")] static void CreateWizard() { ScriptableWizard.DisplayWizard<AssetSourceTestWizard>("Asset Source Test Wizard", "Do Test"); }

void OnWizardCreate() { var o1 = PrefabUtility.GetCorrespondingObjectFromOriginalSource(instance); Debug.Log("Corresponding object from original source: " + o1.name + " from: " + AssetDatabase.GetAssetPath(o1)); } }

如果您需要知道给定的 GameObject 或组件最初添加的位置(而不是链中的最后一个对象),请使用 GetOriginalSourceRootWhereGameObjectIsAdded

另请参见: GetCorrespondingObjectFromSourceGetCorrespondingObjectFromSourceAtPathGetOriginalSourceRootWhereGameObjectIsAdded