본문 바로가기
Unity/물리

콜라이더(Collider)

by Jinger 2023. 8. 10.

서론

    유니티(Unity)에서 콜라이더(Collider)는 게임 오브젝트(Game Object)의 충돌(Collision)과 트리거(Trigger)를 처리하는 데 사용되는 컴포넌트이다. 콜라이더는 게임 세계에서 물체가 어떻게 상호작용하는지를 정의하는 물리학적인 형태를 가진다. 게임 개발에서 충돌 감지, 물리 효과, 충돌 이벤트 처리 등 다양한 작업을 처리하는데 쓰인다.


콜라이더

   Collider 컴포넌트는 물리적 충돌을 위해 게임 오브젝트의 모양을 정의한다. 보이지 않는 콜라이더는 게임 오브젝트의 메시와 완전히 똑같을 필요는 없다. 메시의 대략적인 근사치로도 효율적일 때가 많으며, 게임플레이에서 구별하기 어렵다. 3D에서는 박스 콜라이더, 스피어 콜라이더, 캡슐 콜라이더가 기본적인 타입으로, 2D에서는 박스 콜라이더 2D와 써클 콜라이더 2D를 기본적인 타입으로 제공한다. 복합 콜라이더를 만들기 위해 이러한 콜라이더를 단일 게임 오브젝트에 원하는 만큼 추가할 수 있다.

복합 콜라이더

    복합 콜라이더를 사용하면 프로세서 부하를 낮게 유지하면서 게임 오브젝트의 대략적인 모양을 만들 수 있다. 유연성을 강화하기 위해 자식 게임 오브젝트에 콜라이더를 추가할 수도 있다. 예를 들어 부모 게임 오브젝트의 로컬 축을 기준으로 상자를 회전시킬 수 있다. 이런 식으로 복합 콜라이더를 만들 때에는 하나의 Rigidbody 컴포넌트 사용해야 하며 계층 구조의 루트 게임 오브젝트에 배치해야 한다. 기본 콜라이더는 쉬어(Shear, 전단 변환) 변환이 일어난 경우 제대로 작동하지 않는다. 로테이션과 불균일 스케일을 트랜스폼 계층 구조에서 모두 사용하여 결과적으로 형태가 더 이상 기본 형태가 아닐 경우 기본 콜라이더가 이를 정확히 나타낼 수 없다.

메시 콜라이더

    복합 콜라이더를 만들어도 충분히 정확히 표현하지 못하는 경우도 있다. 3D에서는 메시 콜라이더를 사용해서 게임 오브젝트의 메시 모양에 정확하게 맞출 수 있다. 2D에서는 폴리곤 콜라이더 2D가 스프라이트 그래픽 모양과 완벽히 일치하지 않지만, 원하는 디테일 수준(LOD)으로 모양을 다듬을 수 있다.

    이러한 콜라이더는 기본형보다 프로세서에 훨씬 더 큰 부하를 주므로 꼭 필요한 경우에만 사용해야 한다. 또한 메시 콜라이더는 다른 메시 콜라이더와 충돌할 수 없다(메시 콜라이더끼리 접촉해도 아무 일도 일어나지 않음). 이 문제를 피하기 위해 메시 콜라이더를 인스펙터에서 Convex 로 설정할 수 있다. 이렇게 하면 “볼록 다각형” 모양의 콜라이더가 생성되는데, 이는 원본 메시와 유사하지만 움푹 파인 부분이 전부 메워져 있다.

   이 때의 장점은 컨벡스 메시 콜라이더가 다른 메시 콜라이더와 충돌할 수 있다는 점이다. 따라서 적합한 모양의 움직이는 캐릭터가 있을 때 이 기능을 사용할 수 있다. 그러나 일반적으로 메시 콜라이더는 씬 지오메트리에 사용하고, 움직이는 게임 오브젝트의 모양은 복합 기본 콜라이더를 사용하여 유사하게 만드는 것이 좋다.

정적 콜라이더

    Rigidbody 컴포넌트 없이도 콜라이더를 게임 오브젝트에 추가하여 씬의 바닥, 벽, 기타 고정된 요소를 생성할 수 있다. 이러한 콜라이더는 정적 콜라이더라고 부른다. 이와 반대로, 리지드바디가 있는 게임 오브젝트의 콜라이더는 동적 콜라이더라고 부른다. 정적 콜라이더는 동적 콜라이더와 상호작용이 가능하지만, 정적 콜라이더에는 리지드바디가 없기 때문에 충돌에 리스폰스하여 움직이지는 않는다.

물리 머티리얼

    콜라이더가 상호 작용할 때, 콜라이더의 표면은 각각이 나타내는 머티리얼의 프로퍼티를 시뮬레이션해야 한다. 예를 들어, 얼음판은 미끄러워야 하고 고무공 표면은 마찰이 크며 탄성이 강해야 한다. 충돌 중에 콜라이더의 형태가 변형되지는 않지만, 마찰과 탄성은 물리 머티리얼(Physics Materials) 을 사용하여 설정할 수 있다. 적절한 파라미터 값을 찾아내려면 약간의 시행착오가 필요할 수 있다. 예를 들어 얼음과 같은 미끄러운 머티리얼의 경우 0 또는 매우 낮은 마찰 값을 가지고, 고무와 같은 미끄럽지 않은 머티리얼은 높은 마찰과 거의 완벽한 바운스 값을 가진다. 기존 이름을 함부로 바꿀 수 없어 물리 머티리얼의 3D 에셋의 영문명은 Physic Material(끝에 s가 없음) 이고, 2D의 영문명은 Physics Material 2D(끝에 s가 있음)로 되어 있다.

