본문 바로가기

Unreal/Udemy 강의

Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-25

DrawDebugSphere()

이제 GrabComponentAtLocationWithRotation() 함수를 이용하여 실제로 잡아볼 차례이다.

하지만 해당 함수에 위치를 넣어주는 부분이 다소 까다롭다.

단순히 실제 컴포넌트의 위치를 사용하는 것이 아니기 때문이다.

 

예시를 들자면, 우리는 가고일의 머리부분을 잡고자한다.

하지만 가고일의 실제 본질은 바닥 부분에 존재하여, 우리가 머리부분을 잡는다면 바닥~머리 부분만큼 위로 더 떠오른 상태로 집게되는 현상이 발생한다.

그래서 구체 트레이스를 할 때 가고일 석상과 만나는 부분을 찾아야한다.

이를 위해 DrawDebugSphere함수를 통해서 닿는 부분을 시각화하여 체크를 해줄 필요가 있다.

 

해당 함수의 헤더는 DrawDebugLine 함수를 사용할 때 썼던 DrawDebugHelpers를 사용한다.

따라서 이번엔 헤더를 추가해줄 필요가 없다.

이제 DrawDebugSphere 함수에 뭐가 필요한지를 살펴보자.

 

먼저 첫 번째 변수의 경우 간단히 GetWorld()를 해주면 된다.

다음으로 구체의 중심인데, 우리는 가고일과 닿는 부분을 원하므로 기존 라인트레이스의 끝점을 넣어주었다.

이제 반지름은 10으로,  구체의 조각수도 10으로 해주었다.

색깔은 선을 빨간색으로 했었으므로 이번엔 파란색을 사용했다.

 

bPersistentLines의 경우 현재 그린 구체를 화면에서 계속해서 유지할 것인지를 물어보는 것이다.

이번에는 5초 동안만 유지해볼 것이므로 false를 넣고, 지속시간에 해당하는 LifeTime을 5로 해준다.

나머지는 강의에서도 언급이 없었기에, 몰라도 큰 문제는 없는 것 같다.

 

이제 컴파일하고 실행을 해보자.

이제 마우스 좌클릭을 할 때마다 해당 끝점을 센터로 파란색 구체가 생기는 것을 볼 수 있다.

이제 이를 응용하여 Hit 반응이 있을 때 다른 구체가 출력되도록 해보자.

 

여기서 테스트로 2가지 구체를 적용하였는데, 나머지는 같지만 위치를 다르게 한 것이다.

Location은 움직이는 형태가 무언가를 건드릴 때 충격을 받는 객체의 위치이며,

ImpactPoint는 움직이는 형태가 실제로 접촉했을 때의 위치이다.

 

이제 실행을 해보자.

보면은 Location을 이용한 녹색 구체가 가고일에서 떨어져서 출력되고,

ImpactPoint를 이용한 빨간색 구체가 가고일의 위치에 출력되는 것을 볼 수 있다.

이러한 차이는 우리가 구체 트레이스를 이용하면서 생긴 것인데,

우리가 사용한 구체 트레이스의 반경이 1m이다.

ImpactPoint는 해당 구체 트레이스가 실제로 가고일이 닿는 위치를 나타낸 것에 반해,

Location은 해당 구체 트레이스 자체가 가고일에 닿는 순간 구체 트레이스의 위치를 나타냈기 때문이다.