본문 바로가기
Unity

[RequireComponent]

by LemongO 2024. 6. 6.

RequireComponent 어트리뷰트란?

RequireComponent 특성은 필수 구성 요소를 종속성으로 자동 추가합니다.

 

설명 그대로 클래스에서 어트리뷰트를 사용해 명시적으로 사용할 컴포넌트를 작성해두면

해당 컴포넌트를 강제로 사용하기 때문에 따로 인스펙터에서 추가할 필요가 없다.

 

 

 

Unity - Scripting API: RequireComponent

When you add a script which uses RequireComponent to a GameObject, the required component is automatically added to the GameObject. This is useful to avoid setup errors. For example a script might require that a Rigidbody is always added to the same GameOb

docs.unity3d.com

 

예시를 위해 테스트용 클래스를 컴포넌트로 부착시킨 큐브를 가져다 놓았다.

using UnityEngine;

public class RequireTest : MonoBehaviour
{
    Rigidbody _rigid;

    private void Awake()
    {
        _rigid = GetComponent<Rigidbody>();
    }

    private void FixedUpdate()
    {
        _rigid.AddForce(Vector3.up, ForceMode.Acceleration);
    }
}

어트리뷰트를 사용하지 않고 RequireTest 컴포넌트만 부착시켜뒀을 때

 

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 어트리뷰트를 사용한 클래스가 부착되어있지 않은 오브젝트에 새로 부착 시,

명시해놓은 컴포넌트가 자동으로 추가된다.

before
after

그리고 RequireComponent 어트리뷰트 대상인 컴포넌트는 제거가 불가능하다.

 

'Unity' 카테고리의 다른 글

[RuntimeInitializeOnLoadMethod]  (0) 2024.06.05
Addressable (로컬)  (0) 2024.05.31
Culling (최적화)  (0) 2024.05.09