Unreal Engine 9

[Unreal Engine] 게임 제작 기초

1. 언리얼 게임 프레임워크1) 게임 콘텐츠의 구조게임 제작을 위해 언리얼 엔진은 자체적으로 설계한 프레임워크를 제공이를 게임플레이 프레임워크 (Gameplay Framework)라고 부름 2) 월드 (World)게임 콘텐츠를 담기 위해 제공되는 가상의 공간월드는 시간, 트랜스폼, 틱을 서비스로 제공월드 세팅이라는 콘텐츠 제작을 위한 기본 환경 설정을 제공월드의 기본 단위는 액터(Actor)로 정의되며 액터 클래스는 언제나 접두사 A를 사용월드의 역할게임 콘텐츠를 담는 공간 (Transform)게임 콘텐츠의 진행 (Tick)게임 흐름을 위한 시간 (Time)기본 환경 설정 (World Setting)월드의 단위 구성 요소 (Actor) 3) 게임 모드 (Game Mode)게임 규칙을 지정하고 게임을 ..

[Unreal Engine] 메모리 관리

1. 언리얼 엔진의 자동 메모리 관리1) C++ 언어 메모리 관리의 문제점C++은 저수준으로 메모리 주소에 직접 접근하는 포인터를 사용해 오브젝트를 관리프로그래머가 직접 할당(new)과 해지(delete) 짝 맞추기를 해야 함이를 잘 지키지 못하는 경우 다양한 문제가 발생 가능잘못된 포인터 사용 예시메모리 누수 (Leak): new를 했는데 delete 짝을 맞추지 못함. 힙에 메모리가 그대로 남아있음허상 (Dangling) 포인터: (다른 곳에서) 이미 해제해 무효화된 오브젝트의 주소를 가리키는 포인터와일드 (Wild) 포인터: 값이 초기화되지 않아 엉뚱한 주소를 가리키는 포인터잘못된 포인터 값은 다양한 문제를 일으키며 한 번의 실수는 프로그램을 종료시킴게임 규모가 커지고 구조가 복잡해질수록 프로그래머..

[Unreal Engine] Container Library

1. Container Library1) 언리얼 컨테이너 라이브러리언리얼 엔진이 자체 제작해 제공하는 자료구조 라이브러리줄여서 UCL(Unreal Container Library) 라고도 함언리얼 오브젝트를 안정적으로 지원하며 다수 오브젝트 처리에 유용하게 사용됨언리얼 C++은 다양한 자료구조 라이브러리를 직접 만들어 제공하고 있음실제 게임 제작에 유용하게 사용되는 라이브러리로 세 가지를 추천함TArrayTMapTSet 2) C++ STL과 언리얼 컨테이너 라이브러리의 차이점C++ STL은 범용적으로 설계되어 있음C++ STL은 표준이기 때문에 호환성이 높음C++ STL은 많은 기능이 엮여 있어 컴파일 시간이 오래 걸림언리얼 컨테이너 라이브러리는 언리얼 엔진에 특화되어 있음언리얼 컨테이너 라이브러리는 ..

[Unreal Engine] Delegate

1. 느슨한 결합1) 강한 결합과 느슨한 결합강한 결합 (Tight Coupling)클래스들이 서로 의존성을 가지는 경우를 의미함위 예시에서 Card가 없는 경우 Person이 만들어질 수 없음이때 Person은 Card에 대한 의존성을 가진다고 함핸드폰에서도 인증할 수 있는 새로운 카드가 도입된다면? 느슨한 결합 (Loose Coupling)실물에 의존하지 말고 추상적 설계에 의존하라. (DIP 원칙)왜 Person은 Card가 필요한가? 출입을 확인해야 하기 때문출입에 관련된 추상적인 설계에 의존해야 함ICheck를 상속받은 새로운 카드 인터페이스를 선언해 해결이러한 느슨한 결합 구조는 유지 보수를 손쉽게 만들어 줌 2) 느슨한 결합의 간편한 구현 - 델리게이트 (Delegate)문서 링크: 언리얼..

[Unreal Engine] Composition

