다양한 기록

언리얼 오브젝트 기초 본문

언리얼 엔진/언리얼 엔진 : 기초

언리얼 오브젝트 기초

라구넹 2024. 12. 18. 18:10

C++의 매크로로 모던 객체 지향 설계가 가능하도록 만듦

 

C++ 오브젝트 : 접두사 F

언리얼 오브젝트 : 접두사 U

 

UObject가 언리얼 오브젝트의 베이스 클래스

UCLASS 매크로 사용하면 UObject 시스템에서 인식하게 됨

 

할당할 때 new가 아니라 newObject<class>() 사용

가비지 컬렉션, 레퍼런스 업데이트 등의 기능을 UObject는 알아서 해줌

후발 언어들의 기능을 매크로로 구현함

 

언리얼 헤더 툴

언리얼의 매크로, 독특한 헤더 파일을 가짐

 

언리얼 오브젝트가 가지는 특징

클래스 기본 객체 (CDO) 클래스의 기본 값과 타입 정보 제공
리플랙션 런타임에서 클래스 정보의 참조 기능
인터페이스  
향상된 열거형  
델리게이트 객체 간의 결합 낮춰줌
가비지 컬렉션  
향상된 구조체 리플렉션이 가능한 구조체의 지원
직렬화(Serialization) 객체 정보를 바이트스트림으로 저장, 전송, 불러들이

 

 

 

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "MyObject.generated.h"

/**
 * 
 */
UCLASS()
class UNREALOBJECT_API UMyObject : public UObject
{
	GENERATED_BODY()
	
};

UNREALOBJECT_API

프로젝트이름_API 로 지정해서 다른 모듈에서 참조할 수 있도록 개방

이거 없으면 다른 모듈에선 참조 못함

 

제네레이트 바디 -> 바디 매크로 컴파인 -> 바디 매크로 컴바인으로 연결

현재 파일 아이디, _, 라인 정보, GENERATED_BODY 네가지를 묶어 하나의 긴 문자열로 만

generated.h에 커런트 파일 아이디 있음

그리고 generated.h 위쪽 보면 그렇게 만들어진게 정의되어 있음

** 이미지에선 잘렸는데 끝에 GENERATED_BODY 붙어 있음

GENERATED_BODY()는 저 부분을 이용하겠다는 것

이런 부분들이 후발 언어 기능 제공을 위해 자동으로 만들어준다고 봐도 되고,

파일 경로가 상당히 숨겨져있는게 일반적인 상황에선 그냥 건드리지 말라는 뜻

 

헤더 파일을 고치면 GENERATED_BODY()가 콜되는 라인 주소가 바뀜

-> 헤더 다시 만들어야 해서 에디터 끄고 새로 빌드해야 하는 것

 

언리얼 헤더 툴이 저거 삭제해도 알아서 만들어줌

언리얼 헤더 툴에 의해 자동으로 생성된 코드를 포함해서 컴파일