< '언리얼엔진5/[Part1] 이득우의 언리얼 프로그래밍' 카테고리의 글 목록

언리얼엔진5/[Part1] 이득우의 언리얼 프로그래밍 12

[이득우의 언리얼 프로그래밍 Part1 필기] 15. 언리얼 빌드 시스템

언리얼 에디터의 동작 프로젝트 폴더의 uproject 확장자를 더블클릭하면 에디터가 트리거 됨. 에디터의 실행 방식 uproject 확장자는 윈도우 레지스트리에 등록되어 있음. 등록이 안되어 있다면 런처를 실행해 등록 UnrealVersionSelector 프로그램으로 프로젝트 정보가 넘겨짐 UnrealVersionSelector 는 런처가 저장한 에디터 정보로부터 버전에 맞는 에디터를 실행함 UnrealVersionSelector 소스는 에픽게임즈 GitHub에서 확인 가능 언리얼 에디터 구성 게임 제작을 위해 에픽 게임즈가 제공하는 저작 도구 언리얼 엔진의 구성 에디터 : 게임 제작을 위해 제공되는 응용 프로그램 (일반적으로 인식하는 언리얼 엔진) 게임 빌드 : EXE 파일과 리소스로 이루어진 독립적..

[이득우의 언리얼 프로그래밍 Part1 필기] 14. 오브젝트 관리 II 패키지

언리얼 오브젝트 패키지 단일 언리얼 오브젝트가 가진 정보는 저장할 수 있지만, 오브젝트들이 여러 개 조합되어 있다면? -> 복잡한 계층 구조를 가진 언리얼 오브젝트를 효과적으로 저장하고 불러들이는 방법을 통일해야 함. 언리얼 엔진은 이를 위해 패키지(UPackage) 단위로 언리얼 오브젝트를 관리함. 패키지의 중의적 개념 언리얼 엔진은 다양한 곳에서 단어 패키지를 사용하고 있음. 언리얼 오브젝트를 감싼 포장 오브젝트를 의미함. 개발된 최종 콘텐츠를 정리해 프로그램으로 만드는 작업. DLC와 같이 향후 확장 콘텐츠에 사용되는 별도의 데이터 묶음을 의미하기도 함. 패키지(Package) 와 에셋(Asset) 언리얼 오브젝트 패키지는 다수의 언리얼 오브젝트를 포장하는데 사용하는 언리얼 오브젝트. 모든 언리얼 ..

[이득우의 언리얼 프로그래밍 Part1 필기] 13. 오브젝트 관리 I 직렬화

직렬화 오브젝트나 연결된 오브젝트의 묶음(오브젝트 그래프)을 바이트 스트림으로 변환하는 과정 복잡한 데이터를 일렬로 세우기 때문에 직렬화 라고 불린다. 거꾸로 복구시키는 과정도 포함해서 의미 시리얼라이제이션(Serializaiton) : 오브젝트 그래프에서 바이트 스트림으로 디시리얼라이제이션(Deserialization) : 바이트 스트림에서 오브젝트 그래프로 직렬화가 가지는 장점 1. 현재 프로그램의 상태를 저장하고 필요할 때 복원할 수 있다. (게임의 저장) 2. 현재 객체의 정보를 클립보드에 복사해서 다른 프로그램에 전송할 수 있다. 3. 네트워크를 통해 현재 프로그램의 상태를 다른 컴퓨터에 복원할 수 있다. ( 멀티플레이어 게임) 4. 데이터 압축, 암호화를 통해 데이터를 효율적이고 안전하게 보관..

[이득우의 언리얼 프로그래밍 Part1 필기] 12 . 언리얼 엔진의 메모리 관리

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

[이득우의 언리얼 프로그래밍 Part1 필기] 10 - 11. TArray, TSet, 구조체, TMap

C++ STL과 언리얼 컨테이너 라이브러리의 차이점 C++ STL 언리얼 컨테이너 라이브러리 (언리얼 자체제작) 범용적으로 설계되어 있다. 언리얼 엔진에 특화되어 있다. 표준이기 때문에 호환성이 높다. 언리얼 오브젝트 구조를 안정적으로 지원한다. 많은 기능이 엮여 있어 컴파일 시간이 오래 걸림. 가볍고 게임 제작에 최적화되어 있음. TArray - 오브젝트를 순서대로 담아 효율적으로 관리하는 용도 TSet - 중복되지 않는 요소로 구성된 집합을 만드는 용도로 사용 TMap - 키, 밸류 조합의 레코드를 관리하는 용도로 사용 TArray C++ STL 의 Vector 와 유사하다. 동적할당 불가 / 가변 배열 데이터가 순차적으로 모여있어서 효과적 사용이 가능하다. 캐시 효율이 높다. 배열의 맨 끝 추가는 ..

