본문 바로가기

전체 글

(843)
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-31 TArray 트리거 박스에는 가고일 석상만 들어갈 수도 있지만, 사람이 실수로 들어갈 수도 있다. 따라서 오버랩된 것이 무엇인지 알 필요가 있으며, GetOverlappingActoros 함수를 통해 이를 알 수 있다. 함수를 살펴보면 TArray를 사용한다. 이는 배열의 일종이며, 사이에 어떤 타입의 값을 저장할지 명시하게 된다. 우리는 오버랩된 액터를 찾기에 AActor*를 작성하게 된다. 그리고 보면 해당 함수는 리턴 ㄱ밧이 없고, 오버랩된 액터에 대해 참조표시가 있는 것을 볼 수 있다. 이를 통해 오버랩된 액터들에 대한 파라미터가 아웃 파라미터인 것을 추정할 수 있다. 두 번째 값에 대해서는 디폴트로 설정되어있으므로 신경쓰지 않아도 된다. 이제 간단하게 오버랩된 액터들을 위해 먼저 TArray를 ..
[백준 1431번] 시리얼 번호 (C++) 문제링크 : https://www.acmicpc.net/problem/1431 1431번: 시리얼 번호 첫째 줄에 기타의 개수 N이 주어진다. N은 50보다 작거나 같다. 둘째 줄부터 N개의 줄에 시리얼 번호가 하나씩 주어진다. 시리얼 번호의 길이는 최대 50이고, 알파벳 대문자 또는 숫자로만 이루어 www.acmicpc.net #include using namespace std; typedef long long ll; typedef pair pii; const int MAX = INT_MAX; int N; string arr[51]; int func(string s) { int sum = 0; for(int i=0; i> N; for(int i=0; i> arr[i]; sort(arr, arr+N, c..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-30 생성자 새로 만든 TrigerrComponent cpp 파일에는 첫 플레이시 log 메시지를 추가하는 내용밖에 없다. 우리는 플레이 중 오버랩이 이루어지는 지 체크가 필요하므로 Tick 함수도 구현을 해주어야 한다. 여기서 Super를 작성한 부분도 빼먹으면 안된다. 이는 상위 클래스 기능을 호출해주는 것이며, 여기서는 박스 컴포넌트를 뜻 한다. 구현 기능을 위해 상위 클래스의 기능이 필요한 경우도 있기에 써주는 것이 필요하다. Tick에는 테스트로 간단한 로그 메시지를 써놓고 플레이 해보자. 하지만 현 상태로 Tick에 대한 메시지가 나오지 않는다. 이는 최적화의 측면에서 보통 Tick이 컴포넌트에서는 비활성화되어있기 때문이다. (액터 디폴트는 활성) 여기서 사용할 수 있는 것이 생성자이다. UMove..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-29 오버랩 이벤트 우리가 설치한 비밀문에 가고일 석상이 들어간다면 이를 알릴 트리거 박스를 설치해보자. 이를 위해선 각 오브젝트가 가지는 콜리전 타입에 대해서 알아야 한다. 우리는 이를 이미 가고일 석상을 통해 확인을 한 적이 있다. 가고일의 오브젝트 타입은 WorldStatic이고, 다른 WorldStatic이나 WorldDynamic 타입들에 대해서는 차단되는 것을 볼 수 있다. 하지만 Pawn과는 오버랩인 상태이다. 이번엔 pawn을 살펴보자. 가고일의 타입인 WorldStatic타입에 대해 차단된 모습을 볼 수 있다. 이렇게 한 쪽은 오버랩 상태인데, 한 쪽은 차단된 상태이다. 이러면 어떻게 될까? 아래 표를 살펴보자. 표의 A를 Pawn으로, B를 가고일 석상으로 두고 생각해보자. A가 Block일..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-28 아웃 파라미터 리턴 현재 Grab() 함수는 내용이 많아 이번에 함수 2개로 분리해주는 리팩토링 작업을 해준다. 함수로 뺄 부분에 해당하는 기능은 구체를 생성하고, Hit 반응이 있는지 없는지 체크해주는 부분이다. Hit 반응이 있는지 없는지가 핵심이기에 해당 함수 타입은 bool로 선언해준다. 함수 내부에서 값을 바꿀 일은 없기에 const를 사용해준다. 또한 HitResult를 입력받아야 하므로 이를 참조를 통한 아웃 매개 변수로 사용한다. 이제 해당 함수를 구현해줄 차례이다. 기존 내용을 우선 복사해오고, 기존 HitResult의 부분을 OutHitResult로 대체해준다. 또한 기존에 bool HasHit을 선언하고 해당 HasHit을 반환했지만, 여기서 바로 return 하여 해당 타입을 반환하..
[백준 15664번] N과 M (10) (C++) 문제링크 : https://www.acmicpc.net/problem/15664 15664번: N과 M (10) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net #include using namespace std; typedef long long ll; typedef pair pii; const int MAX = INT_MAX; int N, M, arr[9], result[9]; void func(int cnt, int idx) { if(cnt==M) { for(int i=0; i arr[i]; sort(arr, arr+N); //정렬 f..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-27 물리 오브젝트 깨우기 지금 무사히 가고일 석상을 집을 수 있는 것처럼 보이지만, 플레이 일정 시간이 지난 후에 가고일 석상을 집으면 집을 수 없는 현상이 발생할 수 있다. 이는 물리 시뮬레이션 컴포넌트가 성능 상의 이유로 일정 시간 동안 가동되지 않으면 슬립 상태로 들어가기 때문에 발생하는 현상이다. 따라서 구체 트레이스로 히트했을 때 깨어나도록 만들어주어야 한다. 이를 위해 PrimitiveComponent에 대해 조금 더 자세히 알아야 할 필요가 있다. 공식 문서의 설명을 보면, 해당 컴포넌트는 씬 컴포넌트이자 특정 지오메트리를 포함하거나 생성하고 콜리전 데이터로 렌더링되거나 사용된다는 것을 알 수 있다. 이는 해당 컴포넌트가 물리 시뮬레이션을 수행한다는 뜻이다. 해당 컴포넌트가 사용 가능한 함수를 ..
Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-26 PhysicsHandle로 객체 잡기 이제 위치도 알았으니, 진짜로 PhysicsHandle를 이용해 가고일 석상을 잡아볼 차례이다. 우선 PhysicsHandle이 없을 경우 성립자체가 불가능하므로 얼리리턴을 통해 바로 종료하도록 해준다. 다음으로 저번에 잠깐봤었던 GrabComponentAtLocationWithRotation 함수를 채워나갈 차례이다. 해당 함수가 필요한 항목은 다음과 같다. 처음 변수인 UPrimitiveComponent 타입을 어떻게 얻을 수 있을까? HitResult에 속한 함수를 찾아보면 다음과 같은 내용을 찾을 수 있다. HitResult에 속한 함수인 GetComponent 함수를 이용하면 우리가 찾는 UPrimitiveComponent를 얻을 수 있다. 따라서 HitRe..