본문 바로가기

전체 글

(842)
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-1 이번 섹션의 목표는 탱크 게임을 만드는 것이다.플레이어가 조종할 수 있는 탱크를 만들고, 탱크를 움직이며 발사체를 발사하여 적 포탑을 부수게 된다.적 포탑 또한 탱크를 공격할 수 있으며, 서로의 HP가 먼저 0이 되는 쪽이 승리하게 된다. 기본적인 탱크 움직임을 위한 액션 매핑 및 축 매핑이나, 사운드를 위한 에셋등은 강의자료로 올라와있다.따라서 해당 강의자료를 다운로드하여 사용하게 되는데 나는 4.25버전을 다운로드하여 내가 사용중인 엔진 버전인 5.3으로 실행하였다. 폰 클래스 생성우선 우리는 탱크와 포탑이 필요하다.이를 위해 베이스폰 클래스를 생성해주고, 동일한 기능(발사체 발사)을 가진 탱크와 포탑 자식 클래스를 생성할 수 있다.C++ 클래스를 생성하게 되며, 이때 부모 클래스를..
[백준 2012번] 등수 매기기 (C++) 문제링크 : https://www.acmicpc.net/problem/2012 2012번: 등수 매기기 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 500,000) 둘째 줄부터 N개의 줄에 걸쳐 각 사람의 예상 등수가 순서대로 주어진다. 예상 등수는 500,000 이하의 자연수이다. www.acmicpc.net #include using namespace std; typedef long long ll; typedef pair pii; const int MAX = INT_MAX; int N, arr[500001]; ll result; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> N; for(int i=1; i> arr[i]; sort(..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-41 Crypt Raider: 마무리 이번 섹션을 통해 알아본 것은 다음과 같다. 액터 컴포넌트와 씬 컴포넌트 루멘 시스템 모듈식 레벨 디자인 라인 트레이싱 및 콜리전 헤더 파일 추가 C++ 포인터 및 레퍼런스 반복문 및 배열 블루프린트에서 C++ 호출 전에 배웠던 것들을 토대로, 좀 더 심화된 내용들을 다루게 된 섹션이다. 이번 섹션에서 배웠던 것중 집는 기능이 가장 기억에 남는데, 집는 것이 상당히 복잡한 과정을 거치는 것에 다소 놀라웠다. 처음 생각한 것은 단순히 그냥 눈에 보이는 사물을 집는 것이라고만 생각했다. 하지만 집는 사람이 누구인지, 무엇을 집을 것인지, 특히 집는 것이 어디있는지 찾는 과정이 존재했다. 집는 것이 어디있는지 찾는 과정인 라인 트레이싱이 가장 색다른 느낌을 받았음과 동시에 가장..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-40 레벨 다듬기 이제 게임의 마무리 단계이다. 우리는 영묘에서 보물 조각상을 가져가야 하는데, 만약 보물 조각상을 가져가려하면 창살이 내려와 나가는 문이 닫힌다. 이를 위해 대신할 물건을 가져와 단상에 두어야 한다. 이 부분들을 이제 구현하게 된다. 먼저 대영묘에 단상과 조각상을 비치해주자. 기본적인 조각상의 크기가 매우 작아서 스케일을 조정해주어야 한다. 그런데 이후에 씬이 점점 어두워지는 모습을 볼 수 있다. 이는 씬의 노출 보정 메소드 때문에 벌어지는 현상이다. 포스트 프로세스 볼륨의 노출 칸에 있는 미터링 모드를 변경함으로서 해결이 가능하다. 해당 볼륨은 사실 작은 크기의 블록 형태로, 해당 블록 내에서만 방금 설정한 기능이 작동하게 된다. 우리가 만든 레벨 전체에 적용하기 위해서는 블록의 크기를 키..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-39 불리언(Boolean) 논리 연산자 저번에 만든 액터 태그를 이용하여, 실제 구현을 해줄 차례이다. 이를 위해서는 우선 접근가능한 액터있는지 확인하고, 다음으로 해당 액터가 잡힌 상태인지를 알아야한다. 2가지에 대해 체크를 해주어야하므로, 여기서 불리언 논리 연산자를 사용하게 된다. 접근 가능한 액터를 찾는 함수에서 수정을 하게 되는데, 기존 if문에서 접근 가능한 액터가 있을 시 바로 액터를 반환해준 부분을 수정해주면된다. 먼저 접근 가능한 액터가 있는 지 체크해주고, 잡지 않은 액터인지도 이어서 체크해준다. 위 케이스의 경우 And 연산이기에 && 기호를 사용하였다. 만약 Or 연산을 하게된다면 || 기호를 사용하게 된다. 이러한 불리언 논리 연산자를 사용하여 if 문이 여러개인 것을 하나로 묶어 주..
[백준 16435번] 스네이크버드 (C++) 문제링크 : https://www.acmicpc.net/problem/16435 16435번: 스네이크버드 첫 번째 줄에 과일의 개수 N (1 ≤ N ≤ 1,000) 과 스네이크버드의 초기 길이 정수 L (1 ≤ L ≤ 10,000) 이 주어집니다. 두 번째 줄에는 정수 h1, h2, ..., hN (1 ≤ hi ≤ 10,000) 이 주어집니다. www.acmicpc.net #include using namespace std; typedef long long ll; typedef pair pii; const int MAX = INT_MAX; int N, L, arr[10001]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> N >> L; ..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-38 태그 추가 및 삭제 드디어 비밀문이 제대로 작동하는 것처럼 보이지만, 아직 문제가 남아있다. 바로 잡고 있는 가고일 조각상을 놓지도 않았는데 비밀문이 작동해버리는 것이다. 이를 위해 잡았을 때와 놓았을 때를 알기 위한 태그를 추가해주는 작업이 필요하다. 먼저 잡았다는 내용의 태그를 추가해주자. 간단하게 Tags.Add를 통해 원하는 이름의 태그를 추가하는 것이 가능하다. 플레이를 해보면 가고일 조각상을 잡을 때 새롭게 "Grabbed" 태그가 생긴 것을 볼 수 있다. 이제 놓는 내용의 태그를 추가해주자. 액터를 얻기 위해 GetOwner()를 사용해줄 필요가 있다. 놓는 경우는 기존에 잡았던 "Grabbed" 태그를 지워주는 경우이다. 따라서 Tags.Remove를 통해 해당 태그를 지우게 된다. 집고 ..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-37 캐스팅과 액터 부착 가고일 석상이 트리거 박스 내에 고정시키기 위해서는 가고일 석상을 트리거 박스에 부착시켜서 고정시켜줄 필요가 있다. 이를 위해 액터를 부착시키는 것 이외에도 부착 이후 가고일 석상의 물리 시뮬레이트를 false로 바꿔주어야 한다. 먼저 부착을 위해서 다음 함수를 사용한다. 그리고 물리 시뮬레이트 비활성화를 위해서는 다음 함수를 사용한다. 이제 구현을 해보는데, 먼저 가고일 석상의 루트 컴포넌트를 얻어야 한다. 이를 위해 기존 트리거 cpp 내에서 선언했던 Actor를 사용할 수 있고, GetRootComponent 함수를 사용하여 루트 컴포넌트를 얻을 수 있다. 하지만 여기서 문제가 생긴다. GetRootComponent 함수가 반환하는 컴포넌트는 UScene 컴포넌트이지만, SetS..