はじめに
エディター拡張をしているときに、ScriptableObjectにFolderパスを登録してしまうと移動したときの取得できなくなるので、フォルダー(GUID)を登録する形にしたいというお話が出てFolderは登録できないのでstringでGUIDにしましたと言われ、そんなことないと思いやってみました。
先に結論を書くとUnityEngine.Object
を継承しているものは登録できるのでFolderも登録できます。
・Properties...
でクラスがわかることを追記:2021/08/30,
using UnityEngine;
public class ScriptableObjectData : ScriptableObject
{
public UnityEngine.Object asset;
}
ですが、一覧にはすべて出てきます。
ある程度登録できるものを制限したい
とは言えUnityEngine.Object
にしてしまうとすべてのものが登録出来てしまうのである程度制限をかけたいです。
なのでFolderとはどのクラスなのかを調べないといけませんので軽く調べてみましょう。
unityのC#部分はオープンソースになっているので探せば見つかるかもしれませんが、正直探しづらいです。
簡単に調べてみました。
using UnityEditor;
using UnityEngine;
public class CheckClassType : Editor
{
[MenuItem("Assets/Qiita/Check Select Object")]
private static void CheckSelectObject()
{
Debug.Log(Selection.activeObject.GetType());
}
}
ログにUnityEditor.DefaultAsset
と出ました。
早速修正してみます。
using UnityEngine;
public class ScriptableObjectData : ScriptableObject
{
public UnityEngine.Object asset;
public UnityEditor.DefaultAsset folder;
}
一応、制限されましたがアセットバンドルやシーンは一覧にでます。
シーンはUnityEditor.SceneAsset
なのでUnityEditor.FolderAsset
があるのかなと思いましたがありませんでした、これ以上は面倒なので調べませんがもしかしたらFolderのみを表示するようにクラスがあるかもしれません。
unity2020.3ぐらいからProperties...
が追加されてあるクラスもわかるみたいでした。(追記:2021/08/30)
おわりに
unityの記事は多いので大抵のものは探せば見つかりますが、最近見つからなかったら出来ないとなるunityプログラマーは多いのではと思いました。自分自身知らないことは多いですが、いろいろ考えたり自分で検証したりすれば記事が見つからなくても実装できるのでぜひ記事を見て終わりではなく検証していただければと思います。
正直ネットで記事を探すよりも検証する方が楽しいです。
参考