트리거(Trigger)

    스크립팅 시스템은 충돌이 일어나는 시점을 감지하고 OnCollisionEnter 함수를 사용하여 액션이 초기화할 수 있다. 또한, 단순히 하나의 콜라이더가 충돌을 일으키지 않고 다른 콜라이더의 공간에 들어가는 것을 물리 엔진이 감지하도록 할 수도 있다. 콜라이더를 트리거(Trigger)(Is Trigger 프로퍼티 사용)로 설정하면 이 콜라이더는 솔리드 오브젝트로 동작하지 않으며 그저 다른 콜라이더가 통과하도록 허용한다. 다른 콜라이더가 이 콜라이더의 공간에 들어오면, 트리거는 트리거 오브젝트의 스크립트에 있는 OnTriggerEnter 함수를 호출한다.

스크립트에서 충돌 콜백

    충돌이 일어나면 물리 엔진은 충돌과 관련된 오브젝트에 있는 모든 스크립트에서 특정 이름을 가진 함수를 호출한다. 충돌 이벤트가 발생했을 때의 동작을 정의하기 위해 원하는 대로 코드를 작성할 수 있다. 예를 들어, 차가 장애물에 부딪쳤을 때 충돌 음향 효과를 재생하도록 할 수 있다.
    충돌이 감지되었을 때 가장 먼저 일어나는 물리 업데이트는 OnCollisionEnter 함수이다. 접촉이 지속되는 상황에서는 업데이트 동안 OnCollisionStay 함수가 호출되며, 마지막으로 이 접촉 상태가 종료되었음을 나타내는 OnCollisionExit 함수가 호출된다. 트리거 콜라이더의 경우 유사하게 OnTriggerEnter, OnTriggerStay, OnTriggerExit 함수를 호출한다. 2D 물리의 경우 동일한 기능을 하는 함수를 제공하며, 함수의 이름에는 예를 들어 OnCollisionEnter2D처럼 위 함수명 끝에 2D 첨자가 붙는다.
    노멀 비트리거 충돌에서는 충돌에 관여하는 최소한 하나의 오브젝트가 비키네마틱 리지드바디를 가져야 한다는 추가 조건이 있다(즉, Is Kinematic 이 꺼져 있어야 합니다). 두 오브젝트가 모두 키네마틱 리지드바디이면 OnCollisionEnter 등의 함수가 호출되지 않는다. 트리거 충돌의 경우 이 제약이 적용되지 않으며, 따라서 키네마틱과 비키네마틱 리지드바디 모두 트리거 콜라이더에 들어가면 OnTriggerEnter가 호출된다.


콜라이더 상호작용

   콜라이더는 Rigidbody 컴포넌트의 환경 설정에 따라 서로 다르게 상호작용한다. 정적 콜라이더(즉, 리지드바디가 전혀 붙어있지 않음), 리지드바디 콜라이더, 키네마틱 리지드바디 콜라이더 등 세 가지 중요한 환경설정이 있다.

정적 콜라이더

    정적 콜라이더는 콜라이더가 있지만 리지드바디는 없는 게임 오브젝트이다. 정적 콜라이더는 항상 같은 위치에 그대로 있으면서 절대로 움직이지 않는 레벨 지오메트리에 주로 사용된다. 리지드바디 오브젝트가 다가오면 정적 콜라이더와 충돌하지만 그래도 정적 콜라이더가 움직이지는 않는다.
   특정한 경우 물리 엔진은 절대 움직이지 않는 정적 콜라이더에 대해 최적화한다. 예를 들어 정적 콜라이더 위에 놓인 차량은 이 정적 콜라이더를 움직여도 고정된 상태를 유지한다. 물리 엔진 계산 속도에 별다른 영향을 주지 않고도 런타임 시점에 정적 콜라이더를 활성화 또는 비활성화하거나 이동시킬 수 있다. 또한 스케일이 왜곡되지 않고 일정한 경우에 한하여 정적 메시 콜라이더를 안전하게 스케일할 수 있다.

리지드바디 콜라이더

   리지드바디 콜라이더는 노멀 비키네마틱 리지드바디와 콜라이더가 있는 게임 오브젝트이다. 리지드바디 콜라이더는 물리 엔진에 의해 완전히 시뮬레이션되며 스크립트로부터 적용되는 충돌과 힘에 반응한다. 다른 오브젝트(정적 콜라이더 포함)에 충돌할 수 있으며 물리를 사용하는 게임 내 가장 흔히 사용되는 콜라이더 설정이다.

