はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】スクリプトでプロジェクト内の特定のScriptableObjectを取得するやり方(Editor拡張で便利)

はじめに

今回はProject内(Assets/以下)に含まれているScriptableObjectを探す方法を紹介したいと思います。

やり方

以下の3つのメソッドを利用します。

メソッド 意味
AssetDatabase.FindAssets t:〇〇とすると特定のtypeのアセットのGUID一覧を取得できる
AssetDatabase.GUIDToAssetPath GUIDからアセットパスに変換をする
AssetDatabase.LoadAssetAtPath アセットパスからObjectを取得する

AssetDatabase-FindAssets - Unity スクリプトリファレンス
AssetDatabase-GUIDToAssetPath - Unity スクリプトリファレンス
AssetDatabase-LoadAssetAtPath - Unity スクリプトリファレンス

// 今回利用するメソッドのシグネチャ
public static string[] FindAssets (string filter);
public static string GUIDToAssetPath (string guid);
public static T LoadAssetAtPath<T>(string assetPath) where T : UnityEngine.Object;
// 利用方法
// 「StringTableCollection」というScriptableObjectのGUIDの一覧を取得
var guids = AssetDatabase.FindAssets("t:StringTableCollection");

// GUIDからAssetPathに変換する
var assetPaths = guids.Select(AssetDatabase.GUIDToAssetPath).ToArray();

// AssetPathから対象のScriptableObjectを取得する
var scriptableObjects = assetPaths.Select(AssetDatabase.LoadAssetAtPath<StringTableCollection>).ToArray();

ちなみにStringTableCollectionUnity Localizationで利用されるScriptableObjectです。
Class StringTableCollection | Localization | 1.0.5

またAssetDatabaseEditor上でしか使えないので注意してください。