はじめに
便利だとよく聞く、RequireComponent属性(Attribute)について勉強してみました。
概要
実装するスクリプト内で、クラス定義の前に使用します。
[RequireComponent(typeof(~~~))]
すると、このスクリプトがアタッチされたGameObjectには、~~~に記載したComponentが自動で実装されるようです。すごい。
もともと~~~がアタッチされている場合には、何も起きないようです。
また、~~~を削除しようとすると、警告が出て外せないようになっています。
使い方
下記のようにテストしてみます。
RequireKunクラス(Babyクラスを欲している)
using UnityEngine;
[RequireComponent(typeof(Baby))]
public class RequireKun : MonoBehaviour
{
}
Babyクラス(RigidBodyを欲しているし、取得する)
using UnityEngine;
[RequireComponent(typeof(Rigidbody))]
public class Baby : MonoBehaviour
{
[SerializeField] private Rigidbody rb;
private void Reset()
{
rb = GetComponent<Rigidbody>();
}
}
こんな二つのクラスを作ってみました。
この状態で、RequireKunをGameObjectにアタッチすると・・・
BabyもRigidBodyも自動でアタッチされました!
今回はBabyがResetでRigidBodyを取得しており、参照まで自動でできています。
おわりに
私は今まで小規模のゲームしか作ったことがありませんが、おそらく、開発規模が大きくなればなるほど、繰り返しの作業というものは面倒であり、かつ、ミスの原因になりやすいのだと思います。
設計がしっかりしていれば、必要なComponentが自動でアタッチされることによる恩恵は計り知れないのではないでしょうか。
設計を勉強しなくては・・・。