키네마틱 리지드바디 콜라이더

    키네마틱 리지드바디 콜라이더는 콜라이더와 키네마틱 리지드바디가 있는(즉, 리지드바디의 IsKinematic 프로퍼티가 활성화됨) 게임 오브젝트이다. 키네마틱 리지드바디 오브젝트는 Transform 컴포넌트를 수정하여 스크립트를 통해 움직일 수 있지만, 비키네마틱 리지드바디처럼 충돌이나 힘에 반응하지 않는다. 키네마틱 리지드바디는 상황에 따라 움직이거나 활성화/비활성화되지만 그 외 상황에서는 정적 콜라이더처럼 동작하는 콜라이더에 사용해야 한다. 예를 들어, 평소에는 움직이지 않는 물리 장애물처럼 동작하지만 필요할 때는 열 수 있는 미닫이문과 같은 경우에 사용한다. 정적 콜라이더와 달리, 움직이는 키네마틱 리지드바디는 다른 오브젝트에 마찰을 가하며 따라서 접촉이 일어나면 다른 리지드바디를 “깨우게”(Awake) 된다.
    키네마틱 리지드바디 콜라이더는 움직이지 않고 있을 때에도 정적 콜라이더와는 다르게 동작한다. 예를 들어, 콜라이더가 트리거로 설정되어 있으면 스크립트에서 트리거 이벤트를 받기 위해 리지드바디를 추가해야 한다. 트리거가 중력의 영향을 받거나 물리 영향을 받지 않도록 하고 싶으면 해당 리지드바디의 IsKinematic 프로퍼티를 설정하면 된다.
    Rigidbody 컴포넌트는 IsKinematic 프로퍼티를 사용하여 언제든 노멀 동작 또는 키네마틱 동작으로 변경할 수 있다. 좋은 예로 “래그돌” 효과가 있다. 래그돌의 경우 캐릭터는 일반적으로 애니메이션 하에서 움직이지만 폭발이나 큰 충돌 시 물리적으로 던져진다. 캐릭터의 팔다리에는 IsKinematic 이 디폴트로 활성화되어 있는 각각의 Rigidbody 컴포넌트가 주어진다. IsKinematic 이 활성화되어 있는 동안은 팔다리가 애니메이션에 의해 일반적으로 움직이다가, 비활성화되는 순간 즉시 물리 오브젝트처럼 동작하기 시작한다. 이 시점에서 충돌력 또는 폭발력으로 인해 캐릭터는 팔다리가 현실처럼 마구 흔들리면서 날아가게 된다.


충돌 액션 매트릭스

    두 오브젝트가 충돌하면 이 오브젝트의 리지드바디의 환경설정에 따라 여러 다른 스크립트 이벤트가 발생할 수 있다. 아래의 표는 오브젝트에 있는 컴포넌트에 따라 어떤 이벤트 함수가 호출되는지를 구체적으로 나타낸다. 일부 조합의 경우 두 오브젝트 중에서 하나만 충돌의 영향을 받으며, 일반적으로는 Rigidbody 컴포넌트가 없는 오브젝트에는 물리가 적용되지 않는 것이 원칙이다.

  • 충돌 시 충돌 검사가 되고 메시지가 전송
  정적 콜라이더 리지드바디 콜라이더 키네마틱 리지드바디 콜라이더 정적 트리거 콜라이더 리지드바디 트리거 콜라이더 키네마틱 리지드바디 트리거 콜라이더
정적 콜라이더   Y        
리지드바디 콜라이더 Y Y Y      
키네마틱 리지드바디 콜라이더   Y        
정적 트리거 콜라이더            
리지드바디 트리거 콜라이더            
키네마틱 리지드바디 트리거 콜라이더            
  • 충돌 시 트리거 메시지가 전송
  정적 콜라이더 리지드바디 콜라이더 키네마틱 리지드바디 콜라이더 정적 트리거 콜라이더 리지드바디 트리거 콜라이더 키네마틱 리지드바디 트리거 콜라이더
정적 콜라이더         Y Y
리지드바디 콜라이더       Y Y Y
키네마틱 리지드바디 콜라이더       Y Y Y
정적 트리거 콜라이더     Y   Y Y
리지드바디 트리거 콜라이더   Y Y Y Y Y
키네마틱 리지드바디 트리거 콜라이더 Y Y Y Y Y Y

제공되는 콜라이더 3D

Box Collider

    박스 콜라이더 는 직육면체 형태의 기본 충돌 프리미티브이다.

프로퍼티

  • Is Trigger: 이 옵션을 활성화하면 이 콜라이더는 이벤트를 트리거하는 데 사용되고 물리 엔진의 적용을 받지 않는다.
  • Material: 콜라이더가 다른 콜라이더와 상호작용하는 방법을 결정하는 물리 머티리얼에 대한 레퍼런스이다.
  • Center: 오브젝트의 로컬 공간에서 콜라이더의 포지션이다.
  • Size: X, Y, Z 방향에 있는 Collider의 크기

   박스 형태를 편집하려면 Inspector 에서 "Edit Collider 버튼"을 눌러 편집할 수 있다. Edit Collider 버튼을 다시 누르면 Collider Edit 모드를 종료할 수 있다. Edit 모드에서 버텍스는 박스 콜라이더의 각 면 중앙에 나타난다. 버텍스를 움직이려면 마우스 커서가 버텍스 위에 있을 때 버텍스를 드래그하여 수정할 수 있다. 그러면 박스 콜라이더가 커지거나 작아진다.

Capsule Collider

    캡슐 콜라이더(Capsule Collider) 는 실린더로 연결된 두 개의 반구로 구성되며 캡슐 프리미티브와 같은 모양이다.

프로퍼티

  • Is Trigger이 옵션을 활성화하면 이 콜라이더는 이벤트를 트리거하는 데 사용되고 물리 엔진의 적용을 받지 않는다.
  • Material: 콜라이더가 다른 콜라이더와 상호작용하는 방법을 결정하는 물리 머티리얼에 대한 레퍼런스이다.
  • Center: 오브젝트의 로컬 공간에서 콜라이더의 포지션이다.
  • Radius: 콜라이더의 로컬 너비 반지름
  • Height: 콜라이더의 전체 높이
  • Direction: 오브젝트의 로컬 공간에서의 캡슐의 길이 방향 축