[이득우의 언리얼 프로그래밍 Part1 필기] 9. 설계 : 델리게이트

강한 결합 클래스들이 서로 의존성을 가지는 경우. 이전에 예시에서 사용한 Card를 Person이 가지고 있다고 가정했을 때, Card가 없는 경우 Person이 만들어질 수 없다. 이때 Person은 Card 에 대한 의존성을 가진다고 한다. 느슨한 결합 실물에 의존하지 말고 추상적 설계에 의존하라.(DIP 원칙) Person 이 Card 가 필요한 이유는 출입 확인 때문 출입에 관련된 추상적인 설계에 의존하면 ICheck 를 상속받은 카드 인터페이스를 선언해서 해결 유지 보수를 쉽게 만들어 준다. ※ DIP원칙 : 의존 역전 원칙 - DIP (Dependency Inversion Principle) DIP 원칙이란 객체에서 어떤 Class를 참조해서 사용해야하는 상황이 생긴다면, 그 Class를 직접..

[이득우의 언리얼 프로그래밍 Part1 필기] 7-8. 언리얼 C++ 설계(인터페이스, 컴포지션)

언리얼 C++ 인터페이스반드시 구현할 행동을 지정하는데 활용한다.접두사 U-> Type 클래스 / 접두사 I -> 인터페이스 클래스언리얼 C++ 인터페이스는 자바 등과 다르게 기본로직에 구현이 가능하다.인터페이스에서 가상 함수를 선언하게 되면 상속받은 클래스들은 구현이 필수이다.가상함수를 인터페이스 내에서 꼭 가상으로 유지할 필요 없다. 인터페이스 선언에서도 코드 구현이 가능하다. (단지 이때는 하위 클래스에서 구현을 하면 안된다. 추상이 아니므로.)class UNREALINTERFACE_API ILessonInterface{ GENERATED_BODY()public: UNREALINTERFACE_API (프로젝트 이름_API) 이 전처리 구문은 외부 모듈이 현재 모듈 내의 클래스에 접근 가능한지 지시하..

[이득우의 언리얼 프로그래밍 Part1 필기] 5-6. 언리얼 엔진 리플렉션 시스템

언리얼 엔진 게임 프레임워크는 리플렉션 시스템을 기반으로 짜여져 있기 때문에 이해하는 것이 중요하다. 리플렉션 시스템이란?프로그램 실행 시간에 자기 자신을 조사하는 것.다시 말하자면 프로그램이 실행 중에 동적으로 프로그램 내의 클래스의 데이터들에 접근하고 조작하는 것을 지원하는 시스템이다.C++ 에서는 이것을 지원하지 않아서 언리얼에서 자체적으로 만들었다. 우리가 컴파일 전 작성해놓은 매크로를 헤더 툴이 분석해서 리플리케이션을 구성하는 소스코드를 만들어준다. UPROPERTY() , UFUNCTION() 과 같이 매크로를 적어놓고 선언을 해주면 엔진의 가비지 컬렉터가 관리 해주는데 그렇지 않을 떄는 직접 프로그래머가 관리 해주면 된다. UField->UStruct   ->UClass이렇게 상속 받고 US..

[이득우의 언리얼 프로그래밍 Part1 필기] 4. 언리얼 오브젝트 기초

성능을 위해서 C++ 을 버릴 수 없기 때문에 C++의 매크로 기능을 활용해서 모던, 객체지향 언어들이 가지고 있는 기능을 언리얼 엔진 자체적으로 구현했다.일반 C++ 오브젝트는 접두사 F 언리얼 오브젝트는 접두사 U     // 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() }; #incl..

[이득우의 언리얼 프로그래밍 Part1 필기] 3.언리얼C++ 기본타입과 문자열

int 사용 시에는 int32 주로 사용데이터 통신 등 바이너리 데이터를 주고 받을 때에는 uint8 사용 bool 타입 크기가 명확하지 않음헤더 파일에는 불리언 데이터 타입을 사용하지 않고 바이트 정보를 사용함  - CPP 파일에서는 bool 자유롭게 사용해도 무방 캐릭터 인코딩언리얼이 문자열을 따로 지정하는 이유 - ANSI, ASCII, EUC-KR, CP949 , UTF-8, UTF-16 등의 여러 문자열들이 아직도 사용되고 있다. 언리얼엔진에서는 TCHAR 라는 고유한 문자열 처리 방식을 제공하고 있어 singlebyte, multibyte, Unicode 세 가지 타입을 신경 쓸 필요 없이 TCHAR 하나만 가지고 문자열을 처리해주면 된다. UTF-8 - 필요할 때 가변으로 집어넣음 (메모리 ..