PhysicsColliderComponent

물리 강체의 모양을 설정하고 다른 강체와 충돌 시 이벤트를 발생시킵니다. 자동으로 부모 또는 자신의 PhysicsRigidbodyComponent에 연결됩니다. 연결된 PhysicsRigidbodyComponent가 없으면 Static 강체로 취급됩니다.

# Properties

[{"index":"Vector2 BoxSize (Sync)","0":"Box Collider 크기를 설정합니다."}]

[{"index":"float CircleRadius (Sync)","0":"Circle Collider의 반지름 길이를 설정합니다."}]

[{"index":"boolean ClientOnly (ReadOnly)","0":"true일 경우 Client에서 물리 연산이 일어나며, Client 공간에서 함수 사용 및 Property 변경이 가능합니다. 물리 연산 결과가 다른 Clients와 동기화 되지 않습니다. false일 경우 Server 공간에서 함수 사용 및 Property 변경이 가능합니다. 물리 연산 결과가 다른 Clients와 동기화 됩니다."}]

[{"index":"Vector2 ColliderOffset (Sync)","0":"Collider의 오프셋을 설정합니다."}]

[{"index":"ColliderType ColliderType (Sync)","0":"Collider의 모양을 설정합니다."}]

[{"index":"CollisionGroup CollisionGroup (Sync)","0":"충돌 여부를 결정할 수 있는 충돌 그룹을 설정합니다."}]

[{"index":"float Density (Sync)","0":"연결된 PhysicsRigidbodyComponent의 UseDensity가 true일 경우 사용할 밀도 값을 설정합니다."}]

[{"index":"boolean EnableContactEvent (Sync)","0":"PhysicsContactBeginEvent와 PhysicsContactEndEvent 발생 여부를 설정합니다. false일 경우 두 Event가 발생하지 않습니다."}]

[{"index":"float Friction (Sync)","0":"마찰 계수를 설정합니다. 0 이상의 값만 설정할 수 있습니다. UseCustomPhysicalProperties의 값이 true일 경우 유효합니다."}]

[{"index":"boolean IsLegacy (ReadOnly)","0":"Legacy 시스템을 지원할지를 설정합니다. 이전 시스템은 ColliderOffset이 Entity의 SpriteRendererComponent에 영향을 줍니다. 이전 시스템은 더 이상 지원하지 않으며, 추후 삭제 예정입니다."}]

[{"index":"boolean IsSensor (Sync)","0":"true일 경우 물리적인 상호작용이 일어나지 않지만, 충돌 이벤트는 발생합니다."}]

[{"index":"SyncList PolygonPoints (Sync)","0":"다각형 충돌체를 이루는 점들의 위치입니다. ColliderType이 Polygon일 때 유효합니다."}]

[{"index":"float Restitution (Sync)","0":"충돌 후 튀어 오르는 정도를 설정합니다. 0 이상의 값만 설정할 수 있습니다. UseCustomPhysicalProperties가 true일 경우 유효합니다."}]

[{"index":"boolean UseCustomPhysicalProperties (Sync)","0":"Friction과 Restituion 값이 물리 강체에 적용됩니다. false일 경우 연결된 PhysicsRigidbodyComponent의 값을 사용합니다."}]

##### inherited from Component:

[{"index":"boolean Enable (Sync)","0":"컴포넌트 활성화 여부를 확인합니다."}]

[{"index":"boolean EnableInHierarchy (ReadOnly) (HideFromInspector)","0":"계층 구조상에서 이 컴포넌트가 Enable 상태인지를 반환합니다. Enable이 true일지라도 엔티티의 Enable이 false라면 false를 반환합니다."}]

[{"index":"Entity Entity (ReadOnly)","0":"이 컴포넌트를 소유한 엔티티입니다."}]

# Methods

[{"index":"PhysicsRigidbodyComponent GetAttachedPhysicsRigidbody()","0":"연결된 PhysicsRigidbodyComponent를 반환합니다."}]

[{"index":"void OnContactBegin(PhysicsContactBeginEvent beginEvent) (ScriptOverridable)","0":"두 물리 강체가 충돌을 시작할 때 호출됩니다."}]

[{"index":"void OnContactEnd(PhysicsContactEndEvent endEvent) (ScriptOverridable)","0":"두 물리 강체의 충돌이 끝날 때 호출됩니다."}]

##### inherited from Component:

[{"index":"boolean IsClient()","0":"현재 실행 환경이 클라이언트인지 아닌지의 여부를 반환합니다."}]

[{"index":"boolean IsServer()","0":"현재 실행 환경이 서버인지 아닌지의 여부를 반환합니다."}]

# Events

[{"index":"PhysicsContactBeginEvent","0":"두 물리 강체가 충돌을 시작할 때 발생하는 이벤트입니다."}]

[{"index":"PhysicsContactEndEvent","0":"두 물리 강체가 충돌이 끝날 때 발생하는 이벤트입니다."}]

# Examples

`P`를 눌렀을 때 CollisionGroup이 Monster로 변경되어 다른 Monster와 더이상 충돌하지 않게 만드는 예제입니다. `SleepingMode`를 `NeverSleep`으로 설정해야 합니다.
    
    
    @Component
    script EntityTransformer extends Component
        @ExecSpace("ServerOnly")
        method void OnBeginPlay()
        self.Entity.PhysicsRigidbodyComponent:Sleep()
        end
    
        @ExecSpace("ServerOnly")
        method void Change()
        self.Entity.SpriteRendererComponent.SpriteRUID = "000000"
        self.Entity.PhysicsColliderComponent.CollisionGroup = CollisionGroups.Monster
        end
    
        @EventSender("Service", "InputService")
        handler HandleKeyDownEvent(KeyDownEvent event)
        -- Parameters
        local key = event.key
        --------------------------------------------------------
        if key == KeyboardKey.P then
            self:Change()
        end
        end
    end
    

# SeeAlso

  * PhysicsRigidbodyComponent
  * SpriteRendererComponent
  * KeyboardKey
  * InputService
  * [다양한 물리 joint 활용하기](/docs?postId=760)
  * [물리 사용하기](/docs?postId=757)
  * [엔티티에 물리 적용하기 ](/docs?postId=761)