Sphere Collider

    스피어 콜라이더(Sphere Collider) 는 구체 형태의 기본적 충돌 프리미티브이다.

프로퍼티

  • Is Trigger이 옵션을 활성화하면 이 콜라이더는 이벤트를 트리거하는 데 사용되고 물리 엔진의 적용을 받지 않는다.
  • Material: 콜라이더가 다른 콜라이더와 상호작용하는 방법을 결정하는 물리 머티리얼에 대한 레퍼런스이다.
  • Center: 오브젝트의 로컬 공간에서 콜라이더의 포지션이다.
  • Radius: 콜라이더의 로컬 너비 반지름

Wheel Collider

     휠 콜라이더(Wheel Collider) 는 지상 차량용 특수 콜라이더이다. 충돌 검사, 휠 물리 효과 및 슬립 기반 타이어 마찰 모델이 포함되어 있다. 휠이 아닌 오브젝트에도 사용이 가능하지만, 휠이 있는 차량용으로 설계되었다.

프로퍼티

  • Mass: 휠의 질량
  • Radius: 휠의 반지름
  • Wheel Damping Rate: 휠에 적용되는 감쇠 값
  • Suspension Distance: 휠 서스펜션의 최대 확장 거리로, 로컬 공간에서 측정된다. 서스펜션은 항상 로컬 Y 축을 통해 아래로 확장한다.
  • Force App Point Distance: 이 파라미터는 휠의 힘이 적용되는 지점을 정의한다. 이것은 서스펜션 주행 방향을 따라 정지 포지션에서 휠의 베이스로부터 미터 단위로 예상된다. forceAppPointDistance = 0일 때 힘은 나머지 휠 베이스에 적용된다.
더보기

 차량의 질량 중심 약간 아래에 힘이 작용하면 더 좋은 차량이 된다.

  • Center: 오브젝트 로컬 공간에서 휠의 중심
  • Suspension Spring: 서스펜션이 스프링과 댐핑의 힘을 추가하여 Target Position에 도달하려고 합니다.
    • Spring: 스프링 힘이 Target Position 에 도달하려고 한다. 값이 높을수록 서스펜션이 Target Position 에 더 빨리 도달한다.
    • Damper: 서스펜션 속도를 줄인다. 값이 높을수록 Suspension Spring 의 움직임이 더욱 느려진다.
    • Target Position: 서스펜션 거리를 따른 서스펜션의 남은 거리이다. 1은 완전히 확장된 서스펜션을 매핑하고 0은 완전히 압축된 서스펜션을 매핑한다. 기본값은 0.5로 보통 차량 서스펜션의 동작과 일치한다.
  • Forward/Sideways Friction: 휠이 앞과 옆으로 구를 때 타이어 마찰 프로퍼티이다.
    • Extremum Slip/Value: 커브의 극한 지점
    • Asymptote Slip/Value: 커브의 점근선 지점
    • Stiffness: Extremum Value과 Asymptote Value의 멀티플라이어이다(디폴트는 1). 마찰의 강도를 변경한다. 0으로 설정하면 휠의 모든 마찰이 사라진다.
더보기

휠 마찰 커브(Friction Curves)

    마찰은 아래 보이는 휠 마찰 커브 로 설명할 수 있다. 휠의 (구르는) 전방향과 측방향의 커브는 분리되어 있다. 두 방향 모두에서 타이어의 고무와 도로 사이의 속도 차이를 바탕으로 타이어가 얼마나 미끄러지는지 먼저 결정한다. 이 슬립 값을 사용하여 접촉 포인트에 가해지는 타이어 힘을 찾아낸다.

    커브는 타이어 슬립 측정 값을 입력으로 힘을 출력한다. 커브는 투 피스 스플라인에 가깝다. 첫 번째 섹션은 (0 , 0) 부터 (ExtremumSlip , ExtremumValue) 까지로, 커브의 탄젠트가 0이 되는 지점이다. 두 번째 섹션은 (ExtremumSlip , ExtremumValue) 부터 (AsymptoteSlip , AsymptoteValue) 까지로, 커브의 탄젠트가 또 다시 0이 된다.

휠 마찰 커브의 전형적인 형태

    실제 타이어의 프로퍼티는 고무가 스트레칭으로 슬립을 보상하기 때문에 낮은 슬립에서 높은 힘을 낼 수 있다. 나중에 슬립이 정말로 높아지면 타이어가 슬라이드 또는 스핀을 시작하여 힘이 줄어든다. 따라서 타이어 마찰 커브의 형태는 위 이미지와 비슷하다.

Mesh Collider

    Mesh Collider 는 메시 에셋을 사용하고 해당 메시를 기반으로 콜라이더를 빌드한다. 이 방법은 복잡한 메시에 프리미티브를 사용하는 것보다 충돌 검사에 더 정확하다. Convex 로 표시된 메시 콜라이더는 다른 메시 콜라이더와 충돌할 수 있다.

