icon안동민 개발노트

블루프린트 컴포넌트의 사용법


 블루프린트 컴포넌트는 액터에 추가할 수 있는 기능 모듈로, 재사용 가능하고 모듈화된 방식으로 액터의 기능을 확장하는 데 사용됩니다.

컴포넌트의 개념과 목적

  • 정의 : 컴포넌트는 특정 기능을 캡슐화한 객체입니다.
  • 목적 : 액터의 기능을 모듈화하고, 코드 재사용성을 높입니다.
  • 특징 : 계층 구조로 구성할 수 있으며, 독립적으로 동작합니다.

주요 컴포넌트 종류와 특징

 1. StaticMeshComponent

  • 용도 : 정적 3D 모델 표현
  • 특징 : 움직이지 않거나 단순한 변형만 하는 객체에 적합

 2. SkeletalMeshComponent

  • 용도 : 애니메이션이 있는 3D 모델 표현
  • 특징 : 캐릭터나 동적인 객체에 사용

 3. CameraComponent

  • 용도 : 게임 월드를 보는 시점 제공
  • 특징 : 플레이어 시점이나 컷신에 활용

 4. LightComponent

  • 용도 : 광원 추가
  • 특징 : 다양한 유형의 조명 효과 생성 가능

 5. AudioComponent

  • 용도 : 사운드 재생
  • 특징 : 3D 공간 내에서 사운드 위치 지정 가능

 6. ParticleSystemComponent

  • 용도 : 파티클 효과 생성
  • 특징 : 불, 연기, 폭발 등의 효과에 사용

컴포넌트 추가 및 설정 방법

  1. 블루프린트 에디터에서 '컴포넌트' 패널 열기
  2. '컴포넌트 추가' 버튼 클릭
  3. 원하는 컴포넌트 유형 선택
  4. 추가된 컴포넌트의 속성을 '디테일' 패널에서 설정

컴포넌트 조작 예제

 StaticMeshComponent를 사용한 회전하는 장애물 생성

  1. StaticMeshComponent 추가 및 메시 할당
  2. 블루프린트 이벤트 그래프에서 다음 로직 구현
[Event Tick] --> [GetComponentRotation] --> [Make Rotator]
                                                 |
                     [Add] <-- [Rotation Speed * DeltaSeconds]
                       |
        [SetWorldRotation] <-- [New Rotation]

컴포넌트 계층 구조 설정

 컴포넌트는 부모-자식 관계로 구성할 수 있습니다.

  1. 자식 컴포넌트를 부모 컴포넌트에 드래그 앤 드롭
  2. 자식 컴포넌트는 부모의 변형(Transform)을 상속

 예 : 무기를 든 캐릭터

- SkeletalMeshComponent (Character)
  - SocketName: WeaponSocket
    - StaticMeshComponent (Weapon)

주요 컴포넌트 사용 예제

  1. CameraComponent
// 3인칭 카메라 설정
CameraComponent* Camera = CreateDefaultSubobject<CameraComponent>(TEXT("PlayerCamera"));
Camera->SetupAttachment(GetMesh(), FName("CameraSocket"));
Camera->bUsePawnControlRotation = true;
  1. AudioComponent
// 배경 음악 설정
AudioComponent* BGMComponent = CreateDefaultSubobject<AudioComponent>(TEXT("BackgroundMusic"));
BGMComponent->SetSound(BGMSound);
BGMComponent->bAutoActivate = true;
  1. ParticleSystemComponent
// 발자국 효과 생성
ParticleSystemComponent* FootstepEffect = CreateDefaultSubobject<ParticleSystemComponent>(TEXT("FootstepEffect"));
FootstepEffect->SetupAttachment(GetMesh(), FName("FootSocket"));
FootstepEffect->bAutoActivate = false;

사용자 정의 컴포넌트 생성

 복잡하거나 재사용 가능한 기능은 사용자 정의 컴포넌트로 만들 수 있습니다.

  1. 새 C++ 클래스 생성, UActorComponent를 상속
  2. 필요한 기능 구현
  3. 블루프린트에서 사용자 정의 컴포넌트 추가 및 사용

 예 : 체력 관리 컴포넌트

UCLASS(ClassGroup=(Custom), meta=(BlueprintSpawnableComponent))
class MYGAME_API UHealthComponent : public UActorComponent
{
    GENERATED_BODY()
 
public:
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Health")
    float MaxHealth = 100.0f;
 
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Health")
    float CurrentHealth;
 
    UFUNCTION(BlueprintCallable, Category = "Health")
    void TakeDamage(float DamageAmount);
 
    UFUNCTION(BlueprintCallable, Category = "Health")
    void Heal(float HealAmount);
};

 이 컴포넌트를 다양한 액터에 추가하여 일관된 체력 시스템을 구현할 수 있습니다.

컴포넌트 사용 시 주의사항

 1. 성능 고려

  • 필요 이상의 컴포넌트 사용 자제
  • Tick 기능이 필요 없는 컴포넌트는 비활성화

 2. 메모리 관리

  • 동적으로 생성한 컴포넌트는 적절히 제거

 3. 복잡성 관리

  • 과도한 계층 구조는 피하기
  • 명확한 명명 규칙 사용

 4. 재사용성

  • 공통 기능은 사용자 정의 컴포넌트로 분리

 5. 네트워크 동기화

  • 멀티플레이어 게임에서는 복제 설정 주의

 블루프린트 컴포넌트는 게임 개발을 모듈화하고 효율적으로 만드는 강력한 도구입니다.

 적절한 컴포넌트 사용은 코드의 재사용성을 높이고, 복잡한 게임 로직을 관리하기 쉽게 만듭니다.

 다양한 내장 컴포넌트를 활용하고 필요에 따라 사용자 정의 컴포넌트를 만들어 사용하는 것을 통해 더 유연하고 확장 가능한 게임 시스템을 구축할 수 있습니다.