게임 프로그래밍의 특수성
단일 컴퓨터에서의 최대 성능 발휘, 방대하고 복잡한 기능을 안정적으로 관리
C++
- 안정성보다 성능 중시
- 메모리 직접 제어
- Cache 활용 극대화
- 저수준 API 직접 호출
- 복사 작업의 최소화
후발 주자 언어(JAVA, C#)
- 안정성 중시
- 유지보수성 향상
- 크래시로부터 보호
- 자동 메모리 관리
- 고질적 실수 예방
시간이 지날수록 모던 객체 지향 설계의 중요성이 높아짐
성능을 위해 기존 C++를 포기할 수 없었기 때문에 언리얼에서 C++의 매크로 기능을 사용해
기존 C++를 확장해 모던 객체지향 설계가 가능하도록 만듦.
언리얼 C++
- 메모리 직접 제어
- Cache 활용 극대화
- 저수준 API 직접 호출
- 복사 작업 최소화
- 유지보수성 향상
- 크래시로부터 보호
- 자동 메모리 관리
- 고질적 실수 예방
자체적으로 새로운 시스템 구축
언리얼 오브젝트
언리얼 엔진이 설계한 새로운 시스템의 단위 오브젝트(객체)
- 기존 C++ 오브젝트에 모던 객체지향 설계를 위한 다양한 기능을 추가한 오브젝트
- 일단 C++ 오브젝트와 언리얼 오브젝트의 두 객체를 모두 사용 가능
- 구분을 위해 일반 C++ 오브젝트는 접두사 F, 언리얼 오브젝트는 접두사 U 사용
각 오브젝트의 사용 용도
- C++ 오브젝트 : 저수준의 빠른 처리를 위한 기능 구현
- 언리얼 오브젝트 : 콘텐츠 제작에 관련된 복잡한 설계 구현에 사용
언리얼 오브젝트가 가지는 특징
- 클래스 기본 객체(CDO): 클래스의 기본 값과 타입 정보의 제공
- 리플렉션(Reflection): 런타임에서 클래스 정보의 참조 기능
- 인터페이스(Interface): 모던 객체지향 언어가 제공하는 인터페이스의 제공
- 향상된 열거형: 보다 향상된 열거형의 지원
- 델리게이트(Deligate): 객체간의 결합을 낮출 수 있는 델리게이트 기능의 제공
- 가비지 컬렉션(Garbage Collection): 자동 메모리 관리
- 향상된 구조체(Struct): 리플렉션이 가능한 구조체의 지원
- 직렬화(Serialization): 객체 정보를 바이트 스트림으로 저장, 전송, 불러들이는 기능
UObject
언리얼에서 오브젝트의 베이스 클래스는 UObject이다.
UObject에서 파생되는 클래스에는 UCALSS 매크로를 사용하여 태그해주어야 UObject 처리 시스템에서 인식하게 됨
오브젝트를 생성하기 위한 명령어
NewObject, NewNamedObject, ConstructObject, New
#pragma once
#include 'Object.h'
#include 'MyObject.generated.h'
/**
*
*/
UCLASS() //언리얼 오브젝트임을 알리는 선언
//UNREALOBEJCT_API (프로젝트이름_API) :
//다른 DLL, 다른 모듈에서도 MyObject를 사용할 수 있게 개방해주는 것
//없애면 해당 모듈 내에서만 사용할 수 있다
class UNREALOBEJCT_API UMyObject : public UObject
{
GENERATED_BODY()
};
GENERATED_BODY()
BODY_MACRO_COMBINE 내부의 (CURRENT_FILE_ID, _, __LINE(라인정보)__, _GENERATED_BODY)
를 매크로가 가지고 있는 토큰(##)을 사용해 하나의 긴 단어로 만듦.
MyObject.generated.h에서 사용되며
#include 'MyObject.generated.h'의 generated.h는 복잡한 경로를 따라 숨겨져있음
#include 'MyObject.generated.h'은 해당 부분의 내용을 사용하겠다라는 의미
해당 부분의 하위에는 또 다시 재정의되어있음
라인 정보가 변경되거나 MyObject.generated.h가 삭제되더라도 컴파일 과정에서 수정되고 다시 생성됨
헤더 parsing → UnrealHeaderTool(UHT) 실행 → UHT가 헤더에 선언된 내용을 분석하고 매크로들을 참조해 .generated.h 파일을 생성.
.generated.h 파일이 없으면 include가 불가능하고, 제대로 된 C++ 프로젝트가 아니게 됨.
언리얼 오브젝트는 코드를 분석하는 단계가 있어 바로 컴파일 되지 않고 UHT에 의해 소스 코드를 생성하고 자동으로 생성된 코드를 포함해 최종 빌드가 진행되는 것.
언리얼 엔진은 C++을 확장해 언리얼 오브젝트라는 객체 구조를 고안하여
지정된 매크로를 사용해 빌드를 수행하면 추가 코드가 자동으로 만들어지는 구조를 가짐
언리얼 오브젝트를 사용해 성능도 챙기면서 대규모 게임 제작을 안정적으로 설계하고 구현할 수 있음.
언리얼 엔진 기술의 핵심
이득우의 언리얼 프로그래밍 Part1 | 인프런
이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해 강의 | 이득우 - 인프런
이득우 | 대기업 현업자들이 수강하는 언리얼 C++ 프로그래밍 전문 과정입니다. 언리얼 엔진 프로그래머라면 게임 개발전에 반드시 알아야 하는 언리얼 C++ 기초에 대해 알려드립니다., [사진] 언
www.inflearn.com
'게임 개발 > 언리얼 C++' 카테고리의 다른 글
언리얼C++ - 언리얼 오브젝트 리플렉션 시스템 2 (1) | 2024.11.13 |
---|---|
언리얼C++ - 언리얼 오브젝트 리플렉션 시스템 1 (6) | 2024.11.12 |
언리얼C++ - 기본타입과 문자열 (2) | 2024.11.10 |
언리얼C++ - 언리얼 코딩 규칙 (1) | 2024.11.09 |
언리얼C++ - 헬로 언리얼! (0) | 2024.11.07 |