프로퍼티

  • Convex: 이 체크박스를 활성화하면 메시 콜라이더가 다른 메시 콜라이더와 충돌한다. Convex 메시 콜라이더는 삼각형 255개로 제한된다.
  • Is Trigger이 옵션을 활성화하면 이 콜라이더는 이벤트를 트리거하는 데 사용되고 물리 엔진의 적용을 받지 않는다.
  • Cooking Options: 메시 쿠킹 옵션을 활성화하거나 비활성화하면 물리 엔진이 메시를 처리하는 방식에 영향을 준다.
    • None: 아래에 나열된 Cooking Options 를 모두 비활성화한다.
    • Everything: 아래에 나열된 Cooking Options 를 모두 활성화한다.
    • Cook for Faster Simulation: 빠른 시뮬레이션을 위해 물리 엔진이 메시를 쿠킹하도록 만든다. 활성화하면 몇 가지 추가 단계를 실행하여 생성되는 메시를 런타임 성능에 최적화한다. 이 작업은 물리 쿼리와 컨택트 생성에 영향을 미친다. 이 설정을 비활성화하면 물리 엔진이 빠른 쿠킹 타임을 사용하여 가능한 빠르게 결과물을 생성한다. 따라서 쿠킹된 메시 콜라이더가 최적화되지 않을 수 있다.
    • Enable Mesh Cleaning: 물리 엔진이 메시를 청소하도록 만든다. 활성화하면 쿠킹 프로세스가 메시의 손상된 삼각형과 다른 지오메트리 결함을 제거하려고 시도한다. 이 작업을 수행하면 충돌 검사에 효과적인 메시를 만들고 더 정확한 히트 포인트를 생성할 수 있다.
    • Weld Colocated Vertices: 물리 엔진이 메시에서 같은 버텍스를 삭제하도록 만든다. 활성화하면 물리 엔진이 동일한 포지션을 가진 버텍스를 결합한다. 이 작업은 런타임 시점에 발생하는 충돌 피드백에 특히 중요하다.
    • Use Fast Midphase: 물리 엔진이 출력 플랫폼에 사용할 수 있는 가장 빠른 중간 단계 가속도 구조 및 알고리즘을 사용하도록 만든다. 이 옵션을 활성화하면 물리 엔진이 공간 액세스를 위해 R트리를 필요로 하지 않는 더 빠른 알고리즘을 사용한다. 일부 플랫폼에서 런타임 시점에 중간 단계 문제가 발생하면 이 옵션을 비활성화하고 속도가 더 느린 레거시 중간 단계 알고리즘을 대신 사용할 수 있다.
  • Material: 콜라이더가 다른 콜라이더와 상호작용하는 방법을 결정하는 물리 머티리얼에 대한 레퍼런스
  • Mesh: 충돌에 사용할 메시에 대한 레퍼런스
더보기

메시 쿠킹

    메시 쿠킹은 일반 메시를 물리 엔진에 사용할 수 있는 메시로 변경한다. 또한 물리 쿼리를 위한 공간 검색 구조체(예: Physics.Raycast)를 빌드하고 컨택트 생성을 위한 구조체를 지원한다. Unity는 충돌 검사에 사용하기 전에 모든 메시를 쿠킹한다. 이 작업은 임포트 시점(Import Settings > Model > Generate Colliders) 또는 런타임 시점에 발생한다.

    런타임 시점에 메시를 생성하는 경우(예: 절차적 표면) Cooking Options 를 설정하면 더 빠르게 결과물을 생성하고 추가 데이터 청소 단계가 비활성화된다. 단, 손상된 삼각형이나 같은 자리에 위치한 버텍스를 생성하지 않아야 하는 단점이 있지만, 그만큼 쿠킹 작업 속도가 빨라진다.

    Enable Mesh Cleaning 또는 Weld Colocated Vertices 를 비활성화한 경우 해당 알고리즘이 필터링할 수 있는 데이터를 사용하지 않아야 한다. Weld Colocated Vertices 를 비활성화한 경우에는 같은 위치에 버텍스가 존재하지 않아야 하고, Enable Mesh Cleaning 을 활성화한 경우에는 면적이 0에 가까운 작은 삼각형, 얇은 삼각형, 면적이 무한에 가까운 거대한 삼각형이 없어야 한다.

제공되는 콜라이더 2D

Box Collider 2D

    박스 콜라이더 2D는 2D 물리 시스템과 상호 작용하는 콜라이더이다. 스프라이트의 로컬 좌표 공간안에 포지션, 폭, 높이가 정의된 직사각형 모양이다. 이 직사각형은 로컬 공간의 X축 또는 Y축과 평행한 변을 사용하여 축에 맞춰 정렬된다.

프로퍼티

  • Material: 콜라이더가 다른 콜라이더와 상호작용하는 방법을 결정하는 물리 머티리얼에 대한 레퍼런스이다.
  • Is Trigger이 옵션을 활성화하면 이 콜라이더는 이벤트를 트리거하는 데 사용되고 물리 엔진의 적용을 받지 않는다.
  • Used by Effector: 써클 콜라이더 2D가 연결된 이펙터 2D에서 사용되길 원할 경우 이 상자를 선택해야 한다.
  • Used by Composite: 콜라이더가 연결된 Composite Collider 2D에서 사용되도록 하려면 이 체크박스를 선택해야 한다. Used by Composite를 활성화하면, 다른 프로퍼티는 연결된 복합 콜라이더 2D에서 제어되기 때문에 Box Collider 2D 컴포넌트에서 사라진다. 박스 콜라이더 2D에서 사라지는 프로퍼는 Material, Is Trigger, Used By Effector, Edge Radius이다.
  • Auto Tiling: 선택된 스프라이트 Sprite Renderer 컴포넌트의 Draw Mode가 Tiled로 설정돼 있을 경우 이 체크박스를 선택해야 한다. 이 경우 콜라이더 2D의 모양이 자동으로 업데이트 된다. 즉, 스프라이트의 크기가 변경되면 모양이 자동으로 재조정된다. Auto Tiling을 비활성화할 경우 콜라이더 2D 지오메트리는 자동으로 반복되지 않는다.
  • Offset: 콜라이더 2D 지오메트리의 로컬 오프셋이다.
  • Size: 로컬 공간 단위로 나타난 박스 크기를 설정한다.
  • Edge Radius: 버텍스가 원 모양이 되도록 모서리 주변의 반지름을 조정한다. 이 경우 원 모양의 컨벡스 코너로 된 콜라이더 2D의 크기는 커지게 된다. 이 설정의 기본값은 0(반지름 없음)이다.

