강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

김대영님의 프로필 이미지
김대영

작성한 질문수

실전! 언리얼 소울라이크 개발: A to Z

무기 콜리전 시스템과 데미지 처리

무기 콜리전 시스템에 대해

작성

·

46

0

이해한 내용 :

12 번째 강의를 보면 무기의 데미지 처리를 위해 CollisionComponent를 따로 생성하셨습니다.

 

TickComponent에서 LineTracing 활성화 여부를 조절함으로써 원하는 공격 타이밍에 무기의 데미지 처리를 할 수 있게끔 구현하셨습니다.

 

질문할 내용 :

혹시 무기에 CapsuleCollision을 부착하여 CollisionComponent 자체의 콜리전을 NoCollision 혹은 Overlap 모드로 변경하는 식의 충돌 처리와 어떤 차이가 있는 지 알 수 있을까요 ??

답변 1

0

Spector님의 프로필 이미지
Spector
지식공유자

안녕하세요!

CollisionComponent 방식은 물리 업데이트 주기에 따라 충돌을 검사하는 방식이기 때문에, 빠른 움직임에서 충돌을 놓치거나 프레임률에 따라 충돌 감지가 불안정할 수 있습니다.

반면 LineTrace 방식은 연속적인 감지 방식으로, 빠르게 무기를 휘두르는 상황에서도 중간 지점들을 놓치지 않고 처리할 수 있어 더욱 정밀한 구현이 가능합니다.

따라서 검, 도끼 등 휘두르는 무기의 충돌 처리나 정밀한 타격감이 중요한 빠른 액션 게임에서 LineTrace 방식이 적합하다고 할 수 있습니다.

반면 CollisionComponent 방식은 느린 움직임의 함정이나 장애물과 같은 오브젝트의 충돌 처리, 또는 지속적인 접촉이 필요한 오브젝트 구현에 더 적합합니다.

엔진 레벨에서의 처리 방식 차이를 간단하게 설명드리면, LineTrace 방식은 요청 시점에 명시적인 함수 호출로 처리되어 결과가 즉시 반환됩니다. 반면 CollisionComponent는 씬 그래프에 영구 등록되어 매 물리 업데이트마다 검사하며, 비동기 이벤트 시스템을 통해 처리됩니다.

그럼 좋은 하루 되세요.

김대영님의 프로필 이미지
김대영
질문자

두 방법의 비용 차이는 어떻게 되는지 알 수 있을까요 ?? CollisionComponent는 시간복잡도가 O(nlogn)인 반면에 LineTrace는 O(logn)이라고 하는 글을 봤는데 맞을까요 ?

Spector님의 프로필 이미지
Spector
지식공유자

안녕하세요.
두 가지 방식의 시간 복잡도 차이는 다음과 같습니다.

CollisionComponent 방식

  • 시간 복잡도: O(1) ~ O(log n)

  • 연속적인 충돌 감지에 효과적이며, 공간 분할 구조를 활용합니다. 물리 시뮬레이션 엔진이 자동으로 최적화된 충돌 쿼리를 수행합니다.

LineTrace 방식

  • 시간 복잡도: O(n) ~ O(n log n)

  • 명시적인 레이캐스팅 방식으로, 매 프레임마다 수동으로 트레이스를 실행합니다. 트레이스 거리와 충돌 대상 개수에 따라 성능 차이가 발생합니다.

따라서 선택 기준은 다음과 같습니다.

  • CollisionComponent: 지속적인 충돌 감지가 필요할 때, 물리 시뮬레이션을 활용할 때, 복잡한 형태의 충돌체를 다룰 때 효과적입니다.

  • LineTrace: 순간적이거나 선택적인 충돌 검사, 정밀한 제어가 필요한 경우에 적합합니다. 예를 들어, 총알 발사나 시선 체크 같은 일회성 검사, 단순한 점대점 충돌 확인, 특정 오브젝트 타입만 선별적으로 검사하는 경우에 유용합니다.

정리하면, CollisionComponent는 지속적인 충돌 감지 상황에서 O(log n) 수준의 우수한 성능을 제공하며, LineTrace는 필요에 따른 선택적 검사에서 더 효율적일 수 있습니다. 결국 사용 목적과 상황에 맞춰 적절한 방식을 선택하는 것이 중요합니다.

따라서 무기의 순간적인 층돌체크는 무기에 CapsuleCollision같은 Component를 부착해서 처리하는 방식 보다는 LineTrace가 더 효과적인 선택이 될 수 있습니다.

좋은 하루 보내세요!

김대영님의 프로필 이미지
김대영

작성한 질문수

질문하기