
마우스 커서 사용하기 이제 커시 위치에서 히트 결과를 받을 차례이다. 우리가 사용할 함수는 GetHitResultUnderCursor 이다. 첫 번째로 트레이스 채널이 보인다. 이는 전 섹션에서 Grabber를 다루면서도 봤던 내용이다. 그때는 Grabber를 위한 채널을 따로 살펴봤지만, 여기서는 단순히 보이는 물체에 대해 모두 Hit이 되게 하기 위해서 ECC_Visibility를 사용한다. 다음으로 bTraceComplex는 단순 콜리전을 사용할 지, 복합 콜리전을 사용할 지에 대해 묻는 내용이다. 복합 콜리전의 경우 단순 콜리전보다 계산이 훨씬 더 많이 필요하기 때문에 단순 콜리전을 사용한다. 변수명이 Complex이므로, false를 전달하게 된다. 마지막은 전 섹션에서도 많이 다뤘던 HitRe..

캐스팅 현재 탱크가 무사히 움직이고 회전을 하지만, 탱크의 상단부에 해당하는 포탑은 회전하지 않는다. 이러면 포탑은 고정된 상태에서 발사하게 되므로, 포탑을 자유롭게 회전하여 발사체를 발사하도록 해야한다. 이를 위해 마우스 커서를 이용하며, 해당 마우스가 가리키는 쪽으로 포탑이 회전하게 된다. 마우스 커서는 컨트롤러에서 함수를 설정하여 건드리게 되는데, 이는 커서 위치에 대한 히트결과가 컨트롤러에 위치하기 때문이다. 이에 대한 작업은 BeginPlay에서 하게 된다. 하지만 탱크에는 해당 함수가 존재하지 않고, 대신 베이스폰에서 사용하지 않은 채 존재한다. 따라서 사용하지 않는 베이스폰에서 해당 함수를 지우고, 탱크에 복사를 해주었다. 그리고 컨트롤러에 대한 변수를 선언해준다. 우리가 사용하는 컨트롤러는..

로컬 회전 회전에 대해서 다루기에 앞서, AddActorLocalOffset 함수에서 두 번째 인풋 매개 변수인 스윕에 대해서 자세히 알아보고 시작한다. 스윕 기능은 루트 컴포넌트에 대해서만 스윕하며 블록 콜리전을 체크해준다. 루트 컴포넌트에 대해서만 체크하기에 연결되어있는 하위 컴포넌트에 대해서는 체크하지 않는다. 따라서 부딪히는(겹치는) 물체를 체크가 가능하며, 이를 감지하여 특정한 프레임으로 부딪힌 물체를 되돌려 보내 오브젝트를 관통하지 않게 해준다. 움직임이 실제로 구현되기 전에 겹침을 잡아내기 때문에 실제로는 부딪히지 않게 된다. 블록 콜리전 체크를 하기 때문에 콜리전 기능에 대한 활성화가 필요하다. 먼저 코드에서 스윕에 대해 true 값을 넘겨주자. 이후 루트컴포넌트인 캡슐 컴포넌트의 콜리전을..
문제링크 : https://www.acmicpc.net/problem/1822 1822번: 차집합 첫째 줄에는 집합 A의 원소의 개수 n(A)와 집합 B의 원소의 개수 n(B)가 빈 칸을 사이에 두고 주어진다. (1 ≤ n(A), n(B) ≤ 500,000)이 주어진다. 둘째 줄에는 집합 A의 원소가, 셋째 줄에는 집합 B의 원소 www.acmicpc.net #include using namespace std; typedef long long ll; typedef pair pii; const int MAX = INT_MAX; int na, nb, a[500001], b[500001]; mapm; vectorv; int main() { ios_base::sync_with_stdio(0); cin.tie(0..

이동 속도 기존 탱크의 이동 속도가 너무 느리게 느껴져서 이번 강의에서 이를 개선하는 작업을 해준다. 이를 위해 우선 뷰포트에서 FPS 표시해주고 이를 살펴보자. 위와 같이 FPS 표시하면 좌측에 현재 FPS가 나오게 된다. 해당 값을 자세히 보면, 플레이 하는 순간에 확 낮아지고, 수시로 조금씩 변동되는 것을 볼 수 있다. 지금은 다소 단순한 상태이기에 크게 차이는 없지만, 더 복잡해지고 무거워질수록 변동 값이 심해질 수 있다. 이러한 변동이 실제 이동에 영향을 미치기 때문에 전 섹션에서 다뤘던 델타타임을 이용하여 속도를 조절해야한다. 기존 베이스폰에서 Tick 함수를 보면 인자로 델타타임을 가지고 있지만, 탱크가 움직일 Move 함수에는 델타타임이 존재하지 않는다. 따라서 GetWorldDeltaSe..

로컬 오프셋 탱크를 움직이게 하기 위해서는 일종의 오프셋이 필요하다. 우선 오프셋을 월드 스페이스에 설정할지, 로컬 스페이스에 설정할지 정해야한다. 먼저 월드 스페이스를 살펴보자. 현재 월드에서 탱크를 누르면 기즈모가 보인다. 또 해당 기즈모는 좌측 하단에서도 추가로 볼 수 있다. 탱크의 기즈모는 회전해도 움직이지 않으며, 대신 좌측 하단의 기즈모는 같이 회전한다. 이는 월드의 방향은 바뀌지 않기 때문에 발생한다. 여기까지는 월드의 좌표계로 본 것이다. 이제 로컬 좌표계로 살펴보자. 현재 월드 좌표계를 로컬 좌표계로 바꾸는 방법은 뷰포트 상단에 있는 기능으로 전환이 가능하다. 해당 버튼을 누르면 로컬 좌표계로 변환된다. 이제 탱크를 회전하면 탱크의 기즈모도 같이 회전하게 된다. 이를 통해 알 수 있는 것..