Cirecle Collider 2D

     써클 콜라이더 2D는 2D 물리 시스템과 함께 상호 작용하는 콜라이더이다. 콜라이더의 모양은 원모양이며 포지션과 반지름은 스프라이트 로컬 좌표 공간에 정의되어 있다.

프로퍼티

  • Material: 콜라이더가 다른 콜라이더와 상호작용하는 방법을 결정하는 물리 머티리얼에 대한 레퍼런스이다.
  • Is Trigger이 옵션을 활성화하면 이 콜라이더는 이벤트를 트리거하는 데 사용되고 물리 엔진의 적용을 받지 않는다.
  • Used by Effector: 써클 콜라이더 2D가 연결된 이펙터 2D에서 사용되길 원할 경우 이 상자를 선택해야 한다.
  • Offset: 콜라이더 2D 지오메트리의 로컬 오프셋이다.
  • Radius콜라이더의 로컬 너비 반지름

Polygon Collider 2D

    Polygon Collider 2D 컴포넌트는 2D 물리 시스템과 상호 작용하는 콜라이더이다. 콜라이더의 형태는 라인 세그먼트로 구성되는 프리폼 에지로 정의되므로 스프라이트 또는 다른 형태에 맞게 조정할 수 있다. 이 콜라이더의 에지는 기능할 영역을 완전히 둘러싸야 한다.

프로퍼티

  • Material: 콜라이더가 다른 콜라이더와 상호작용하는 방법을 결정하는 물리 머티리얼에 대한 레퍼런스이다.
  • Is Trigger이 옵션을 활성화하면 이 콜라이더는 이벤트를 트리거하는 데 사용되고 물리 엔진의 적용을 받지 않는다.
  • Used by Effector: 써클 콜라이더 2D가 연결된 이펙터 2D에서 사용되길 원할 경우 이 상자를 선택해야 한다.
  • Used by Composite: 콜라이더가 연결된 Composite Collider 2D에서 사용되도록 하려면 이 체크박스를 선택해야 한다. Used by Composite를 활성화하면, 다른 프로퍼티는 연결된 복합 콜라이더 2D에서 제어되기 때문에 Box Collider 2D 컴포넌트에서 사라진다. 박스 콜라이더 2D에서 사라지는 프로퍼는 Material, Is Trigger, Used By Effector, Edge Radius이다.
  • Auto Tiling: 선택된 스프라이트 Sprite Renderer 컴포넌트의 Draw Mode가 Tiled로 설정돼 있을 경우 이 체크박스를 선택해야 한다. 이 경우 콜라이더 2D의 모양이 자동으로 업데이트 된다. 즉, 스프라이트의 크기가 변경되면 모양이 자동으로 재조정된다. Auto Tiling을 비활성화할 경우 콜라이더 2D 지오메트리는 자동으로 반복되지 않는다.
  • Offset: 콜라이더 2D 지오메트리의 로컬 오프셋이다.
  • Points: 생성된 콜라이더의 복잡도에 대한 편집할 수 없는 정보이다.

   인스펙터의 "Edit Collider 버튼"을 눌러 폴리곤 모양을 편집할 수 있다. Edit Collider 콜라이드 편집 모드를 종료할 수 있다. 편집 모드에서 마우스가 기존 버텍스 위에 있을 때 해당 버텍스를 드래그하여 이동할 수 있다. 마우스가 에지 위에 있을 때 shift를 누른 채로 드래그하면 마우스가 있는 위치에 새 버텍스가 생성된다. ctrl/cmd를 누른 상태에서 버텍스를 클릭하여 제거할 수 있다.

Edge Collider 2D

     Edge Collider 2D 컴포넌트는 2D 물리 시스템과 상호 작용하는 콜라이더이다. 콜라이더의 모양은 라인 세그먼트로 이루어진 자유형의 에지이며 스프라이트 또는 다른 모양에 맞게 조정할 수 있다. 콜라이더의 시작점과 끝점은(폴리곤 콜라이더 2D와 달리) 만나거나 기능할 영역을 완전히 둘러쌀 필요가 없으며 직선 또는 기타 단일 에지 모양을 형성할 수 있다.

