Query, Physics, Collision

김지윤·2025년 1월 18일
0

UE5

목록 보기
8/16

무식하게 아무런 참고 자료 없이 직접 테스트해가며 언리얼을 학습했던 시기가 있었다.
그 때 무엇보다 헷갈리는 건 Query와 Physics였다.

카드 게임을 만들던 시절 LineTrace를 통해 커서 아래의 카드를 HitResult로 검출하고, 마우스 이벤트를 통해 해당 카드를 조작(카드 드로우나 드래그를 통한 사용 등)하는 로직을 작성했었는데, 이때 Query와 Physics 때문에 미치고 펄쩍 뛰었던 기억이 있다.
해당 프로젝트를 중간에 그만두고나서야 깨달은 건데, 카드는 Physics가 필요 없었다..
카드 메쉬에 Collision Enable(둘 다 쓰는 거) 설정을 사용했던 게 아직도 생각나곤 한다.
마침 복습겸 보는 강의에서 Collision을 다루고 있으니 정리해 적어보겠다.

QueryPhysics
특징단순 Overlap, Block 여부 확인실제 현실처럼 움직임을 표현하고 싶을 때 사용
사용 방법Collision 설정에서 Query Only 혹은 Collision EnableCollision 설정에서 Physics Only 혹은 Collision Enable
사용처총알 궤적, 커서 아래 Hit, 포탈에 캐릭터 Overlap 등자동차 움직임, 수류탄 투척, 중력 등
성능가벼움무거움

AddActorWorldOffset 등의 함수를 호출할 때 Sweep이라는 bool값을 매개변수로 전달할 수 있는데, 이것은 Query 시스템과 관련된 것이다.
true로 넘기면 Query 여부를 Collision의 사전 설정 (Ignore, Overlap, Block)에 따라 검사하고, false로 넘기면 검사 자체를 생략한다.

말이 나왔으니 Collision의 사전 설정에 대해서도 이야기해보자.
표를 보는 게 더 쉬울 것 같다.

액터 A👇/ 액터B👉IgnoreOverlapBlock
Ignore이벤트 없음이벤트 없음이벤트 없음
Overlap이벤트 없음Overlap 이벤트 발생Overlap 이벤트 발생
Block이벤트 없음Overlap 이벤트 발생Block 이벤트 발생

Block < Overlap < Ignore의 우선순위를 가진다고 생각하면 편할 것 같다.

재밌는 점은 ProjectileMovement를 사용할 때, Simulating Physics를 false로 설정해도 Should Bounce를 true로 설정하면 Block됐을 때 마치 물리 시스템으로 작동하는 것처럼 튕겨나가기도 한다.
재밌나? 사실 헷갈려 죽겠다.
막상 개발할 땐 직접 설정 바꿔서 부딪혀본 다음 '아~ 맞다.' 하고 개발을 진행하곤 한다.
확실한 점은 Query보다 Physics가 더 무겁다는 것이며, 가능하다면 최적화를 위해 Query만 사용하는 게 좋다.
근데 3D 게임에선 보통 둘 다 필요할 때가 많긴 하다.

profile
공부한 거 시간 날 때 작성하는 곳

0개의 댓글