頭の中で、使おうと思いながらも、使わず終わるのが、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