컴포넌트(Component) 는 액터에 추가할 수 있는 하나의 함수 기능입니다.
액터에 컴포넌트를 추가하면 액터는 해당 컴포넌트가 제공하는 기능을 사용할 수 있습니다. 예시:
- 스포트 라이트 컴포넌트는 액터가 라이트를 스포트 라이트처럼 발산하게 만듭니다.
- 회전 이동 컴포넌트는 액터가 회전하게 만듭니다.
- 오디오 컴포넌트는 액터가 소리를 재생하게 만듭니다.
액터와는 달리 컴포넌트는 자립하여 존재할 수 없습니다. 반드시 액터에 어태치되어야 합니다.
액터에 컴포넌트를 추가하는 것은 그 액터 전체를 이루는 조각들을 결합하는 것과 같습니다. 예를 들어 자동차(액터)는 바퀴, 핸들, 차체, 라이트 등(컴포넌트)으로 구성됩니다. 이와 비슷하게, 플레이어 캐릭터를 나타내는 액터에게는 스켈레탈 메시(캐릭터의 시각적 표현), 캐릭터를 따라다니는 카메라, 플레이어의 입력을 받는 컨트롤러 등 갖가지 개별적인 컴포넌트가 있을 수 있습니다.
액터를 구성하는 컴포넌트를 결합하면 액터의 기능을 지시하는 블루프린트(Blueprint) 스크립트(또는 C++ 코드) 없이도 레벨에 액터를 배치할 수 있습니다. 위의 예시를 계속 이어서 설명하자면, 자동차(액터)는 움직임을 조종하는 운전자(블루프린트 또는 C++) 없이도 세상(레벨)에 오브젝트로서 존재할 수 있습니다. 블루프린트 또는 C++ 코드는 자동차의 각 컴포넌트에 개별적으로 액세스하는 데 사용됩니다(예: 가속 페달 컴포넌트를 누르면 블루프린트 로직이 자동차 속도를 높임).
컴포넌트 인스턴싱
일반적인 서브 오브젝트의 기본 작동방식과는 상반되게, 액터 안에 서브 오브젝트로 생성된 컴포넌트는 인스턴스로 생성됩니다. 특정 클래스의 액터 인스턴스 각각은 컴포넌트의 고유 인스턴스를 별도로 갖는다는 뜻입니다.
이를 간단히 시각화해보려면 위 예시의 자동차를 떠올려 보세요. Car 클래스에서 바퀴를 나타내기 위해 컴포넌트를 사용할 수 있습니다. 네 개의 바퀴 컴포넌트를 클래스 디폴트 프로퍼티에 서브 오브젝트로 만든 다음, '바퀴' 배열에 할당합니다. Car 인스턴스가 새로 생성되면, 바로 그 차만을 위한 바퀴 컴포넌트가 새로 생성됩니다. 그렇게 되지 않는다면, 월드의 Car 하나가 움직인 경우, 모든 Car 의 바퀴가 회전할 텐데, 이는 분명히 바람직한 동작이 아닙니다. 컴포넌트 인스턴싱은 기본적으로 액터에 고유 서브 오브젝트를 빠르게 추가하는 프로세스를 단순화시켜 줍니다.
컴포넌트 인스턴싱이 없다면, Instanced
프로퍼티 지정자를 사용하여 모든 컴포넌트 변수를 선언해 줘야 합니다.