본문 바로가기

Unreal/Udemy 강의

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

물리 오브젝트 깨우기

지금 무사히 가고일 석상을 집을 수 있는 것처럼 보이지만, 플레이 일정 시간이 지난 후에 가고일 석상을 집으면 집을 수 없는 현상이 발생할 수 있다.

이는 물리 시뮬레이션 컴포넌트가 성능 상의 이유로 일정 시간 동안 가동되지 않으면 슬립 상태로 들어가기 때문에 발생하는 현상이다.

따라서 구체 트레이스로 히트했을 때 깨어나도록 만들어주어야 한다.

이를 위해 PrimitiveComponent에 대해 조금 더 자세히 알아야 할 필요가 있다.

 

공식 문서의 설명을 보면, 해당 컴포넌트는 씬 컴포넌트이자 특정 지오메트리를 포함하거나 생성하고 콜리전 데이터로 렌더링되거나 사용된다는 것을 알 수 있다.

이는 해당 컴포넌트가 물리 시뮬레이션을 수행한다는 뜻이다.

해당 컴포넌트가 사용 가능한 함수를 살펴보자.

함수를 살펴보면 위와 같은 함수가 존재한다.

RigidBodies는 물리 시뮬레이션을 수행하는 오브젝트를 가리키며, 이를 실행 상태에 놓이도록 해주는 함수이다.

즉, 슬립 상태를 깨워주는 기능을 가지고 있다.

이를 이용해 구체 트레이스를 통해 Hit하는 순간 깨워주는 작업을 추가해주자.

 

다음으로 집은 가고일 석상을 놓아주는 기능을 구현해주자.

놓아주는 기능은 ReleaseComponent() 함수를 통해 간단히 할 수 있다.

해당 함수를 시행하기전에, 먼저 PhysicsHandle을 가져오고, 여기서도 마찬가지로 null인지 아닌지 체크를 해준다.

추가적으로 지금 잡고있는 컴포넌트가 있는지도 체크해주는 것이 좋다.

여기서도 WakeAllRigidBodies 함수를 사용하였는데, 이는 집고 있는 상태로 오래 있으면 다시 슬립모드로 들어갈 수 있기 때문이다.

따라서 여기서도 안전하게 깨워주는 것이 좋다.

 

집고 있는 상태를 체크해주어야 할 부분이 기존 코드에서 한 군데가 더 있다.

바로 Tick 함수 내에서 새롭게 위치를 지정해줄 때이다.

이는 집고 있는 순간에만 위치 및 회전이 변경되므로 이때만 체크해주면 된다.

 

이제 가고일 석상을 슬립 상태 없이 언제나 잡고 놓을 수 있다.

하지만 앞으로 이동하다보면 가고일 석상과 캐릭터가 부딪혀 이상하게 흔들리는 경우가 있다.

이를 방지하기 위해 가고일 석상과 캐릭터인 Pawn의 콜리전을 오버랩으로 변경해주자.

 

추가적으로 가고일 석상에 붙여줬던 밑면에 대해서는 충돌을 없애주었다.