2016-04-25 2 views
0

私がやろうとしているのは、Start()私のシーンのプレハブGameObjectの方法です。私はこのプレハブがどこにあるかの位置を文字列として取得したいのですが、これを行う。私はこれを使用していますどのようにUnityのプレハブファイルの場所を取得

例: 私は私のシーンで剣プレハブGameObjectを入れて、Start()に私はこのGameObjectは私のプロジェクトである場合のファイルディレクトリを取得したいと思います。

+0

これはエディタでのみ行いますか? – Programmer

+0

@Programmer私はこれを理解しようとしていましたが、私はエディタを拡張していませんでしたが、Monobehavior。私はvoid Start()を使用してこのPrefab GameObjectのファイルの場所を取得できると思った。 – JoeyL

+0

私はあなたが質問に答えたとは思わない。エディタまたはモバイルとスタンドアローンのビルドからこれを実行しますか?私はエディタでそれを行う方法を示すことができます – Programmer

答えて

3

using UnityEditor;

NOTEを含める:プレハブがパブリックにしている場合にのみ動作します。

次に、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); 
} 
+0

私は実際に非常によく似たものがありましたが、これを動作させようとしていたのは、私がgameObjectをASsetDatabase.GetAssetPath(プレファブ)のプレハブとして設定しようとしていたPublic GameObject変数の代わりです。だから私はこれはあなたが公共の変数を持っている場合のみ動作すると思いますか? – JoeyL

+0

@JoeyLだから、私の答えのコードは働いていますか? – Programmer

+0

はい、私はそれを確認しました。パブリック変数の場合にのみ機能します。だから 'GameObject prefab = GameObject.Find(" PrebabTest "); 文字列prefabPath = AssetDatabase.GetAssetPath(prefab); **失敗**。 – Programmer

関連する問題