다음 열거형의 DisplayName을 문자열로 가져와보자./** * 아이템 분류 열거형 */UENUM(BlueprintType)enum class EAR_ItemCategory : uint8{ Equipment UMETA(DisplayName = "장비"), Consumable UMETA(DisplayName = "소모품"), Quest UMETA(DisplayName = "퀘스트"), Misc UMETA(DisplayName = "기타")}; StaticEnum 템플릿 타입으로 변환할 열거형을 지정해 주고, GetDisplayNameTextByValue 함수를 통해 열거형의 값을 정수형으로 변환 후, 해당 값의 DisplayName을 가져와 변환하여 저장한다.// 아이템 카테고리 ..
전체 글
https://school.programmers.co.kr/learn/courses/30/lessons/147354 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제 설명이 굉장히 난해하지만, 그냥 문제 설명 그대로를 구현해 주면 문제없이 풀린다. 먼저, 테이블 튜플을 정렬해줘야 한다.이는 그냥 문제의 정렬 기준으로 테이블 배열을 정렬해주면 된다.파라미터로 주어지는 col값은 인덱스 순서인 0부터 시작하는게 아닌, 1부터 시작하기 때문에 -1을 해줘야 한다.나는 정렬 함수를 따로 만들어 사용했기 떄문에, 전역 변수 col을 하나 더 선언 후에 col-1로 초기화했다. 다음으로, 각 칼럼의 값을 i로 나눈 나머..
블루프린트에서 실행 흐름을 지연시키는 방법은 간단하게 Delay 노드를 사용할 수 있다.하지만, Delay 노드는 일반적으로 GAS가 의도하는 깔끔한 비동기 흐름(델리게이트를 통한 콜백)이 아닌, 액터의 실행 흐름에 의존하기 때문에 게임 플레이 어빌리티에서는 Delay 노드를 호출하면 오작동하거나 아예 실행되지 않는다. Delay 노드 대신, GAS에서 기본으로 제공하는 어빌리티 태스크인 Wait Delay Task 노드를 사용한다.
https://school.programmers.co.kr/learn/courses/30/lessons/77485 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 그냥 노가다 문제다.테두리 순회는 가로 2개 세로 2개로 구역을 나누어 순회하는 방식으로 계산했다.이 테두리 순회를 사용해서 테두리 최솟값 구하기와 테두리 회전시키기에 모두 사용한다. 테두리 최솟값 구하기는 그냥 테두리 순회를 하며 최솟값을 구해서 반환한다.테두리 회전은 임의의 값을 하나 두고, 테두리 순회를 하며 순회하는 값과 스왑 한다.(임의의 값은 그냥 y [0] x [0]으로 둠)#include #include #include using name..
AI가 단순히 목표 지점까지의 최단 경로를 찾아 이동하는 것을 넘어, 이동의 방해를 받지 않거나 주지 않고 유기적으로 움직이도록 하려면 AI 회피 시스템을 구축해줘야 한다. 언리얼에서는 대표적인 AI 회피 시스템으로 두 가지를 제공한다.RVO 회피(Reciprocal Velocity Obstacles Avoidence)와 군중 우회 회피(Defour Crowd Avoidence)이다. RVO 회피RVO 회피(Reciprocal Velocity Obstacles Avoidence) 시스템은 언리얼 엔진의 기본 회피 시스템이다. RVO는 움직이는 객체들이 서로의 현재 속도와 방향을 고려하여 충돌 가능성이 가장 낮은 새로운 속도 벡터를 계산하는 알고리즘이다.상호적(Reciprocal)이라는 의미처럼, 모든 ..
https://school.programmers.co.kr/learn/courses/30/lessons/131130 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제 설명이 복잡해 보이지만, 결론적으로 가장 카드가 많이 든 상자 1번째와 2번째의 곱을 반환하면 된다. 카드를 상자에 담는 과정은 DFS와 비슷하게 해당 카드의 번호를 다음 카드 뭉치의 인덱스로 사용해서 계속 이어가다가 연결되지 못하는 지점까지가 하나의 카드 상자이다. 한 번 간 카드는 0으로 초기화하여 방문 체크를 했다.새로 카드를 상자에 담는 첫 번째 순간마다 상자의 개수를 늘리고, 해당 상자에 카드를 담는다. 카드 상자를 담은 배열을 내림차순..
https://school.programmers.co.kr/learn/courses/30/lessons/389479 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 서버가 증설된 순서대로 사라질 테니, 큐를 통해 관리한다.시간이 24로 고정이므로, 그냥 24번 순회하며 각 시간별로 로직을 수행한다. 먼저, 큐에는 증설한 서버의 증설 시간을 저장한다.먼저 증설된 서버가 먼저 제거되어야 하기 때문에 큐로 저장한다. 서버는 기본적으로 1대가 있는 상태에서 시작한다.문제의 답으로는 "증설한 서버의 총 개수"이다.서버 1대 당 5명을 수용할 수 있다면, 서버 2대로는 최대 10~14명의 이용자를 수용할 수 있다. (기존 ..
오픈월드 같은 게임들은 맵이 어마무시하게 크다.또한, 러닝게임 같은 부류들은 맵이 계속 동적으로 생성되며, 어디까지 사용될지 알 수 없다. 이러한 레벨에서는 NavMeshBoundsVolume을 어떻게 배치할까? 일단 무지성으로 NavMeshBoundsVolume을 크게 늘리면 다음과 같이 연산이 엄청 오래 걸린다. NavigationInvoker이렇게 NavMeshVolume의 크기를 가늠할 수 없을 때, 사용하는 것이 NavigationInvoker이다. 이를 사용하기 위해서는 프로젝트 설정을 몇 가지 해줘야 한다.먼저, Navigation 연산을 런 타임에 할 수 있도록 Runtime Generation 옵션을 Dynamic으로 설정한다. 다음으로, Navigation 생성을 NavigationI..