들어가기 전에
- 단순화하기 위해서 문체를 단정적으로 사용하지만 지극히 개인 의견일 뿐입니다.
- 본문과 관련해서 오류 지적이나 의견이 있으시면 꼭 댓글 부탁드립니다.
- 글 작성 시점은 2024/09입니다.
- 글 작성 기준은 UE5.4.4입니다.
들어가며
문서1, 문서2를 먼저 살펴보고 오시기 바랍니다.
여러분은 아마 숱하게 많은 UnrealEngine Collision 문서나 강좌들을 보셨을 것입니다. 그런데 대부분 뭔가 좀 찝찝하지 않으셨을까 싶습니다. 맞긴 맞는데 적용해 보면 뭔가 안 맞고, 이해했는데 뭔가 애매하고 하는 그런 느낌적인 느낌들. 지금 그 찝찝함을 날려 보겠습니다(라고 하지만 필자도 돌아서면 가끔 헷갈립니다).
이 문서의 내용은 여러분이 기본적인 UE Collision Presets(Profile)을 다뤄보셨고 최소한의 이해가 있음을 가정하지만, 없어도 큰 문제는 없습니다. 보고 나서 나중에 적용할 때 떠올릴 수 있으면 충분할 것입니다. 여기서는 ObjectType에 초점을 맞추겠습니다.
Collision Preset 상호 작용

Collision Preset은 크게 두 부분으로 나누어져 있다고 생각하셔야 합니다.
- 남이 날 뭐라고 인식하느냐 하는 ObjectType
- 내가 남의 ObjectType에 어떻게 반응할 것인가 하는 Collision Response ObjectType(Filter)
- CollisionResponse 아래에 있는 ObjectType 'Ignore/Overlap/Block'은 Preset 자체의 ObjectType과는 무관하다는 것을 잊어서는 안 됩니다.
하나의 Collision Preset 내에서 ObjectType과 CollisionResponse-ObjectType은 서로 아무런 영향을 주지 않습니다. 오직 '남이 날 무엇으로 볼 것인가?'와 '내가 남을 어떻게 받아들일 것인가?'만 있습니다. ObjectType이 어떻게 바뀌어도 CollisionResponse에 영향을 주지 않고, 그 역도 마찬가지입니다.
충돌 결과를 생각해 볼 때도 두 개로 나누어서 이렇게 생각해 보시기 바랍니다.
- 일단 내 ObjectType은 머리에서 지웁니다.
- 그리고 남의 ObjectType에 내가 어떻게 반응 CollisionResponse-To-ObjectType(Ignore, Overlap, Block)하는지 계산합니다.
- 남의 입장에서 똑같이 계산합니다.
그 결과로 내가 남을 'Ignore, Overlap, Block' 하는지와 남이 날 'Ignore, Overlap, Block' 하는지 각각 결정하게 되고, 최종 상호 작용은 다음과 같이 됩니다.
- 내가 남을 Ignore(무시)하면 남이 날 어떻게 봐도 쌍방 Ignore(무시)입니다.
- 내가 남을 Overlap(Event 감지)으로 처리하면 남이 날 무시하지 않으면 쌍방 Overlap입니다.
- 내가 남을 Block 처리하고 남도 날 Block 처리하면 쌍방 Block입니다.
쌍방이 최종 결과적으로 다르게 처리되는 경우는 없습니다. 생각해 보면 당연합니다. 남이 유령이고 내가 사람인데 유령은 날 관통하는데 난 유령을 관통하지 못한다면? 내가 움직일 때 찡겨(stuck)버릴 것입니다.
결과적으로 일종의 우선순위가 생기게 됩니다. Ignore > Overlap > Block
자 그럼 게임을 시작해 보겠습니다
Case 1
- PresetA ObjectType : Pawn
- PresetA CollisionResponse_To_ObjectType-Pawn : Overlap
- PresetB ObjectType : Pawn
- PresetB CollisionResponse_To_ObjectType-Pawn : Block
충돌 결과는? Overlap
Case 2
- PresetA ObjectType : Pawn
- PresetA CollisionResponse_To_ObjectType-Pawn : Ignore
- PresetB ObjectType : Pawn
- PresetB CollisionResponse_To_ObjectType-Pawn : Block
충돌 결과는? Ignore
Case 3
- PresetA ObjectType : Pawn
- PresetA CollisionResponse_To_ObjectType-Wall : Block
- PresetB ObjectType : Wall
- PresetB CollisionResponse_To_ObjectType-Pawn : Block
충돌 결과는? Block
걸어 다니는 유령을 만들려면?
Preset-GhostPawn이라는 Preset이 있고 이 Preset이
- Preset-GhostPawn ObjectType : Pawn
- Preset-GhostPawn CollisionResponse_To_ObjectType-Pawn : Ignore
이면 무슨 의도인 걸까요? 내 ObjectType이 Pawn이고 다른 ObjectType-Pawn에 대해 Ignore이니, ObjectType-Pawn인 다른 Preset에서 어떻게 반응해도 최종 결과는 Ignore일 텐데요. 그냥 CollisionEnabled를 꺼버리는 것과 다를 게 있을까요?
이것은 걸어 다니는 유령을 만들 때 사용해야 합니다. Preset-Floor는 이렇게 되어 있을 것입니다.
- Preset-Floor ObjectType : StaticMesh
- Preset-Floor CollisionResponse_To_ObjectType-Pawn : Block
물론 Preset-GhostPawn은 이렇게 되어 있어야 합니다.
- Preset-GhostPawn ObjectType : Pawn
- Preset-GhostPawn CollisionResponse_To_ObjectType-Pawn : Ignore
- Preset-GhostPawn CollisionResponse_To_ObjectType-StaticMesh : Block
Q) 그럼 Preset-Pawn은 GhostPawn에 대해서는 어떻게 설정해야 할까요?
A) GhostPawn이란 ObjectType은 없으니 GhostPawn에 대해서 설정할 것은 없습니다.
- Preset-Pawn ObjectType : Pawn
- Preset-Pawn CollisionResponse_To_ObjectType-Pawn : Block
- Preset-Pawn CollisionResponse_To_ObjectType-StaticMesh : Block
주의
ObjectType은 개수 제한이 있습니다
꼭 필요하지 않으면 ObjectType을 추가하지 말고 Preset으로 해결해 보시기 바랍니다.
Preset 이름과 ObjectType 이름을 헷갈리지 마세요
Preset 이름은 Preset 이름일 뿐입니다. ObjectType-Name과 아무 관련이 없습니다. 개수 제한도 받지 않습니다. Preset 이름인 Pawn을 떠올릴 때는 항상 '프리셋폰', '프리셋폰' 하고 '오브젝트타입폰', '오브젝트타입폰'과 구분해서 생각하시기 바랍니다. 이것은 의외로 많이들 혼동하는 부분입니다.