2016-10-18 46 views
0

詳細な質問がありますが、プロジェクトから未使用の素材やテクスチャをすべて検索して表示/削除するスクリプトに取り組んでいます。私はシーンファイルからGUID解析のパスをたどりましたが、解決できない場合はこの解決策を不可能にするいくつかの問題に遭遇しました。Unityのプレハブからguidを取得する

1)シーン ".unity"ファイルで、プレハブを使用すると、このプレハブのGUIDのみが含まれますが、プレハブ自体には子オブジェクトが含まれています。 例:

Prefab: 
    m_ObjectHideFlags: 0 
    serializedVersion: 2 
    m_Modification: 
    m_TransformParent: {fileID: 0} 
    m_Modifications: 
    - target: {fileID: 444956, guid: 6a526c61069224c92930d52849053cbe, type: 2} 
     propertyPath: m_LocalPosition.x 
     value: 0 
     objectReference: {fileID: 0} 

し、同様にプロジェクトビューで二階層レベルよりも子が存在しない: 私は何をしたいのかenter image description here

- 何とかによって使用される全てのマテリアルとテクスチャを取得するには、たとえば、シーン内の「天井」などです。 "Blue"プレハブが実行時にロードされ、シーンには存在しないことを考慮して、私は一元管理からルートガイドを取ることしかできません。

2)私は何とかすべて使用される材料を得る場合であっても、適切に、ゲームオブジェクトのちょうどこれらのレンダラにアクセスすることなく、それらが使用するテクスチャを取得する方法:

enter image description here

を私はそれは少し厄介だ知っています質問があるので、何かが明確でないか尋ねてください。前もって感謝します。

答えて

2

あなたはこれを必要とする場合があります。AssetDatabase.GUIDToAssetPath(string guid);

  1. をあなたは親プレハブ持っている - あなたは子供のプレハブを見つけることができます - > - >あなたはすべての子供たちの​​などを抽出することができます>あなたはその子 のすべて​​を抽出することができますあなたは​​の使用済み材料のすべてを抽出することができます AssetDatabase.GUIDToAssetPath(string guid)を使用して をすべての使用されたテクスチャパスにすることができます。 Resources.Load<Texture2D>(string assetPath);を使用して実際のテクスチャを取得できます。
  2. 実行時にロードされたプレファブにア​​クセスすることは恐れられます。ちょうど のようなシェイダー。実行時にシェーダをロードして、 をAlwaysIncludedShadersに追加することを忘れた場合は、ビルドされたバージョンのみでピンクのもの が得られますが、エディタで再生するときは表示されません。 Unityでさえ、その問題を解決することはできません。少なくともまだ。

あなたが興味があるかもしれないいくつかのより多くの方法:P1用として
EditorUtility.CollectDependencies();
EditorUtility.CollectDeepHierarchy();

+0

- 私は実際には、プロジェクトビューで「ブルー」ゲームオブジェクトやプレハブを見ることができない、それは単一です1つのguidでプレハブを作成しましたが、私が望むのはこのように不可能であるという結論に達しました。 これらの方法のおかげで大変感謝していますが、これは私のための他のより良い方法かもしれません! :) – Phoera

+0

大丈夫、CollectDependenciesは神様です、それはそれが以前行われた方法と比較して、パブリックフィールド、依存(マット、テクスチャなど)に割り当てられたプレハブを選択し、必要なすべてを行うことを確認することができます。ありがとう、仲間、私の夜を救った^ _ ^ – Phoera

関連する問題