より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

UnityのScriptable Objectを勉強しておく

docs.unity3d.com

頭の中で、使おうと思いながらも、使わず終わるのが、Scriptable Object。

MonoBehaviourを継承したらPrefabやらScene上のGameObjectのSerializeFieldに持たせるのではなく、Scriptable Object経由で値をアクセスするとかできそうですね。

ボタンとドロップダウンのテキストをScriptableObject経由で取得して反映させるというのを行ってみたのですが、イメージ湧きました。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu(menuName = "ScriptableObject/ScriptableComponent", fileName = "ScriptableComponent")]
public class ScriptableComponent : ScriptableObject
{
    public Color textColor = Color.blue;
    public float fontSize = 16;
}
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;

public class ButtonComponent : MonoBehaviour
{
    [SerializeField] private ScriptableComponent scriptableComponent;

    [SerializeField] private TextMeshProUGUI text;

    private void Start()
    {
        text.color = scriptableComponent.textColor;
        text.fontSize = scriptableComponent.fontSize;
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DropDownComponent : MonoBehaviour
{
    [SerializeField] private ScriptableComponent scriptableComponent;

    [SerializeField] private TMPro.TMP_Dropdown dropdown;

    private void Start()
    {
        dropdown.captionText.color = dropdown.itemText.color = scriptableComponent.textColor;
        dropdown.captionText.fontSize = dropdown.itemText.fontSize = scriptableComponent.fontSize;
    }
}

https://github.com/rimever/ScriptableObjectAwesome

参考記事

yuru-uni.com