본문 바로가기
프로그래밍

👨‍💻 [Unreal] 언리얼 엔진에서 C++ 생성자의 목적은 무엇인가요?

by 밝음의기둥 2024. 11. 14.
반응형

👨‍💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.

언리얼 엔진에서 C++ 생성자의 목적은 무엇인지 간략히 알아보았습니다.


질문 >

언리얼 엔진에서 C++ 생성자의 목적은 무엇인가요?

답변 >

언리얼 엔진에서 C++ 생성자는 주로 클래스의 초기화 작업을 수행하는 데 사용됩니다. 특히, 언리얼 엔진의 **AActor**나 **UObject**와 같은 클래스의 파생 클래스에서는 생성자가 클래스의 기본 속성을 설정하고, 컴포넌트를 생성 및 초기화하여 객체가 올바르게 동작할 수 있는 기본 상태를 만드는 중요한 역할을 합니다.

언리얼 엔진에서 C++ 생성자의 목적

  1. 기본 속성 설정:
    • 생성자는 클래스의 멤버 변수를 기본값으로 설정하는 역할을 합니다. 특히 언리얼 엔진의 게임 객체는 다양한 속성(위치, 회전, 속도 등)을 가지고 있어, 객체 생성 시 이 값들이 올바르게 초기화되어야 합니다.
    • 예를 들어, 캐릭터의 이동 속도, 체력, 기본 위치 등을 생성자에서 설정하여 객체가 생성될 때부터 기본값을 가지도록 할 수 있습니다.
  2. 컴포넌트 생성 및 초기화:
    • 언리얼 엔진의 클래스는 다양한 컴포넌트(카메라, 스프링 암, 메쉬 등)를 포함할 수 있으며, 이러한 컴포넌트를 생성자에서 생성하고 초기화하는 것이 일반적입니다.
    • 생성자를 통해 컴포넌트를 생성하면, 객체가 생성될 때 자동으로 필요한 컴포넌트들이 함께 초기화되어 게임 로직에서 바로 사용할 수 있게 됩니다.
    AMyCharacter::AMyCharacter()
    {
        // 카메라 컴포넌트 생성 및 초기화
        CameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));
        CameraComponent->SetupAttachment(RootComponent);
    
        // 기본 이동 속도 설정
        BaseMoveSpeed = 600.0f;
    }
    
    
  3. 기본 클래스 설정:
    • 언리얼 엔진에서는 각 클래스가 UCLASS() 매크로로 정의된 고유한 객체로 관리되며, 생성자에서 클래스가 엔진의 특정 기능과 어떻게 통합될지를 결정하는 기본 설정을 수행합니다.
    • 예를 들어, bReplicates 속성을 true로 설정하여 네트워크 멀티플레이 환경에서 해당 액터가 복제되도록 하거나, PrimaryActorTick.bCanEverTick을 설정해 매 프레임마다 Tick() 함수가 호출되도록 할 수 있습니다.
  4. 메모리 및 성능 최적화:
    • 생성자에서 필요한 변수나 컴포넌트만 초기화하여 메모리 사용량을 최적화할 수 있습니다. 필요 없는 컴포넌트나 속성은 초기화하지 않거나 설정하지 않음으로써 성능 최적화를 할 수 있습니다.
  5. 객체의 초기 상태 보장:
    • 생성자는 객체가 처음 생성될 때 초기 상태를 확실히 보장해주는 역할을 합니다. 이를 통해 코드의 안정성을 높이고, 이후의 로직에서 특정 변수나 컴포넌트가 초기화되지 않아 발생할 수 있는 오류를 방지할 수 있습니다.

언리얼 엔진에서 생성자와 BeginPlay()의 차이점

  • 생성자는 객체가 메모리에 할당될 때 한 번 호출되며, 주로 객체의 기본 속성과 컴포넌트 초기화에 사용됩니다.
  • **BeginPlay()**는 게임이 실제로 시작될 때 호출되는 함수로, 생성자에서 초기화된 객체를 바탕으로 게임 로직과 상호작용하는 작업을 수행합니다. 예를 들어, BeginPlay()에서는 다른 객체와의 관계 설정, 이벤트 바인딩, 초기 화면 출력 등의 작업이 이루어집니다.

예시 코드

AMyCharacter::AMyCharacter()
{
    // 캐릭터 이동 속도 설정
    BaseMoveSpeed = 600.0f;

    // 스프링 암 컴포넌트 생성 및 초기화
    SpringArmComponent = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArm"));
    SpringArmComponent->TargetArmLength = 300.0f;
    SpringArmComponent->SetupAttachment(RootComponent);

    // 카메라 컴포넌트 생성 및 초기화
    CameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));
    CameraComponent->SetupAttachment(SpringArmComponent);
}

이 코드에서는 캐릭터 클래스의 생성자에서 이동 속도를 설정하고, 카메라와 스프링 암 컴포넌트를 생성 및 초기화하여 기본 상태를 구성하고 있습니다.


요약

언리얼 엔진에서 C++ 생성자는 객체가 메모리에 할당될 때 필요한 기본 속성컴포넌트를 초기화하여 객체의 초기 상태를 보장하고, 안정적인 게임 로직을 구축할 수 있도록 하는 중요한 역할을 합니다. 이를 통해 게임 개발 과정에서 각 객체가 의도한 대로 초기화된 상태로 사용될 수 있습니다.


"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


🎬 유튜브 채널 🎬

 

위로그@WiLog

📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리 입니다. 📢 위로그@WiLog 는 자기주도학습을 목적으로 라이브 스트리밍을 합니다. 📢 1인 게임 개발을 목표로 Unreal과 Blender를 학습 중입니

www.youtube.com

🎬 치지직 채널 🎬

 

위로그 채널 - CHZZK

지금, 스트리밍이 시작됩니다. 치지직-

chzzk.naver.com


반응형