Unity ScriptableObjectをわかりやすくする

## できること
### 方法１　プレビュー画像をつける
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/dc4c4070-d507-291c-52b5-d6be16ffabcd.png)

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


### 方法２アセットラベルを使用する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/69df607e-3bb9-7b03-da44-4562526869e2.png)
ラベルを付けて一覧にする。ラベルのつけ方で分類できる


### 方法３　非公式機能を使う　EditorGUIUtility.SetIconForObject
アップデートで使えなくなったり、不具合があるかも。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/4cd29e2e-ab7b-3af6-097a-fe76accb0e36.png)
おにぎりになった。



## 方法１　の説明
editorフォルダに２つともいれる

```
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/b2253b09-3f33-c082-2384-9a358baff469.png)
Asset Labelsからnewを選ぶ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/e6095af0-c53d-eefd-de3d-49411ed8ad3a.png)
検索で一覧にできる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/69df607e-3bb9-7b03-da44-4562526869e2.png)

## 方法３　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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/6d82d36b-82a8-94ba-96fb-1b85d117ec42.png)
ツールバーのassetからSetCustomIconを選ぶ

これで変更される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/3ab42989-2ffe-4910-ba8b-4620793e69a4.png)

デフォルトのアイコンに戻すには
```
// アイコンをデフォルトに戻す
        EditorGUIUtility.SetIconForObject(selectedObject, null);
```
これでもどる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294598/53c4a56e-479e-9ec4-52fd-5ec07aae38be.png)