본문 바로가기

전체 글

(144)
8번과제 맵 만들기 - 레벨3 레벨 3 = 슬라임 오르기랜드 스케이프 모드를 이용해서 지형을 구현했다.(랜드 스케이프가 내 맘대로 잘 만들어지지가 않아서 시간이 꽤 걸렸다.) 마지막에 게임 클리어 화면을 만들어서 트로피에 트리거 박스를 배치해서 도착하면 띄울 예정이다.여기에 이제 바닥에서 올라오는 액체에 닿으면 게임 오버가 되도록 액터를 하나 만들고 큐브 스태틱메시와 박스 콜리전을 붙혔다.GameOverTrigger를 맵에 배치하고 크기를 알맞게 조절하고 닿으면 큰일나는 느낌이 나도록 빨간색 머티리얼을 적용했다. 그리고 스태틱 메시의 콜리전 프리셋을 NoCollision으로 설정했다.그리고 박스 트리거에 닿으면 JinGameState의 OnGameOver 함수가 호출되도록 구현했다.그리고 GameOverTrigger가 바닥에서 올라..
8번과제 레벨 2 맵에 아이템 스폰하기 현재 아이템 스폰 로직이 레벨1에 미리 배치된 SpawnVolume 수에 따라 아이템을 균등분배 스폰하도록 구현이 돼있었지만 레벨2, 3에서도 SpawnVolume을 배치하게 되면 아이템 수가 원하던대로 분배가 되지 않는 문제가 발생하여 이를 레벨 별로 시작할 때 SpawnVolume도 스폰하고 레벨이 끝나면 스폰된 SpawnVolume을 없애려 한다. 레벨 별로 아이템을 스폰할 영역에 SpawnVolume을 배치하고 각 SpawnVolume에 ActorTag를 달아줘서 레벨에 맞는 Tag를 가진 SpawnVolume을 또 새로운 배열 LevelVolumes에 담는다.// JinGameState.h TArray SpawnedActors; // 스폰된 아이템을 담을 배열 TArray FoundVolumes..
8번과제 맵 만들기 - 레벨2 레벨 2 = 어질어질 장애물 코스위 사진과 같이 맵을 비슷하게 구현해봤다.땅에 원형 발판을 랜덤한 방향으로 회전시키는 로직과 발판 사이 공간에 캐릭터가 부딪히면 튕겨내는 장애물을 둘 예정이다. 트로피와 골 트리거박스를 복사하여 붙여넣기했는데 1레벨 맵을 구현할 때 트리거 박스를 나갔다 오면 계속 트리거가 호출이 되는 문제가 있어서 bool 변수로 한 번 밟으면 true로 설정해서 false일때만 호출하도록 해서 막아뒀었는데 이게 다음 레벨에서도 true로 계속 되어있어서 goal을 해도 EndLevel함수를 호출을 안하는 문제가 있었다. 그래서 언리얼 에디터에서 true로 변경하던 로직을 C++에서 JinGameState에 bool 변수를 만들어서 기초값 false, EndLevel함수에서 true, S..
8번과제 맵 만들기 - 레벨 1 지금까지 필수 과제 로직을 구현했다면 이제 게임이 실행될 맵을 만들어야 한다.우선 내가 생각한 맵은 많이 부족하지만 폴가이즈 맵을 따라서 느낌만 비슷하게 구현해 볼 예정이다. 레벨 1 = 문으로 돌진레벨 1Fab에서 풀 머티리얼과 벽돌 머티리얼을 받아서 랜드스케이프 모드로 생성한 땅에 풀 머티리얼을 적용하고 벽으로 사용할 스태틱 메시에 벽돌 머티리얼을 적용했다.문으로 돌진처럼 내리막길에 벽에 세 개의 문이 있는데 게임이 실행될 때 마다 랜덤하게 통과가 되는 문이 한 개 있다.도착 지점에 트로피를 둬서 근처에 가면 다음 레벨로 이동하도록 구현을 하려한다.랜덤으로 통과되는 문 구현하기레벨 블루프린트에서 랜덤한 1부터 100까지의 정수 값을 받아와서 변수에 저장하고 그 값을 33씩 나눠서 하나의 문만 통과가 ..
8번 과제(게임 루프 및 UI 재설계하기) 필수 과제 과제 소개기존 프로젝트에는 이미 인터페이스 기반 아이템, 충돌 이벤트 (Overlap), 랜덤 스폰, 체력/점수, 웨이브/시간 제어, UI 등 다양한 기능이 구현되어 있습니다.이번 과제에서는 아래 2가지 흐름을 함께 재설계·확장하여, 게임 플레이와 UI/UX 모두 새로운 방식으로 즐길 수 있도록 만들어 봅시다.게임 플레이 측면: 아이템 인터페이스 + 멀티 웨이브 구조를 개선하여 게임의 재미를 개선하기UI/UX 측면: HUD/메뉴 등을 전면 리뉴얼해 시각적 완성도와 인터랙션을 높이기과제 진행 개요1단계 : 멀티 웨이브 구성하기이미 만들어둔 SpawnVolume, 충돌(Overlap), GameState/GameMode 등을 최대한 재사용하되, 새롭게 추가되는 아이템/웨이브 로직에 맞게 확장해 줍니다.한 레..
재귀 함수 재귀의 정의재귀란 자기 자신을 정의하거나 호출하는 것을 말한다.프로그래밍에서 보통 재귀라고 하면 재귀 함수(recursive call)를 말하며, 함수가 실행 중에 자기 자신을 다시 호출하는 방식의 함수를 의미한다.재귀 함수의 요건재귀가 자기 자신을 계속 호출한다고 하지만 프로그램이 종료될 수 있도록 설계해야 한다.따라서 재귀 함수를 구현하는 경우엔 아래 두 가지를 고민해야 한다.1. 재귀 호출 단계자기 자신을 호출하는 단계, 보통 호출할 때마다 문제의 크기를 줄여야 한다.2. 기저 조건재귀 함수는 언젠가 종료되어야 한다.특정 조건이 충족되면 더 이상 자기 자신을 호출하지 않고 함수를 종료돼야 한다.기저 조건이 없으면 무한 재귀로 스택 오버플로우 오류가 발생할 수 있다.재귀 함수의 설계재귀 함수로 팩토리..
효율적인 코드 구현하기(벡터vs덱, 정렬이 필요없는데 정렬하는 경우, 특정 원소 찾기, 문자열 결합하기, auto& vs auto) 벡터vs덱벡터는 배열과 동일하게 메모리가 연속적으로 할당된다. 따라서 임의 접근이 가능하다.덱은 맨 앞의 원소와 맨 뒤의 원소를 가리키는 포인터가 있고 내부적으로 데이터는 여러 개의 청크라고 불리는 영역으로 쪼개져 있다. 이는 임의 접근을 효율적으로 하기 위한 전략이다.맨 앞의 원소를 추가, 삭제하는 경우벡터의 경우에는 맨 앞 원소를 추가, 삭제하는 경우 뒤에 있는 원소들이 전부 이동을 해야한다.만약 데이터가 N개라면 N-1개 원소들이 한 칸씩 이동해야 하기 때문에 O(N) 연산이 된다. 반면에 덱의 경우에는 청크를 나눠서 관리하기 때문에 O(1) 연산이 된다.따라서 맨 앞의 원소를 추가하거나 삭제하는 경우 덱을 사용하는게 좋다.임의 접근을 하는 경우벡터와 덱 모두 O(1) 연산이다.덱의 경우 각 청크가..
STL 사용하기(반복자, 컨테이너(vector, set, map), 알고리즘(sort, find, count, unique)) STL(Standard Template Library)STL은 C++ 표준 라이브러리의 일부로 자주 사용되는 컨테이너와 알고리즘을 템플릿 기반으로 제공하는 라이브러리이다. STL의 구성요소는 컨테이너, 알고리즘, 반복자로 크게 3가지로 나눌 수 있다.컨테이너 : 데이터를 저장하고 관리하는 객체(벡터, 맵, 리스트 등)알고리즘 : 컨테이너에 저장된 데이터를 처리하는 다양함 함수를 제공(sort, next_permutation 등)반복자 : 컨테이너의 요소들을 순회하고 접근하는 방법을 제공(포인터처럼 동작함)반복자는 컨테이너 요소에 순회하고 접근하는 수단이며 알고리즘은 반복자를 통해 컨테이너 내부 데이터를 처리한다.반복자순방향 반복자컨테이너의 요소들을 앞에서부터 차례로 순회하며 각 원소에 접근할 수 있는 반..