Unreal Engine 5
-
Chapter 10. UI
10.1 Head-Up Display 10.1-1 HUD - HUD 게임 플레이 동안에 플레이어에게 정보(HP, MP, Minimap, ...)를 보여주는 UI - 캐릭터 스탯 UI 새 C++ 클래스 > UserWidget 부모 클래스 > "SCharacterStatWidget" 새 UserInterface 애셋 > Widget Blueprint > SCharacterStatWidget 부모 클래스 > "WBP_CharacterStatWidget" 아래 그림과 같이 Hierachy 구성. [수정필요. Bind 후에 바로 Update를 한 번 해주는 코드가 없음.] // SCharacterStatWidget.h #pragma once #include "CoreMinimal.h" #include "Bluep..
2023.08.31
-
Chapter 09. Game Data
9.1 Game Data 9.1-1 GameInstance - 데이터를 관리할 클래스 게임에 사용될 데이터가 여러 클래스에 저장된다면? 각 클래스 간의 동기화 문제가 생김. A클래스에선 10이라 했는데, B클래스는 7. 따라서 게임 내에서 단 하나의 개체임이 보장되어야 함. 이를 싱글톤 패턴이라 함. 또한 언리얼 싱글톤 클래스는 엔진 초기화 때부터 게임 종료까지 살아남아 있음. 게임에 사용될 데이터도 동일한 라이프 사이클을 가지므로, 언리얼 싱글톤 클래스를 사용. 다만 싱글톤 클래스의 개체를 언리얼 오브젝트 클래스 생성자에서 사용하면 안됨. - 언리얼 엔진에서 제공하는 싱글톤 클래스 게임 인스턴스 애셋 매니저 게임 플레이 관련 액터(게임 모드, 게임 스테이트) 프로젝트에 싱글톤으로 등록한 언리얼 오브젝트..
2023.08.27
-
Chapter 08. AI
8.1 AIController 8.1-1 AIController 생성 - 언리얼 엔진의 폰은 조종당할 수 있게 설계된 액터를 의미함. 지금까지 폰은 플레이어 컨트롤러에 의해 수동적으로 조종당함. 비헤이비어 트리 모델을 사용해 인공지능을 설계하고, 플레이어가 아닌 인공지능이 NPC를 제어하도록 AIController를 활용해보고자 함. 폰은 플레이어 컨트롤러와 동일한 방식으로 AI 컨트롤러에 빙의됨. - NPC(Non-Player Character) 플레이어가 조종하지 않지만 레벨에 배치되어 스스로 행동하는 캐릭터를 NPC라고 함. - 실습 준비 사항 믹사모 > Characters > "Brute" 검색 후 다운로드 Animations > "Standing Idle" 검색 후 다운로드. Standing I..
2023.08.22
-
Chapter 07. Collision
7.1 Collision Setting 7.1-1 언리얼의 충돌 설정 - 언리얼 엔진에서의 충돌체 제작 방법 따라서 하나의 액터에는 아래 세 가지가 모두 들어갈수도 있음에 유의. 보통은 루트 컴포넌트로 설정되는 기본 도형 컴포넌트(캡슐, 박스, ...)에 대한 이야기임. 앞으로 나오는 "충돌체"라는 단어는 충돌을 담당하는 컴포넌트 혹은 그 영역을 의미함. 스태틱매시 컴포넌트 스태틱매시 애셋을 그대로 충돌체로 사용하는 방법. 스태틱매시를 더블클릭하면 열리는 스태틱매시 에디터에서 해당 충돌체 영역을 설정하고 확인할 수 있음. 스태틱매시 애셋에 콜리전을 심으면 스태틱매시 컴포넌트에서 비주얼과 충돌이라는 두 가지 기능을 설정할 수 있어서 관리가 간편해짐. 기본 도형(Primitive) 컴포넌트 구체, 박스, 캡..
2023.08.20
-
Chapter 06. Animation
6.1 Animation Instance 6.1-1 애니메이션 인스턴스 - 실습 준비 이전에 열심히 만든 시점 변환 관련 코드는 모두 지우고자 함. 시점은 고정한 상태로 앞으로의 실습을 진행. 시점 변환 코드가 쓸데없이 너무 많음. 필요한 시점이 있다면 앞서 배운 내용을 토대로 제작해보자. // SPlayerCharacter.h #pragma once #include "CoreMinimal.h" #include "GameFramework/Character.h" #include "InputActionValue.h" #include "SPlayerCharacter.generated.h" UCLASS() class STUDYPROJECT_API ASPlayerCharacter : public ACharacte..
2023.08.20
자료구조 알고리듬
-
7. Implementation
7.1 Implementation해커랭크3DSurface) 공간지각력 싸움.#pragma once#include using namespace std;int surfaceArea(vector> A) { int H = A.size(); int W = A[0].size(); int ResultArea = 0; for (int i = 0; i 해커랭크ClimbingTheLeaderboard) 순위를 구하는 문제. 단, 중복제거 로직이 필요한 문제. sort() -> unique() -> erase() 순서의 로직을 통해 중복 제거. 그리고 순서 비교.#pragma once#include #include std::vector climbingLeaderboard(std::vector r..
2023.02.07
-
6. Linked list, Hash table
6.1 Linked List Def) Linked List 각 노드가 데이터와 다음 노드의 메모리 주소를 저장하는 자료구조. Note) 장단점 장점1. 자료구조의 크기를 동적으로 조절 가능함. 장점2. 삽입, 삭제할 때 메모리 주소만 바꾸면 되므로 O(1)의 시간복잡도로 가능. 단점1. 임의 접근이 불가능함. 특정 요소에 접근하기 위해서는 O(n)의 시간복잡도로 가능. 단점2. 각 노드가 다음 노드의 메모리 주소도 저장해야 하므로 배열에 비해 공간복잡도가 늘어날 수 있음. 단점3. 연속된 메모리 공간이 아니므로, 캐시 효율성이 비교적 낮음. Note) 구현코드#include using namespace std;template class SNode {publ..
2022.12.30
-
5. Dynamic Programming, Backtracking
5.1 Dynamic Programming 5.1-1 Memoization Note) 기존의 피보나치 수열 코드#pragma onceint fibo(int n){ if (1 == n) { return 1; } if (2 == n) { return 1; } return fibo(n - 1) + fibo(n - 2);} Note) 기존 피보나치 수열의 코드를 도식화하면 아래와 같음. 이 경우, n의 크기가 커지면 커질수록 재귀함수의 호출 횟수가 비약적으로 늘어남. 그래서 한 번 계산된 피보나치 값은 저장해둔다면, 꽤나 큰 효과를 얻을 수 있음. 즉, 재귀함수만 사용하는 것이 아닌 저장을 위한 메모리를 적절하게 함께 사용함. 이때 저장을 위한 메모리 사용 기법을 Me..
2022.12.01
-
4. Graph, DFS, BFS
4.1 Graph4.1-1 그래프 Def) 그래프(Graph) 개체 간의 연결 관계를 표현할 수 있는 비선형 자료구조 ex. 도시들 간의 연결, 지하철 노선도, SNS 친구 관계도 등 Note) 결국 트리는 그래프의 한 종류이다. 즉, 트리를 추상화하면 그래프가 됨. Note) 그래프의 구성 요소 - 그래프 G = (V, E) - 정점 V(Vertex, Node) 그래프를 구성하는 기본 단위. 노드. 데이터를 저장하거나 상태를 표현 - 엣지 E(Edge, Link) 정점과 정점을 잇는 선. 간선. 방향을 가질 수도 있음. 가중치(Weight)를 가질 수도 있음. Note) 그래프 관련 용어가중치(Weight)엣지에 ..
2022.11.22
-
3. Tree, Binary Search Tree
3.1 Tree3.1-1 Binary Tree Note) 이진 트리 좀 더 자세한 내용은 여기에서 참고.#include #include using namespace std;templateclass STree{ struct SNode { public: SNode(const T& InData) : Data(InData) , LeftChild(nullptr) , RightChild(nullptr) { } public: T Data; std::unique_ptr LeftChild; std::unique_ptr RightChild; };public:..
2022.11.04
작업 일지
-
Deferred Rendering
1. Forward Rendering 1.1 Forward Rendering이란, - 한 마디로, 기존의 Rendering 방식. 개체 A가 Render Target에 그려지려면 Vertex Shader와 Pixel Shader의 연산이 이뤄지는데, 기존에는 Pixel Shader에서 빛 연산을 진행함. 1.2 Forward Rendering의 문제점 - 개체 X1, X2, ..., Xn이 모두 Pixel Shader에서 빛 연산을 진행함. 어떤 개체는 이미 가려져서 빛 연산을 진행할 필요가 없는데도 개체의 개수만큼 빛 연산을 진행하는 비효율이 발생함. 2. Deferred Rendering 2.1 Deferred Rendering 구조 - Render Target을 여러 개 만듦. Light를 구현하는..
2022.12.19
-
Post Process Effects
1. 클래스 구조 1.1 현재의 랜더링 구조 - 카메라가 랜더링을 담당함. 카메라에는 메인 카메라와 UI 카메라가 있음. - 각 카메라가 Render Target을 가지고 있음. 즉, 메인 카메라도 본인만의 Render Target을 UI 카메라도 본인만의 Render Target을 가지고 있음. 그래서 마지막에 Back Buffer의 Render Target->Merge(MainCameraRenderTarget) 또 Merge(UICameraRenderTarget)을 실행해서 합치는 것. - GameEngineLevel::Render()에서 카메라에 종속된 랜더러들을 모두 그린뒤, 각 카메라의 Post Process Effects가 적용되게끔 코드가 작성되어 있음. 대략 이런식으로 Post Proces..
2022.11.24
-
프로젝트 내의 셰이더 구조 고찰
1. 클라 팀원이 에디터에서 셰이더의 종류를 고르고, 해당 셰이더의 세기, 횟수 등을 조절할 수 있게끔 하고자 함. 근데 문제는 여러가지 셰이더를 동시에 적용 되게끔 하는 것. 1.1 셰이더 조절 관련 랜더러 클래스를 셰이더마다 만들고자 함. 그럼 에디터에서 다양한 랜더러 클래스 관련 코드와의 동기화?가 필요함. 즉, 코드 제너레이터 같은 느낌의 기능이 필요해져서 너무 배꼽이 큰듯하여 포기했음. 1.2 셰이더 조절 관련 랜더러 클래스는 딱 하나만 만듦. 셰이더 파일도 한 개만 작성해서, 거기에 셰이더별 코드를 모아둔다? 너무 길어지고, 가독성이 낮아질듯. 1.3 셰이더 조절 관련 랜더러 클래스도 딱 하나, 셰이더 헤더 파일을 여러 개. 셰이더 조절 관련 랜더러 클래스에서의 멤버 값을 보고 해당 셰이더 함..
2022.11.21
-
나름대로 큰? 규모의 소스코드에서의 shared_ptr 고찰
0. 어제자로 프로젝트의 거의 모든 raw pointer가 shared_ptr로 교체되었음. 이는 엔진 팀장님(선생님)이 모두 진행 하심. 1. Actor라는 부모 클래스를 상속 받는 Player 자식 클래스가 있었음. 2. Player 개체는 게임이 진행되는 와중에 단 한명이기에(서버 안 붙힌 게임이라) static 키워드를 통한 싱글톤 패턴으로 구현했음. 3. 강제로 Player 개체를 delete 하면 메모리 릭이 나지 않음. 그리고 엔진 팀장님의 코드에서도 릭이 안남. 근데 차이라면 상속 관계에 차이가 있음. 엔진 팀장님의 Player 클래스는 Player -> EngineObject 컨텐츠 팀원들의 Player 클래스는 Player -> Actor -> EngineObject 4. 다른 클래스를..
2022.11.11
-
22-11-04
유니티 게임 에셋에 흰색 지우는 법: 프리펩에서 콜라이더를 지우면 됨..! 가끔 큐브도 지워야함.. 게임 에셋은 항상 크자이 {1 1 1} {0 0 0} {0 0 0}해놓고 Export to fbx 해야 게임에 띄울 시 중앙에 뜸. 일단 게임에 띄우고, 필요한 머테리얼을 가져오는게 맞음. 혹시 벽이 안보이거나 한다면, 유니티 머티리얼 리스트를 보고 가져오면 해결 되기도 함.
2022.11.04