1. 언리얼 C++의 컴포지션 기법1) 컴포지션 (Composition) 객체 지향 설계에서 상속이 가진 Is-A 관계만 의존해서는 설계와 유지보수가 어려움컴포지션은 객체 지향 설계에서 Has-A 관계를 구현하는 설계 방법컴포지션의 활용복합적인 기능을 거대한 클래스를 효과적으로 설계하는데 유용하게 사용할 수 있음 2) 모던 객체 설계 기법과 컴포지션좋은 객체 지향 설계 패턴을 제작하기 위한 모던 객체 설계 기법 (SOLID)Single Responsibility Principle (단일 책임 원칙)하나의 객체는 하나의 의무만 가지도록 설계한다.Open-Closed Principle (개방 폐쇄 원칙)기존에 구현된 코드를 변경하지 않으면서 새로운 기능을 추가할 수 있도록 설계한다.Liskov Substi..

[Unreal Engine] Interface

1. 언리얼 C++ 인터페이스의 선언1) 언리얼 C++ 인터페이스인터페이스란?객체가 반드시 구현해야 할 행동을 지정하는데 활용되는 타입다형성(Polymorphism)의 구현, 의존성이 분리(Decouple)된 설계에 유용하게 활용언리얼 엔진에서 게임 콘텐츠를 구성하는 오브젝트의 설계 예시월드에 배치되는 모든 오브젝트 (안 움직이는 오브젝트를 포함, Actor)움직이는 오브젝트 (Pawn)길찾기 시스템을 반드시 사용하면서 움직이는 오브젝트 (INavAgentInterface 인터페이스를 구현한 Pawn) 2) 언리얼 C++ 인터페이스 특징인터페이스를 생성하면 두 개의 클래스가 생성됨U로 시작하는 타입 클래스I로 시작하는 인터페이스 클래스객체를 설계할 때 I 인터페이스 클래스를 사용U타입 클래스 정보는 런..

[Unreal Engine] Reflection System

1. Reflection System문서 링크 : Reflection System / Unreal Object Handling 1) 언리얼 오브젝트의 구성 언리얼 오브젝트에는 특별한 프로퍼티와 함수를 지정할 수 있음관리되는 클래스 멤버 변수: UPROPERTY관리되는 클래스 멤버 함수: UFUNCTION에디터와 연동되는 메타 데이터를 심을 수 있음리플렉션 시스템을 사용해 접근 지시자와 무관하게 값을 설정할 수 있음언리얼 오브젝트에는 항상 클래스 정보를 담은 UClass 객체가 매칭되어 있음클래스를 사용해 자신이 가진 프로퍼티와 함수 정보를 컴파일 타임과 런타임에서 조회할 수 있음NewObject API를 사용해 생성해야 함 2) 클래스 기본 오브젝트 (CDO, Class Default Object) 언..

[Unreal Engine] Object

1. Unreal Object문서 링크 : Unreal Object 1) 모던 객체 지향 설계 원칙디자인 패턴을 필두로 안정적인 설계 방법이 연구됨유지보수와 유연함, 확장성 향상을 위한 객체 지향 프로그래밍 원칭 (SOLID)Single responsibility principle: 하나의 클래스는 하나의 책임만 가져야 한다.Open/closed principle: 클래스 설계를 변경하지 않고 동작을 확장할 수 있어야 한다.Liskov substitution principle: 자식 클래스는 부모 클래스를 대체 사용할 수 있어야 한다.Interface segregation principle: 작고 명확한 인터페이스들로 분리해 관리해야 한다.Dependency inversion principle: 구현을 ..

[Unreal Engine] GameInstance로 Hello Unreal! 출력하기

1. 프로젝트 생성 (ver. 5.1.1) 2. GameInstance 클래스 생성 3. UGameInstance의 Init() 함수 오버라이드 4. Init() 함수 내 로그 출력 함수 구현 ※ 가상 함수를 오버라이드를 하는 경우 Super 키워드를 사용해 부모 클래스의 함수를 호출해줘야 함. UE_LOG(로그 카테고리, 로그 수준, 포맷)로그 카테고리: LogTemp, 사용자 지정 등로그 수준: Log, Warning, Error 등포맷: printf() 와 유사→TEXT() 매크로를 사용해 String을 다룸 5. 에디터 실행 게임 어플리케이션의 뼈대가 되는 Game Instance : 싱글턴 패턴으로 단일 인스턴스로 관리됨지정한 Game Instance의 Init() ..