[Unity] 일방향 충돌, 측면 마찰 및 반발력을 설정할 수 있는 Platform Effector 2D

2022. 2. 19. 20:21Game Development/Unity

 

Platform Effector 2D

 

Platform Effector 2D 컴포넌트

 

  • 콜라이더에 일방향 충돌, 측면 부분의 마찰력/반발력 제거 등의 설정할 수 있는 컴포넌트
  • 메이플스토리의 지형을 보면, 땅의 윗 부분은 충돌이 일어나지만 아랫 부분은 일어나지 않는다. 이런 일방향 충돌을 구현할 수 있다.
  • 그 외에도, 2D 캐릭터가 벽면 콜라이더 오브젝트의 마찰력 때문에 벽에 끼어서 자연스럽게 내려오지 않는 상황도 해결할 수 있다.
  • 이펙터(Effector)와 함께 사용하는 콜라이더는 다른 콜라이더와의 충돌을 위해, 일반적으로 트리거 모드로 설정되지 않는다.
  • 이펙터를 적용할 콜라이더의 Used By 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"이 비활성화된 모습

 

배 쪽에 있는 콜라이더가 먼저 접촉하도록 일부로 상황을 만들어봤다.

캐릭터 전체 콜라이더는 비활성화된 접촉면이 생겨서 잘 통과하는데 반해, 배 쪽 콜라이더는 이 접촉면에 충돌 영향을 받아서 생긴 현상이다.

 

이 때, Use One way Grouping 옵션을 활성화해주면 해당 캐릭터에 있는 모든 콜라이더를 하나의 개체로 보기 때문에 문제가 발생하지 않는다.

 

 

"Use One Way Grouping"이 활성화된 모습

 

아까와 같은 상황을 다시 만들어보려고 해도 이제 발생하지 않는다.

  • Surface Arc  :  로컬 영역의 위쪽을 중심으로 한 호의 각도. 콜라이더가 통과하지 못하도록 하는 표면을 정의
    • 해당 호의 밖에 있는 것들은 모두 일방향 충돌에 대한 고려 대상이 된다.
  • Use Side Friction  :  측면 쪽에 마찰력을 사용할 것인지에 대한 여부
    • 비활성화 시, 캐릭터가 벽 쪽에 점프를 했는데, 이동 입력을 멈추지 않는 이상 벽에 걸려서 내려오지 않는 버그 해결 가능
  • Use Side Bounce  :  측면 쪽에 반발력을 사용할 것인지에 대한 여부
  • Side Arc  :  로컬 영역에서 왼쪽 혹은 오른쪽을 중심으로, "측면"을 정의하는 호의 각도
    • 이 호 안의 모든 일반 충돌은 "측면" 동작에 대한 고려 대상이 된다.
    • 즉, 호 안에서의 충돌은 마찰력이나, 반발력 적용에 대한 고려 대상이 된다는 뜻

 

728x90
반응형