環境
- Unity 2019.1.12f1 (Unity 5系 のような古いバージョンでも大丈夫です)
デフォルト値の設定について
コンポーネントのデフォルト値を設定する際、私はインスペクタを開いて手動で設定していました。この操作、割と面倒ですしヒューマンエラーを起こします。
手間を減らせないかと探したところ、Reset()
という関数が MonoBehaviour クラスには存在しているようです。
Reset() について
・リファレンス
(古いバージョン (Unity 5.0) のリファレンスにも存在しています。)
Reset はインスペクターのコンテキストメニューにある Reset ボタンやコンポーネントを初めて追加するときに呼び出されます。 この関数はエディターモードのみで呼び出されます。Reset はインスペクターでデフォルト値を設定するときにもっともよく使用されます。
Reset()
は、コンポーネントをアタッチするときに呼ばれる関数です。この関数内でデフォルト値を設定する処理を書けば、アタッチ時にデフォルト値が自動で設定されるわけです。
使い方
アタッチするコンポーネントに Reset()
を定義します。関数内でデフォルト値を設定します。
using UnityEngine;
using UnityEngine.UI;
public class HogeComponent : MonoBehaviour
{
[SerializeField] private Image image;
[SerializeField] private Text text;
void Reset()
{
if(!text){ text = GetComponentInChildren<Text>(); }
text.text = "Hoge";
if(!image){ image = GetComponentInChildren<Image>(); }
image.color = Color.red;
}
}
後はこのコンポーネントをアタッチするだけです。
↓gifです
上のように、アタッチした瞬間に参照をつけることが出来ました。
また、参照先のコンポーネントのパラメータの変更もできます。
なお、コンポーネントのアタッチ後に、そのコンポーネントの Reset()
を定義しても、アタッチ済みのコンポーネントのデフォルト値は設定されません。
アタッチ済みのコンポーネントのデフォルト値を設定する場合は、右クリックメニューからReset
を選択することで、Reset()
が実行されます。
↓gifです