2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Unity ScriptableObjectをわかりやすくする

Posted at

できること

方法1 プレビュー画像をつける

image.png

プレビュー画像をつけられる

方法2アセットラベルを使用する

image.png
ラベルを付けて一覧にする。ラベルのつけ方で分類できる

方法3 非公式機能を使う EditorGUIUtility.SetIconForObject

アップデートで使えなくなったり、不具合があるかも。
image.png
おにぎりになった。

方法1 の説明

editorフォルダに2つともいれる

using UnityEngine;

[CreateAssetMenu(fileName = "NewEnemyStatus", menuName = "Enemy Status")]
public class EnemyStatus : ScriptableObject
{
    // ... その他のフィールド ...

    [SerializeField]
    private Texture2D previewImage; // これは永続化されます。

    // previewImageのプロパティ(オプショナル)
    public Texture2D PreviewImage
    {
        get { return previewImage; }
        set { previewImage = value; }
    }
}


using UnityEditor;
using UnityEngine;

[CustomEditor(typeof(EnemyStatus))]
public class EnemyStatusEditor : Editor
{
    public override void OnInspectorGUI()
    {


        EnemyStatus enemyStatus = (EnemyStatus)target;

        // シリアライズされた画像フィールドを操作
        enemyStatus.PreviewImage = (Texture2D)EditorGUILayout.ObjectField("プレビュー画像:",
            enemyStatus.PreviewImage, typeof(Texture2D), false);
        // スクリプトのデフォルトのフィールドを描画
        base.OnInspectorGUI();
        // オブジェクトの変更を保存
        if (GUI.changed)
        {
            EditorUtility.SetDirty(enemyStatus);
        }
    }
}

肝となるのはこれ

        EnemyStatus enemyStatus = (EnemyStatus)target;

        // シリアライズされた画像フィールドを操作
        enemyStatus.PreviewImage = (Texture2D)EditorGUILayout.ObjectField("プレビュー画像:",
            enemyStatus.PreviewImage, typeof(Texture2D), false);
        // スクリプトのデフォルトのフィールドを描画

好きな画像を設定する。

方法2 ラベルで一覧にする

image.png
Asset Labelsからnewを選ぶ

image.png
検索で一覧にできる。
image.png

方法3 EditorGUIUtility.SetIconForObject

Editorフォルダに以下のスクリプトを作成

using UnityEditor;
using UnityEngine;

public static class SetIconForScriptableObject
{
    [MenuItem("Assets/Set Custom Icon")]
    static void SetCustomIcon()
    {
        var selectedObject = Selection.activeObject;

        // カスタムアイコンのTexture2Dをロードする
        var iconTexture = AssetDatabase.LoadAssetAtPath<Texture2D>("Assets\\Utage\\Sample\\Textures\\emoji\\1f359.png");

        // EditorGUIUtility.SetIconForObjectを使用してアイコンを設定する
        EditorGUIUtility.SetIconForObject(selectedObject, iconTexture);

        // 変更を保存
        EditorUtility.SetDirty(selectedObject);
    }
}

"Assets\Utage\Sample\Textures\emoji\1f359.png"
画像のパスは各自変えてね

image.png
ツールバーのassetからSetCustomIconを選ぶ

これで変更される
image.png

デフォルトのアイコンに戻すには

// アイコンをデフォルトに戻す
        EditorGUIUtility.SetIconForObject(selectedObject, null);

これでもどる

image.png

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?