그냥 게임개발자

언리얼 오브젝트 처리 본문

Unreal스터디

언리얼 오브젝트 처리

sudoju 2024. 1. 1. 15:46

 

https://docs.unrealengine.com/5.3/ko/unreal-object-handling-in-unreal-engine/

 

 

클래스, 프로퍼티, 함수에 적합한 매크로를 마킹해 주면 UClass, UProperty, UFunction으로 변환됨.

이렇게 변환이 된 클래스, 프로퍼티, 함수 들을은 언리얼 엔진에 관리가 들어가기 시작된다.

 

이렇게 변환이 되면 좋은 점은

자동 프로퍼티 초기화

  • C++의 경우에는 생성자나 기본 Initializer를 통해서 초기화하지 않으면 쓰레기 값이 들어감
  • UPROPERTY() 마킹하는 경우네는 자동으로 값이 0으로 기본으로 채워진다.

 

레퍼런스 자동 업데이트

  • 언리얼 시스템이 제공하는 자동 메모리 관리에 이점을 받을 수 있다 라는 것으로 이해.

Serialization

  • 언리얼 오브젝트 객체를 우리가 지정된 포맷에 맞게 저장하거나 불러드리는 것을 일괄적으로 진행할 수가 있는데, 이 저장되는 정보들은 우리가 UPROPERTY()라는 것으로 명시를 해줘야 이것들만 언리얼 오브젝트에서 빼내서 디스크에 저장하고 불러드릴 수 있데 된다.
  • 모든 UPROPERT(transient(휘발성)) 마킹 또는 생성자 이후 기본 값에서 미변경 상태가 아닌 이상 자동으로 읽고 쓰기가 가능

 

프로퍼티 값 업데이트 하기

  • UClass의 CDO가 변경되면 엔진은 그 클래스의 모든 인스턴스 로드시 알아서 변경사항을 적용 시도한다.
  • 예를 들어 AEnemy 오브젝트를 여럿 배치했고, AEnemy 생성자의 Health 기본값을 100으로 설정했다 치면, 여기서 또 Enemy_3가 특별히 쎈 놈이라 그 Health를 500으로 설정했다 가정하면, 여기서 마음이 바뀌어 Health 디폴트 값을 150으로 올렸다고 가정하면 다음 번 레벨을 로드 할 때, 언리얼은 CDO를 변경했다고 알아채고, 이전 기본 Health 값(100)인 AEnemy 모든 인스턴스 Health 값을 150으로 업데이트 한다.
  • Enemy_3의 Health는 500 그대로 남아있는데, 이전 기본값이 아니기 때문이다.

 

에디터 통함

  • 프로퍼티와 매크로 안에 어떤 메타데이터를 넣어주면 에디터와 통합되면서 유용한 기능들을 우리가 사용할 수 있다.

런타임 유형 정보 및 형변환

  • 런타임에 어떤 정보를 얻을 수 있고 안전하게 캐스팅, 형변환이 가능해짐.
  • 또한 어떤 함수를 오버라이드 받을 때 Super 같은 키워드들도 결국에는 Reflection 시스템이 있기에 이 정보를 설정하는 것이 가능
class AEnemy : public ACharacter
{
    virtual void Speak()
    {
        Say("Time to fight!");
    }
};

class AMegaBoss : public AEnemy
{
    virtual void Speak()
    {
        Say("Powering up! ");
        Super::Speak();
    }
};
  • 또한 Cast함수를 사용해 좀 더 클래스로 안전하게 형변환하거나 실패하는 경우에 if문을 사용해 완벽하게 NULL을 보장해주기에 안전하게 코딩을 진행할 수 있다.
class ALegendaryWeapon : public AWeapon
{
    void SlayMegaBoss()
    {
        TArray<AEnemy> EnemyList = GetEnemyListFromSomewhere();

        // The legendary weapon is only effective against the MegaBoss
        for (AEnemy Enemy : EnemyList)
        {
            AMegaBoss* MegaBoss = Cast<AMegaBoss>(Enemy);
            if (MegaBoss)
            {
                Incinerate(MegaBoss);
            }
        }
    }
};

 

가비지 컬렉션

  • 더 이상 참조되지 않는 즉, 더 이상 사용되지 않는 UObject는 자동으로 회수해서 메모리에서 소멸시켜준다.

 

네트워크 리플리케이션

  • 언리얼 오브젝트의 UPROPERY를 지정하게 되면 자동으로 디스크에 저장하고 불러드릴 수 있는 것처럼 네트워크 통신을 통해서도 해당 UPROPERTY를 자동으로 전송하고 받을 수 있게 언리얼 내부적으로 시스템이 자동으로 구축되어 있다.

'Unreal스터디' 카테고리의 다른 글

인터페이스란?  (0) 2024.01.01
Assert(어썰트)  (0) 2024.01.01
리플렉션 시스템이란?  (0) 2024.01.01
언리얼 오브젝트란  (1) 2024.01.01
캐릭터 인코딩 문서 파악  (1) 2024.01.01