[Unity] 일방향 충돌, 측면 마찰 및 반발력을 설정할 수 있는 Platform Effector 2D
2022. 2. 19. 20:21ㆍGame Development/Unity
Platform Effector 2D
- 콜라이더에 일방향 충돌, 측면 부분의 마찰력/반발력 제거 등의 설정할 수 있는 컴포넌트
- 메이플스토리의 지형을 보면, 땅의 윗 부분은 충돌이 일어나지만 아랫 부분은 일어나지 않는다. 이런 일방향 충돌을 구현할 수 있다.
- 그 외에도, 2D 캐릭터가 벽면 콜라이더 오브젝트의 마찰력 때문에 벽에 끼어서 자연스럽게 내려오지 않는 상황도 해결할 수 있다.
- 이펙터(Effector)와 함께 사용하는 콜라이더는 다른 콜라이더와의 충돌을 위해, 일반적으로 트리거 모드로 설정되지 않는다.
- 이펙터를 적용할 콜라이더의 Used By Effector 프로퍼티를 활성화해야 한다.
Platform Effector 2D의 프로퍼티
- Used Collider Mask : Collider Mask 프로퍼티를 사용할 것인지에 대한 여부
- 즉, 특정 레이어(Layer)에게만 충돌 처리를 할 지에 대한 옵션인 것 같다.
- 사용하지 않는 경우, 다른 모든 콜라이더들과 충돌이 일어나는 것 같다.
- Collider Mask : 해당 콜라이더와 충돌이 일어나게 할 레이어들을 선택
- "Used Collider Mask" 프로퍼티를 활성화했을 때만 사용 가능
- "Everything"으로 설정하면, 모든 레이어들과 충돌 처리를 진행한다는 의미이므로 사실상 Used Collider Mask 체크 해제와 똑같지 않을까 생각한다.
- Rotational Offset : 밑에서 설명할 건데, 정의된 위쪽 충돌과 측면에 대해 회전을 시킬 수 있는 값
- Use One Way : 콜라이더가 일방향 충돌만 처리하게 하고 싶을 경우, 사용
- 아래에서 위로 이동하는 것으로 간주하는 오브젝트는 충돌 처리하지 않음
- 위에서 아래로 이동하는 것으로 간주하는 오브젝트는 충돌 처리
- 메이플스토리 게임의 맵 지형을 생각해보면 이해하기 좋을 듯
- Use One Way Grouping : 일방향 충돌로 인해, 비활성화된 모든 접촉이 모든 콜라이더에 작용하도록 적용
- 일방향 충돌을 하니, 플랫폼 이펙터가 적용된 콜라이더 부분에 비활성화된 접점이 생김
- 허나, 플랫폼 이펙터가 적용된 콜라이더를 지나가는 오브젝트가 여러 콜라이더를 사용하고 있을 경우, 이 비활성화된 점접이 해당 오브젝트의 여러 콜라이더들에게는 영향을 미칠 수도 있다.
- 예를 들어, 팔과 몸에 콜라이더가 각각 붙은 캐릭터 오브젝트가 플랫폼 이펙터가 적용된 콜라이더를 걸으며 지나간다고 가정하면, 팔은 처음 접촉한 면이라 그대로 비활성화가 되서 통과되지만 두 번째로 접촉한 몸 콜라이더는 통과하지 못할 수도 있음
- 이 옵션을 활성화했을 때, 여러 콜라이더 중 충돌 접촉이 하나라도 비활성화되면, 모든 콜라이더 접촉이 비활성화된다.
- 플랫폼 이펙터가 적용된 콜라이더를 지나가는 오브젝트에 여러 콜라이더들이 사용되고, 모두 하나의 그룹으로 함께 작동해야 하는 경우에 유용
- Use One Way Grouping에 대한 사용 예시
더보기
캐릭터에 콜라이더를 두 개 넣어주고, 평상(플랫폼 이펙터가 적용된 콜라이더)을 걸어보는 실험을 진행했다.
배 쪽에 있는 콜라이더가 먼저 접촉하도록 일부로 상황을 만들어봤다.
캐릭터 전체 콜라이더는 비활성화된 접촉면이 생겨서 잘 통과하는데 반해, 배 쪽 콜라이더는 이 접촉면에 충돌 영향을 받아서 생긴 현상이다.
이 때, Use One way Grouping 옵션을 활성화해주면 해당 캐릭터에 있는 모든 콜라이더를 하나의 개체로 보기 때문에 문제가 발생하지 않는다.
아까와 같은 상황을 다시 만들어보려고 해도 이제 발생하지 않는다.
- Surface Arc : 로컬 영역의 위쪽을 중심으로 한 호의 각도. 콜라이더가 통과하지 못하도록 하는 표면을 정의
- 해당 호의 밖에 있는 것들은 모두 일방향 충돌에 대한 고려 대상이 된다.
- Use Side Friction : 측면 쪽에 마찰력을 사용할 것인지에 대한 여부
- 비활성화 시, 캐릭터가 벽 쪽에 점프를 했는데, 이동 입력을 멈추지 않는 이상 벽에 걸려서 내려오지 않는 버그 해결 가능
- Use Side Bounce : 측면 쪽에 반발력을 사용할 것인지에 대한 여부
- Side Arc : 로컬 영역에서 왼쪽 혹은 오른쪽을 중심으로, "측면"을 정의하는 호의 각도
- 이 호 안의 모든 일반 충돌은 "측면" 동작에 대한 고려 대상이 된다.
- 즉, 호 안에서의 충돌은 마찰력이나, 반발력 적용에 대한 고려 대상이 된다는 뜻
728x90
반응형
'Game Development > Unity' 카테고리의 다른 글
[Unity] SendMessage와 BroadcastMessage (5) | 2022.02.22 |
---|---|
[Unity] "Universal RP Light 2D"를 스크립트 제어하기 (0) | 2022.02.20 |
[Unity] 빌트인 파티클 시스템(Built-in Particle System) : 메인 모듈(Main Module) (0) | 2022.02.17 |
[Unity] C# 접근 한정자 + 인스펙터에서 변수 확인하기 (Debug Mode) (0) | 2022.02.15 |
[Unity] 트랜스폼(Transform)에 대해 조금 더 공부하기 (0) | 2022.02.14 |