그냥 게임개발자
언리얼 오브젝트 처리 본문
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 |