본문 바로가기

Unreal/Udemy 강의

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

PhysicsHandle로 객체 잡기

이제 위치도 알았으니, 진짜로 PhysicsHandle를 이용해 가고일 석상을 잡아볼 차례이다.

우선 PhysicsHandle이 없을 경우 성립자체가 불가능하므로 얼리리턴을 통해 바로 종료하도록 해준다.

 

다음으로 저번에 잠깐봤었던 GrabComponentAtLocationWithRotation 함수를 채워나갈 차례이다.

해당 함수가 필요한 항목은 다음과 같다.

 

처음 변수인 UPrimitiveComponent 타입을 어떻게 얻을 수 있을까?

HitResult에 속한 함수를 찾아보면 다음과 같은 내용을 찾을 수 있다.

 

HitResult에 속한 함수인 GetComponent 함수를 이용하면 우리가 찾는 UPrimitiveComponent를 얻을 수 있다.

따라서 HitResult.GetComponent()를 해주면 된다.

다음으로 InBoneName인데, 이는 잡는 캐릭터가 스켈레탈 메시인 경우 해당되는 내용이다.

우리는 현재 캐릭터에 아무것도 없으므로, NAME_None을 적어준다.

위치의 경우 직전 강의를 통해 배웠던 ImpactPoint를 적어주고,

Rotation은 Grabber 컴포넌트의 회전과 맞추기 위해 Grabb 컴포넌트의 Roation을 넣어준다.

 

이제 가고일을 잡을 수 있는 상태가 되었다.

하지만 잡고 나서 움직이기 때문에 매순간 가고일의 위치가 변경한다.

따라서 잡고 이동하는 동안의 위치를 Tick에서 설정해줄 필요가 있다.

잡고 유지하는 거리는 잡았을 때보다 짧게 하기 위해 헤더에서 HoldDistance를 따로 설정해주었다.

 

이제 해당 거리를 토대로 매 Tick마다 가고일 석상의 위치 및 회전을 다시 설정해주자.

 

이제 실행을 해보는데, 해보기에 앞서 가고일의 모빌리티를 무버블로 해주고 피직스 시뮬레이트를 활성화해준다.

 

이제 실행해보면 무사히 가고일 조각상을 집고 움직이는 것이 가능하다.

 

추가적으로 현재 코드에 UPhysicsHandleComponent* PhysicsHandle가 자주 쓰임에 따라 함수로 분리해주었다.

헤더파일에서 해당 함수를 const로 선언해주고, 따로 구현하여 기존 내용을 대체하였다.