![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXzcIz%2FbtsdZ5mleUl%2FBKKI2dMA4NkOZsS6wWCckk%2Fimg.png)
Advanced Unreal Engine 5 Multiplayer Gameplay Programming 새로운 Character Movement Component를 생성한다. 캐릭터 클래스의 기본 Character Movement Component 클래스를 변경하기 위해서는, Actor 클래스의 헤더 파일에서 FObjectInitializer& 타입을 인자로 받는 생성자의 시그니처와 같은 생성자를 사용해야 한다. 시그니처를 복사해 캐릭터 클래스의 생성자를 변경해준다. 헤더를 추가하고 생성자의 시그니처를 변경해준 후, 초기화 리스트를 통해 Character Movement Component의 기본 클래스를 지정한다. AG_AttributeSetBase 클래스로 이동해 스태미나와 이동 속도를 속성으로 추가한..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgR3lm%2FbtsdHPqVZTA%2FKcdUt02sJ2RWzlqpOXvLjk%2Fimg.png)
Level 0. 전국 대회 선발 고사 1번부터 오름차순으로 배치하기 위해 map에 모든 순위와 참석 여부를 넣고 시작했다. 참석 여부는 true인 경우 인덱스를, false인 경우 -1을 넣어 구분했다. 이후, 앞에서부터 참석한 인원이 3명이 될 때까지 계산하면 된다. #include #include #include using namespace std; int solution(vector rank, vector attendance) { int answer = 0, cur = 0; int arr[] = {10'000, 100, 1}; size_t size = rank.size(); map mp; for (int i = 0; i < size; ++i) mp[rank[i]] = attendance[i] ? i..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzB8Or%2FbtsdIG8mZBJ%2F7GKIAZE0JZ1KBYQs5TOZ80%2Fimg.png)
Level 0. 빈 배열에 추가, 삭제하기 for문을 사용하지 않고 vector::insert(), vector::erase() 함수를 사용해도 된다. #include #include using namespace std; vector solution(vector arr, vector flag) { size_t size = arr.size(); vector answer; for (int i = 0; i < size; ++i) { if (flag[i]) { vector v(arr[i] * 2, arr[i]); answer.insert(answer.end(), v.begin(), v.end()); } else { answer.erase(answer.end() - arr[i], answer.end()); } }..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJrotg%2Fbtsfg3OBqmu%2F2KKOcNjFoBbrggs5uqwMEk%2Fimg.jpg)
이득우의 게임 수학 게임 엔진은 개발자 관점에서 바라보는 게임 공간과 게이머 관점에서 바라보는 게임 공간 두 가지 화면을 제공해야 한다. 카메라가 출력할 화면의 해상도 정보를 갖고 월드의 일부를 그려낸 화면을 뷰포트(Viewport)라고 한다. 카메라에 설정된 뷰포트 정보를 바탕으로 월드 공간의 일부분을 렌더링하기 위해서는 카메라를 중심으로 물체의 트랜스폼을 재조정하는 작업이 필요하다. 카메라를 중심으로 변환한 공간을 뷰 공간(View space)이라고 한다. 월드 공간에서 게임 오브젝트 A가 (10, 10)에 위치하고 카메라가 (-10, -10)에 위치한다면, 카메라를 기준으로 한 A의 상대적인 위치는 (20, 20)이다. 카메라를 기준으로 한 뷰 공간에서 월드 공간의 원점 좌표는 (10, 10)이다...
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1zh7g%2FbtsdRQX8YmU%2Fv5fGMCSaoQNQLaRqtlLMp0%2Fimg.png)
Advanced Unreal Engine 5 Multiplayer Gameplay Programming 언리얼 에디터가 아닌, VS에서 ActionGameTypes.h라는 헤더 파일을 생성하고 FCharacterData 구조체를 선언한다. 초기 이펙트와 기본 능력을 담는 데 사용된다. FCharacterData 구조체를 담을 Data Asset 클래스를 생성한다. BlueprintType BP에서 변수로 사용될 수 있는 클래스이다. Blueprintable BP의 부모가 될 수 있는 클래스이다. CharacterDataAsset 형식의 Data Asset 에셋을 생성한다. Data Asset의 FCharacterData 구조체의 Effects에 속성의 기본값을 설정하는 초기 이펙트를 등록한다. 캐릭터 클..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmTsYN%2FbtsdpyC6IKr%2FdJap8buFXOvN4hK7siJwj1%2Fimg.png)
Level 0. 정수를 나선형으로 배치하기 인덱스 계산이 상당히 귀찮았던 문제였다. #include #include #include using namespace std; vector solution(int n) { vector answer(n, vector(n)); int num = 1; int r = 0, c = -1; for (int j = 0; j < n; ++j) answer[r][++c] = num++; while (true) { if (--n