목록언리얼 엔진/기능 (31)
게임 개발 메모장
UObject에서 파생된 UCLASS는 U로 시작하는 이름이어야 한다. Actor에서 파생된 UCLASS는 A로 시작하는 이름이어야 한다. 일반적인 C++클래스는 특별한 이름 규칙이 없지만, 원하는 경우 앞에 F를 붙여 이름을 정할 수 있다. UCLASS : UObject에서 파생 UCLASS 매크로를 사용해 커스텀 C++ 오브젝트를 선언하면 UE4 클래스처럼 동작하는 커스텀 C++ 클래스를 선언 할 수도 있다. UCLASS 매크로를 사용하면 할당과 해제를 할 때 클래스가 UE4의 스마트 포인터와 메모리 관리 루틴을 사용하게 된다. Tip1. UCLASS는 UE4 매크로를 다수 포함한 C++클래스 이다. 이 매크로는 UE4 편집기와의 통합을 도와주는 추가 C++ 헤더 코드를 생성한다. Tip2. UCLA..
버블 정렬(Bubble Sort) 버블 정렬는 서로 인접한 두 원소를 비교하여 정렬하는 알고리즘이다. 0번 인덱스부터 n-1번 인덱스까지 n번까지의 모든 인덱스를 비교하며 정렬한다. 시간 복잡도는 O(n^2)이다. 선택 정렬(Selection Sort) 선택 정렬은 첫 번째 값을 두번째 부터 마지막 값까지 차례대로 비교하여 최솟값을 찾아 첫 번째에 놓고, 두 번째 값을 세 번째 부터 마지막 값까지 비교하여 최솟값을 찾아 두 번째 위치에 놓는 과정을 반복하며 정렬하는 알고리즘이다. 시간복잡도는 O(n^2)이다. 삽입 정렬(Injection Sort) 삽입 정렬은 두 번째 값부터 시작해 그 앞에 존재하는 원소들과 비교하여 삽입할 위치를 찾아 삽입하는 정렬 알고리즘이다. 평균 시간복잡도는 O(n^2)이며, B..
언리얼 엔진의 게임 플레이 플레임워크 언리얼 엔진의 게임을 이루는 구성 요소는 크게 4가지 클래스로 구분된다. 게임의 규칙을 정의하고 진행상황을 기록하는 게임 플레이 클래스 : GameMode, GameState, PlayerState... 플레이어, 아군, 적군같은 아바타(언리얼에서는 이를 Pawn이라고 한다.) 클래스 : Pawn, Character... Pawn클래스를 제어하는 컨트롤러 클래스 : Controller, PlayerController, AIController... 플레이어에게 게임에 관한 정보를 표시해주는 출력 관련 클래스 : HUD, Camera... 1. 게임플레이 클래스 - GameMode, GameState GameMode 모든 게임들에는 기본적인 토대들이 있으며, 이러한 규칙..
- 잘못된 메모리 참조 때문에 발생, 즉, 건드리지 말아야 할 곳을 건드렸기 때문에 발생하는 에러. - 어떤 프로그램이 자신이 운영체제로부터 배정 받지 못한 영역(메모리)에 대해 침범하는 것을 운영체제 수준에서 막아주는 것. - 허용되지 않은 방법으로 메모리에 접근할 때, 허용되지 않은 메모리 영역에 접근할 때 발생해서 사용자가 메모리를 오염시키는 걸 막아주고, 디버깅하기 힘든 메모리 버그를 알려주는 역할. ◈ segmentation fault의 원인 1. null 값을 가리키는 포인터에 접근할 경우 2. 할당 받은 메모리 공간을 넘은 곳을 건드린 경우 3. 더 이상 존재하지 않는 메모리 영역을 가리킬 경우 4. read-only 표시 메모리 영역에 쓰려고 할 경우
모듈(module) 모듈(module)이란 프로그램을 구성하는 구성 요소로, 관련된 데이터와 함수를 하나로 묶은 단위를 의미한다. 보통 하나의 소스 파일에 모든 함수를 작성하지 않고, 함수의 기능별로 따로 모듈을 구성한다. 이러한 모듈을 합쳐 하나의 파일로 작성하는 방식으로 프로그램을 만들게 된다. 위처럼 프로그램 코드를 기능별로 나눠서 독립된 파일에 저장하여 관리하는 방식을 모듈화 프로그래밍이라고 한다. 분할 컴파일 작성된 모듈(module)은 개별적으로 컴파일된 후, 링커에 의해 하나의 실행 파일로 만들어진다. 이렇게 하나의 실행 파일을 만들기 위해서 소스 파일을 여러 개로 나누어 개발하는 방식을 분할 컴파일 방식이라고 한다. 최종적인 실행 파일의 생성을 위해서 접근하는 변수나 호출하는 함수가 어디에..
라이브러리 : 이미 만들어진 코드나 바이너리를 가져와서 프로그래밍 할 때 사용할 수 있는 컬렉션. 대표적으로 Standard Library가 있다. 자주 사용하는 등이 이에 해당한다. 1) Header Only : 일반적으로 코드를 받게 되면 헤더 안에 모든 게 정의되어 있어서 이 헤더를 include 하여 사용하는 경우를 말한다. 2) 동적 라이브러리(Dynamic Link Library) - 프로그램 실행 시 필요시만 외부 DLL 파일에서 함수를 참조한다. - 프로그램 실행 시 프로그램 로딩 시간이 단축된다. - 함수 업그레이드 시 해당 DLL만 수정 배포한다. - 소스 외부 유출 방지 효과가 있다. - 실행 파일 만들때 필요한 파일: .h,.lib (*.dll 참조 용) - ..
빌드(Build)란? 소스 코드 파일을 컴퓨터에서 실행할 수 있는 독립적인 형태로 변환하는 과정과 그 결과를 말한다. 컴파일은 고급언어를 컴퓨터가 이해할 수 있는 저급언어로 바꿔주는 과정 중 하나일뿐 전체적인 과정을 뜻하는게 아니다. 즉, 빌드라는 변환 과정의 큰 틀안에서 동작하는 하나의 과정을 컴파일이라고 하고, 여러 과정이 합쳐진 것이 빌드이다. 또한, 빌드 과정을 도와주는 도구가 Build Tool이다. 실제 코딩을 하고 완성되면 run을 실행하여 결과를 화면에서 볼 수 있는데 이때 Build Tool에 의해 모든 빌드과정이 자동으로 실행되어 우리는 컴파일,빌드라는 개념을 크게 생각하지 않는다. 빌드(Build) : 소스코드 파일을 실행가능한 소프트웨어로 만드는 과정 +) 빌드툴(Build Tool..
코드를 짜다보면, 특정 객체의 클래스 정보를 알기 위해 GetClass 혹은 StaticClass 를 쓰는 것을 볼 수 있다. 그런데 이 둘의 차이는 무엇일까? 한 줄 요악 : StaticClass 는 컴파일 타임에서 UClass 타입의 정보를 얻어오는 것이며, GetClass 는 런타임에서 실제 객체의 클래스를 조회할때 사용된다. AMyActor* ActorPtr = NewObject(...); UObject* ObjPtr = Actor; UClass* MyActorClass = AMyActor::StaticClass(); // AMyActor UClass* ObjectClass = UObject::StaticClass(); // UObject UClass* ActorPtrClass = ActorPtr..
1. PendingKill Actor는 일반적으로 가비지 콜렉팅되지 않는데, 월드 오브젝트가 액터 레퍼런스 목록을 저장하기 때문이다. 액터는 Destroy() 를 호출하여 명시적으로 소멸시킬 수 있다. 그러면 레벨에서 제거되어 pending kill (킬 대기) 상태로 마킹, 잠시 후 다음 가비지 콜렉션 때 지워진다는 뜻이다. 언리얼의 엑터나 컴포넌트는 Destroy를 호출하여 제거를 하게 되면 씬 상에서는 제거된 것으로 보이지만 메모리에서는 Pending Kill 상태가 되어 존재하며 다음 GC(Garbage Collection) 실행시 메모리에서 해제된다. 이는 에디터의 프로젝트 기본 설정상으로 1분단위로 Pending Kill 상태인 오브젝트를 제거하며 사용자가 설정을 변경할 수 있다. C++ 코드..