コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】Unity プロジェクトに含まれるすべてのプレハブを取得するエディタ拡張のサンプル

概要

using System.Linq;
using UnityEditor;
using UnityEngine;

public static class Example
{
    [MenuItem( "Tools/Hoge" )]
    private static void Hoge()
    {
        var list = AssetDatabase
            .FindAssets( "t:Prefab" )
            .Select( AssetDatabase.GUIDToAssetPath )
            .Select( c => AssetDatabase.LoadAssetAtPath<GameObject>( c ) )
            .Where( c => c != null )
            .Where( c => c.name != "DataPrivacyButton" )
            .SelectMany( c => c.GetComponentsInChildren<Transform>( true ) )
            .Select( c => c.gameObject )
        ;

        foreach ( var n in list )
        {
            Debug.Log( n.name );
        }
    }
}

上記のようなコードを記述することで Unity プロジェクトに含まれる
すべてのプレハブ(子オブジェクトを含む)を取得できます

Unity 2018.3 で試したところ、Unity プロジェクトに含まれていない
「DataPrivacyButton」という名前のプレハブまで取得されてしまったので
除外するようにしています(Unity のビルトインアセット?)