프로퍼티

  • Material: 콜라이더가 다른 콜라이더와 상호작용하는 방법을 결정하는 물리 머티리얼에 대한 레퍼런스이다.
  • Is Trigger이 옵션을 활성화하면 이 콜라이더는 이벤트를 트리거하는 데 사용되고 물리 엔진의 적용을 받지 않는다.
  • Used by Effector: 써클 콜라이더 2D가 연결된 이펙터 2D에서 사용되길 원할 경우 이 상자를 선택해야 한다.
  • Offset X/Y: x/y 양을 설정하여 콜라이더 지오메트리를 오프셋한다.
  • Edge Radius: 콜라이더의 가장자리를 중심으로 반지름을 형성하는 값을 설정한다. 이로 인한 결과로 코너가 둥글고 오목한 대형 콜라이더 2D가 생성됩니다. 기본값은 0(반지름 없음)이다.
  • Points: 생성된 콜라이더의 복잡도에 대한 편집할 수 없는 정보이다.
  • Use Adjacent Start Point: 에지 콜라이더의 시작점에서 충돌이 발생할 때 충돌 노멀을 형성하기 위해 Adjacent Start Point를 사용하여 충돌 리스폰스를 계산하려면 이 프로퍼티를 활성화한다.
  • Adjacent Start Point X/Y: Adjacent Start Point의 x/y 좌표를 설정한다.
  • Use Adjacent End Point: 에지 콜라이더의 끝점에서 충돌이 발생할 때 충돌 노멀을 형성하기 위해 Adjacent End Point를 사용하여 충돌 리스폰스를 계산하려면 이 프로퍼티를 활성화한다.
  • Adjacent End Point X/Y: Adjacent End Point의 x/y 좌표를 설정한다.

Capsule Collider 2D

    Capsule Collider 2D는 2D 물리 시스템과 상호 작용하는 콜라이더입니다. 캡슐 모양은 버텍스 코너가 없고 매끈한 둥근 둘레를 가지고 있습니다. 이 모양은 캡슐 콜라이더 2D가 다른 콜라이더의 코너에 쉽게 걸리지 않도록 합니다. 캡슐 모양은 속이 비어 있지 않고 견고한 것으로 간주됩니다. 즉, 캡슐 콜라이더 2D 내부에 있는 다른 콜라이더 2D는 콜라이더와 접촉한 것으로 간주되어 시간이 지남에 따라 밖으로 밀려나게 됩니다.

프로퍼티

  • Material: 콜라이더가 다른 콜라이더와 상호작용하는 방법을 결정하는 물리 머티리얼에 대한 레퍼런스이다.
  • Is Trigger이 옵션을 활성화하면 이 콜라이더는 이벤트를 트리거하는 데 사용되고 물리 엔진의 적용을 받지 않는다.
  • Used by Effector: 써클 콜라이더 2D가 연결된 이펙터 2D에서 사용되길 원할 경우 이 상자를 선택해야 한다.
  • Offset: 콜라이더 2D 지오메트리의 로컬 오프셋이다.
  • Size: 로컬 공간 단위로 나타난 캡슐 크기를 설정한다.
  • Direction: 수직 또는 수평으로 설정한다. 이는 캡슐의 회전 방향을 제한하며, 특히 반원 엔드캡의 포지셔닝을 정의한다.

    x는 수평을, y는 수직을 의미한다.

Composite Collider 2D

    Composite Collider 2D 컴포넌트는 2D 물리 시스템과 상호 작용하는 콜라이더입니다. 대부분의 콜라이더와 달리, 복합 콜라이더 2D는 고유의 모양을 정의하지 않습니다. 대신, 사용자가 사용 설정하는 모든 박스 콜라이더 2D 또는 폴리곤 콜라이더 2D의 모양을 통합하여 사용합니다. 복합 콜라이더 2D는 이러한 콜라이더의 버텍스(지오메트리)를 사용하여, 복합 콜라이더 2D가 제어하는 새로운 지오메트리로 통합합니다.

    Box Collider 2D와 Polygon Collider 2D 컴포넌트는 Used By Composite 체크박스를 가지고 있습니다. 컴포넌트를 복합 콜라이더 2D에 연결하려면 이 체크박스를 선택합니다. 이러한 콜라이더는 복합 콜라이더 2D와 동일한 리지드바디 2D에 연결되어야 합니다. Used by Composite를 활성화할 경우, 다른 프로퍼티는 이제 연결된 복합 콜라이더 2D에 의해 제어되기 때문에 컴포넌트에서 사라집니다.

