在Unity中获取预制件文件位置

时间:2016-04-25 20:19:56

标签: c# unity3d

我想要做的是在我的场景Start()预制GameObject方法中,我希望得到这个预制件的位置作为字符串,但我无法弄清楚如何这样做。

我如何使用此示例: 我在我的场景中放置了一个Sword预制件GameObject,并在Start()上我想知道这个GameObject在我的项目中的文件目录。

3 个答案:

答案 0 :(得分:3)

加入using UnityEditor;

注意:这仅适用于预制件是公开的。

然后使用AssetDatabase.GetAssetPath获取预制件的路径。

public GameObject prefab;
void Start(){
    string prefabPath = AssetDatabase.GetAssetPath(prefab);
    Debug.Log("Path: " + prefabPath);
}

修改

我使用PrefabUtility.GetPrefabTypePrefabUtility.GetPrefabObjectPrefabUtility.GetPrefabParent进行了一些实验。 PrefabUtility.GetPrefabParent解决了这个问题。您不需要使用PrefabUtility.GetPrefabParent制作预制公开

void Start()
{
    GameObject prefab = GameObject.Find("PrebabTest");
    Object GameObject2 = PrefabUtility.GetPrefabParent(prefab);
    string prefabPath = AssetDatabase.GetAssetPath(GameObject2);
    Debug.Log("Path: " + prefabPath);
}

答案 1 :(得分:0)

从变换获取完整路径

public static string GetGameObjectPath(Transform transform)
{
    string path = transform.name;
    while (transform.parent != null)
    {
        transform = transform.parent;
        path = transform.name + "/" + path;
    }
    return path;
}

答案 2 :(得分:0)

如果你想找到一个实例的预制变体,你应该使用

PrefabUtility.GetCorrespondingObjectFromSource(YourPrefabInstance)

如果你想找到一个实例的原始预制件,你应该使用

PrefabUtility.GetCorrespondingObjectFromOriginalSource(YourPrefabInstance)

它只能在编辑器模式下工作。