RequireComponent 어트리뷰트란?
RequireComponent 특성은 필수 구성 요소를 종속성으로 자동 추가합니다.
설명 그대로 클래스에서 어트리뷰트를 사용해 명시적으로 사용할 컴포넌트를 작성해두면
해당 컴포넌트를 강제로 사용하기 때문에 따로 인스펙터에서 추가할 필요가 없다.
예시를 위해 테스트용 클래스를 컴포넌트로 부착시킨 큐브를 가져다 놓았다.
using UnityEngine;
public class RequireTest : MonoBehaviour
{
Rigidbody _rigid;
private void Awake()
{
_rigid = GetComponent<Rigidbody>();
}
private void FixedUpdate()
{
_rigid.AddForce(Vector3.up, ForceMode.Acceleration);
}
}
RigidBody를 따로 부착시키지 않았으면 이대로 실행 시 당연하게도 Missing 오류 메시지가 뜬다.
어트리뷰트를 사용했을 땐?
using UnityEngine;
[RequireComponent(typeof(Rigidbody), typeof(AutoAttachTest))]
public class RequireTest : MonoBehaviour
{
Rigidbody _rigid;
AutoAttachTest _test;
private void Awake()
{
_rigid = GetComponent<Rigidbody>();
_test = GetComponent<AutoAttachTest>();
}
private void FixedUpdate()
{
_rigid.AddForce(Vector3.up, ForceMode.Acceleration);
_test.TestMethod();
}
}
using UnityEngine;
public class AutoAttachTest : MonoBehaviour
{
public void TestMethod() => Debug.Log("RequireComponent Test");
}
인스펙터 상으론 변화가 없다.
하지만 실행 시, 컴포넌트가 자동으로 부착이 된다.
또한 RequireComponent 어트리뷰트를 사용한 클래스가 부착되어있지 않은 오브젝트에 새로 부착 시,
명시해놓은 컴포넌트가 자동으로 추가된다.
그리고 RequireComponent 어트리뷰트 대상인 컴포넌트는 제거가 불가능하다.
'Unity' 카테고리의 다른 글
[RuntimeInitializeOnLoadMethod] (0) | 2024.06.05 |
---|---|
Addressable (로컬) (0) | 2024.05.31 |
Culling (최적화) (0) | 2024.05.09 |