프로퍼티

  • Material: 콜라이더가 다른 콜라이더와 상호작용하는 방법을 결정하는 물리 머티리얼에 대한 레퍼런스이다.
  • Is Trigger이 옵션을 활성화하면 이 콜라이더는 이벤트를 트리거하는 데 사용되고 물리 엔진의 적용을 받지 않는다.
  • Used by Effector: 써클 콜라이더 2D가 연결된 이펙터 2D에서 사용되길 원할 경우 이 상자를 선택해야 한다.
  • Offset: 콜라이더 2D 지오메트리의 로컬 오프셋이다.
  • Geometry Type: 콜라이더를 합칠 때, 선택된 콜라이더의 버텍스는 두 가지의 지오메트리 타입 중 하나로 구성된다. 지오메트리 타입을 Outlines 또는 Polygons로 설정하려면 이 드롭다운을 사용한다.
    • Outlines: 에지 콜라이더 2D가 생성하는 것과 동일한 비어 있는 아웃라인으로 된 콜라이더 2D를 생성합니다.
    • Polygons: 폴리곤 콜라이더 2D가 생성하는 것과 동일한 솔리드 폴리곤으로 된 콜라이더 2D를 생성합니다.
  • Generation Type: 복합 콜라이더 2D가 변경되거나, 그것을 구성하고 있는 콜라이더 중 어느 하나라도 변경될 경우, 지오메트리가 생성되는 시기를 제어하는 메서드가 변경된다.
    • Synchronous: 복합 콜라이더 2D 또는 사용하고 있는 콜라이더 중 어느 하나라도 변경될 경우, Unity는 즉시 새로운 지오메트리를 생성한다.
    • Manual: 사용자가 요청할 경우에만 새로운 지오메트리가 생성된다. CompositeCollider2D.GenerateGeometry 스크립트 API를 호출하거나, 셀렉션 아래에 있는 Regenerate Geometry 버튼을 클릭하여 생성을 요청할 수 있다.
  • Vertex Distance: 구성되는 콜라이더에서 수집한 모든 버텍스들에 허용되는 최소 간격값을 설정한다. 이 한도보다 가까이 있는 버텍스는 제거됩니다. 버텍스 합성의 해상도를 효과적으로 조정한다.
  • Edge Radius: 버텍스가 원 모양이 되도록 에지 주변의 반지름을 조정한다. 이 경우 둥근 컨벡스 코너를 가지는 콜라이더 2D의 크기는 더 커지게 된다. 이 설정의 기본값은 0(반지름 없음) 이다. Geometry Type이 Outlines로 설정됐을 경우에만 해당한다.

Custom Collider 2D

 

프로퍼티

  • Density: 리지드바디 2D와 연관된 게임 오브젝트의 질량 계산을 바꾸려면 Density 값을 변경한다. 해당 값을 0으로 설정하면 관련 리지드바디 2D는 질량 중심 계산을 포함한 모든 질량 계산에 해당하는 콜라이더 2D를 무시한다.
  • Material: 콜라이더가 다른 콜라이더와 상호작용하는 방법을 결정하는 물리 머티리얼에 대한 레퍼런스이다.
  • Is Trigger이 옵션을 활성화하면 이 콜라이더는 이벤트를 트리거하는 데 사용되고 물리 엔진의 적용을 받지 않는다.
  • Used by Effector: 써클 콜라이더 2D가 연결된 이펙터 2D에서 사용되길 원할 경우 이 상자를 선택해야 한다.
  • Offset: 콜라이더 2D 지오메트리의 로컬 오프셋이다.
  • Custom Shape Count (Read Only): 콜라이더에서 사용 중인 PhysicsShape2D의 수를 나타낸다.
  • Custom Vertex Count (Read Only): 콜라이더에서 모든 PhysicsShape2D가 사용 중인 버텍스의 수를 나타낸다.

콜라이더 단축키(Edit Collider가 활성화된 경우)

   모든 콜라이더가 가지고 있는 "Edit Collider" 조작 방법은 아래와 같다.

  • 버텍스 또는 가장자리를 길게 누른 상태로 드래그: 선택한 버텍스나 가장자리를 다른 포지션으로 이동
  • 가장자리의 아무 위치나 클릭: 가장자리의 빈 공간을 클릭하여 새 버텍스를 생성
  • Ctrl(Windows) 키 또는 Command(macOS) 키를 누른 상태에서 버텍스나 가장자리를 선택: 선택한 버텍스 또는 가장자리를 삭제

주섬주섬

   이 블로그 페이지는 리지드바디 공부하기 이전 세팅에 대해 자세히 알아보는 페이지이다. 주요한 부분은 Bold체로 표시했다. 게임의 대부분에 장르에서 리지드바디와 콜라이더가 많이 사용되기에 한 번 정리하는 것을 추천한다.

    콜라이더는 리지드바디와 상관이 매우 깊다. 이전 블로그를 참고바란다. 추가적으로 함수의 디테일과 코드 예시는 MonoBehaviour 클래스의 스크립트 레퍼런스 페이지를 참조바란다.

 

리지드바디(Rigidbody)

서론 유니티(Unity)의 리지드바디(Rigidbody)는 게임 오브젝트를 물리 시뮬레이션에 참여시키기 위해 사용되는 컴포넌트이다. 리지드바디는 물리 엔진을 기반으로 작동하며, 오브젝트에 힘과 운동

jinger.tistory.com

참고

 

콜라이더 - Unity 매뉴얼

Collider 컴포넌트는 물리적 충돌을 위해 게임 오브젝트의 모양을 정의합니다. 보이지 않는 콜라이더는 게임 오브젝트의 메시와 완전히 똑같을 필요는 없습니다. 메시의 대략적인 근사치로도 효

docs.unity3d.com

 

MonoBehaviour - Unity 스크립팅 API

MonoBehaviour is the base class from which every Unity script derives.

docs.unity3d.com

 

3D 물리 레퍼런스 - Unity 매뉴얼

이 섹션에서는 3D 물리와 함께 사용되는 컴포넌트에 대한 세부 정보를 제공합니다. 동급의 2D 컴포넌트에 대한 자세한 내용은 2D 물리 레퍼런스를 참조하십시오.

docs.unity3d.com

 

2D 물리 레퍼런스 - Unity 매뉴얼

이 섹션에서는 2D 물리에 사용되는 컴포넌트를 자세히 살펴봅니다. 3D 컴포넌트에 대한 자세한 내용은 3D 물리 레퍼런스를 참조하십시오.

docs.unity3d.com

반응형

'Unity > 물리' 카테고리의 다른 글

리지드바디(Rigidbody)  (0) 2023.07.24

댓글