본문 바로가기

전체 글

(842)
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-13 로컬 오프셋 탱크를 움직이게 하기 위해서는 일종의 오프셋이 필요하다. 우선 오프셋을 월드 스페이스에 설정할지, 로컬 스페이스에 설정할지 정해야한다. 먼저 월드 스페이스를 살펴보자. 현재 월드에서 탱크를 누르면 기즈모가 보인다. 또 해당 기즈모는 좌측 하단에서도 추가로 볼 수 있다. 탱크의 기즈모는 회전해도 움직이지 않으며, 대신 좌측 하단의 기즈모는 같이 회전한다. 이는 월드의 방향은 바뀌지 않기 때문에 발생한다. 여기까지는 월드의 좌표계로 본 것이다. 이제 로컬 좌표계로 살펴보자. 현재 월드 좌표계를 로컬 좌표계로 바꾸는 방법은 뷰포트 상단에 있는 기능으로 전환이 가능하다. 해당 버튼을 누르면 로컬 좌표계로 변환된다. 이제 탱크를 회전하면 탱크의 기즈모도 같이 회전하게 된다. 이를 통해 알 수 있는 것..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-12 인풋 처리하기 프로젝트 세팅에 엔진->입력을 보면 기본적인 상하좌우 이동에 대한 축 매핑과 발사체를 발사하는 액션 매핑이 되어있다. 여기서 축 매핑을 더 자세히 살펴보자. 축 매핑은 매 프레임마다 작동하여 축 매핑 처리를 하게 된다. 함수와 연결을 시켜주며, 함수 Move(float value)와 연결되었다고 가정을 하자. 해당 함수를 축 매핑에 연결시키는 것을 바인딩한다고 한다. WASD 옆에 있는 스케일의 값이 Move의 value 값으로 들어가게 된다. 이제 바인드시킬 함수를 직접 작성해보자. 우선 인풋을 처리해주는 SetupPlayerInputComponent 함수가 필요하다. 이는 BasePawn 파일에 존재하지만, 생각을 해보면 굳이 BasePawn에 있을 필요는 없다. 이동은 탱크에서만 하기..
[백준 15688번] 수 정렬하기 5 (C++) 문제링크 : https://www.acmicpc.net/problem/15688 15688번: 수 정렬하기 5 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이며, 같은 수가 여러 번 중복될 수도 있다. www.acmicpc.net #include using namespace std; typedef long long ll; typedef pair pii; const int MAX = INT_MAX; int N, arr[1000001]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> N; for(int i=0; i> a..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-11 폰(Pawn)에 빙의하기 언리얼의 기본 설정으로 아무것도 지정되지 않은 상태에서 플레이를 누르면 빈 공간을 자유롭게 돌아다닐 수 있다. 이는 우리가 원하는 것이 아니며, 우리가 만든 탱크에 빙의해야 한다. 이를 위해 해당 탱크를 누르고, 플레이어 자동 빙의 기능을 사용하게 된다. 플레이어가 0~7까지 존재하는데, 플레이어 여러명이 같은 컴퓨터를 사용할 때 의미있는 것이다. 우리는 1명이서 하기 때문에 무조건 Player 0을 사용하게 된다. 이제 실행을 해보면 이제 우리가 세팅했던 카메라 각도로 탱크를 바라보게 된다.
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-10 하위 C++ 클래스 생성하기 탱크와 터렛은 베이스폰을 기준으로 기본적인 기능을 상속받지만, 둘의 구체적인 기능은 조금씩 다르다. 대표적인 것이 터렛은 움직일 필요가 없고, 탱크는 움직여야 한다. 따라서 기본 베이스폰 클래스를 기준으로 하위 C++ 클래스를 생성하여 구체적인 기능을 기술해줄 필요가 있다. 탱크는 추가적으로 탱크를 포커스하기 위해 카메라 컴포넌트와 스프링 암 컴포넌트가 필요하다. 스프링 암 컴포넌트는 카메라와 탱크를 이어주는 역할을 한다. 두 컴포넌트를 추가해주면 카메라의 시선으로 탱크를 보는 것이 가능하다. 이제 Tank 클래스에서 두 컴포넌트들을 선언해주자. 처음에는 생성자가 없는데, CreateDefaultSubobject 함수 사용을 위해 생성자를 만들어주어야 한다. 이제 컴파일을 하..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-9 컴포넌트 노출 본격적인 컴포넌트 노출에 앞서서, 추가로 알아야할 내용이 있다. 바로 UPROPERTY() 지정자중에서 이벤트 그래프와 관련된 것들은 private로 선언이 불가능하다. 우리가 기존해 선언했던 컴포넌트들은 private이므로, 사용이 불가능하게 되는 것이다. 이를 위해서 추가로 작성해야 하는 내용이 있다. 위 문구를 적으면 C++에서는 여전히 private지만, 언리얼 이벤트 그래프에서는 접근이 가능하게 된다. 이를 토대로 컴포넌트들을 노출시켜주자. 어디에서나 보일 수 있고, 블루프린트에서 읽는 것이 가능하며, 카테고리는 컴포넌트로, private지만 블루프린트에서 사용가능하도록 해주었다. 이제 블루프린트에서 해당 컴포넌트들에 대한 디테일 패널이 활성화된다. 우선 스태틱 메시 컴포넌트에 메..
[백준 5635번] 생일 (C++) 문제링크 : https://www.acmicpc.net/problem/5635 5635번: 생일 어떤 반에 있는 학생들의 생일이 주어졌을 때, 가장 나이가 적은 사람과 가장 많은 사람을 구하는 프로그램을 작성하시오. www.acmicpc.net #include using namespace std; typedef long long ll; typedef pair pii; const int MAX = INT_MAX; int N; struct info { string name; int day, month, year; }; bool cmp(struct info a, struct info b) { if (a.year < b.year) return 1; //생일이 빠른 순 else if (a.year == b.yea..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 5-8 노출된 변수 편집 저번에 이어서 더 다양한 UPROPERTY()에 대한 지정자와, 이벤트 그래프에도 노출시키는 방법에 대해 알아본다. 저번엔 인스턴스에서만 보이게하는 기능을 배웠었지만, 마찬가지로 디폴트에만 보이게하기 또는 디폴트에서만 편집하기 또는 인스턴스에서만 편집하기도 가능하다. 그리고 이벤트 그래프에 노출시키는 것또한 가능하다. 여기서도 읽기만 할 것인지, 읽기 쓰기 모두 할 것인지 조절이 가능하다. 또한 지정자를 하나만 작성하는 것이 아니라, 2가지 이상을 작성해보는 것도 가능하다. 테스트로 어디서나 볼 수 있고, 이벤트 그래프에서 읽기 쓰기가 모두 가능한 상태의 변수를 선언해보았다. 이벤트 그래프에서 Test에 대한 변수를 가져오거나, 세팅하는 것이 가능하다. 가져온 Test 변수를 통해서 s..