PhysicsRigidbodyComponent

엔티티가 물리 엔진에 의해 제어됩니다. 물리 연산에 영향을 주는 값을 설정할 수 있습니다.

# Properties

[{"index":"float AngularDamping (Sync)","0":"각속도의 변화에 대한 저항 계수를 설정합니다. 값이 클수록 각속도 변화에 더 많은 힘이 필요합니다. 0 이상의 값만 설정할 수 있습니다."}]

[{"index":"BodyType BodyType (Sync)","0":"강체 타입을 설정합니다."}]

[{"index":"PhysicsCollisionDetectionMode CollisionDetectionMode (Sync)","0":"물리 충돌의 감지 방식을 설정합니다."}]

[{"index":"boolean FixedRotation (Sync)","0":"true일 경우 물체가 물리 상호작용에 의한 회전을 하지 않습니다."}]

[{"index":"float Friction (Sync)","0":"마찰 계수를 설정합니다. 값이 작을수록 잘 미끄러집니다. 0 이상의 값만 설정할 수 있습니다."}]

[{"index":"float GravityScale (Sync)","0":"중력에 영향을 받는 정도를 설정합니다. 값이 0일 경우 중력에 영향을 받지 않고, 1일 경우 중력 그대로 영향을 받습니다. 값이 커질수록 중력에 영향을 더 많이 받습니다."}]

[{"index":"float LinearDamping (Sync)","0":"선형속도의 변화에 대한 저항 계수를 설정합니다. 값이 클수록 선형속도 변화에 더 많은 힘이 필요합니다."}]

[{"index":"float Mass (Sync)","0":"질량 값을 설정합니다. Collider의 넓이와 질량의 값을 이용해 밀도 값을 계산합니다"}]

[{"index":"float Restitution (Sync)","0":"충돌 후 튀어 오르는 정도를 결정합니다. 0은 완전 비탄성 충돌, 1은 완전 탄성 충돌에 가깝습니다."}]

[{"index":"PhysicsSleepingMode SleepingMode (Sync)","0":"충돌의 수면 상태를 설정합니다."}]

[{"index":"boolean UseDensity (Sync)","0":"true일 경우 mass의 값 대신 PhysicsColliderComponent의 Density와 Collider 값을 이용해 Mass 값을 계산합니다.하나의 PhysicsRigidbodyComponent에 여러 개의 PhysicsColliderComponent가 붙으면 각 PhysicsColliderComponent의 Density와 Collider 크기를 곱한 값을 Mass 값으로 사용합니다."}]

##### 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":"void ApplyAngularImpulse(float impulse)","0":"강체에 반시계 방향으로(CCW) 각 충격량을 적용합니다."}]

[{"index":"void ApplyForce(Vector2 force)","0":"강체의 무게 중심에 특정 방향으로 힘을 가합니다."}]

[{"index":"void ApplyForce(Vector2 force, Vector2 worldPoint)","0":"강체에 월드 상 특정 위치에서 특정 방향으로 힘을 가합니다."}]

[{"index":"void ApplyLinearImpulse(Vector2 impulse)","0":"강체의 무게 중심에 특정 방향으로 선형 충격량을 가합니다."}]

[{"index":"void ApplyLinearImpulse(Vector2 impulse, Vector2 worldPoint)","0":"강체에 월드 상 특정 위치에서 특정 방향으로 선형 충격량을 가합니다."}]

[{"index":"void ApplyTorque(float force)","0":"강체에 반시계 방향으로(CCW) 회전력을 가합니다."}]

[{"index":"void ClearPhysicsOwnership() (Server)","0":"물리 소유권을 자동으로 부여합니다. Contact Event는 Server에서만 발생합니다."}]

[{"index":"float GetAngularVelocity()","0":"강체의 각속도를 반환합니다."}]

[{"index":"float GetDensity()","0":"강체의 밀도를 반환합니다."}]

[{"index":"Vector2 GetLinearVelocity()","0":"강체의 선형속도를 반환합니다."}]

[{"index":"Vector2 GetLinearVelocityAtPoint(Vector2 worldPoint)","0":"월드 상 특정 위치에서의 강체 선형속도를 반환합니다."}]

[{"index":"Vector2 GetPosition()","0":"강체의 위치를 반환합니다."}]

[{"index":"float GetRotation()","0":"강체의 회전각을 반환합니다."}]

[{"index":"void SetAngularVelocity(float velocity)","0":"강체의 각속도를 설정합니다."}]

[{"index":"void SetClientAsPhysicsOwner(string userId) (ServerOnly)","0":"물리 소유권을 특정 유저에게 부여합니다. 해당 Client, Server에서 Contact Event가 발생합니다."}]

[{"index":"void SetLinearVelocity(Vector2 velocity)","0":"강체 선형속도를 설정합니다. 질량에 영향을 받지 않습니다."}]

[{"index":"void SetLinearVelocityX(float velocityX)","0":"강체의 선형속도 X값을 설정합니다. 질량에 영향을 받지 않습니다."}]

[{"index":"void SetLinearVelocityY(float velocityY)","0":"강체의 선형속도 Y값을 설정합니다. 질량에 영향을 받지 않습니다."}]

[{"index":"void SetPosition(Vector2 position)","0":"강체의 위치를 설정합니다."}]

[{"index":"void SetRotation(float angle)","0":"강체의 회전각을 설정합니다."}]

[{"index":"void SetServerAsPhysicsOwner() (Server)","0":"물리 소유권을 서버에게 부여합니다. Server에서 Contact Event가 발생합니다."}]

[{"index":"void Sleep()","0":"강체를 수면 상태로 전환합니다."}]

[{"index":"void Wake()","0":"강체를 깨어 있는 상태로 전환합니다."}]

##### inherited from Component:

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

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

# Examples

#### ApplyLinearImpulse
    
    
    @Component
    script ContactBouncer extends Component
        @EventSender("Self")
        handler HandlePhysicsContactBeginEvent(PhysicsContactBeginEvent event)
        --------------- Native Event Sender Info ----------------
        -- Sender: PhysicsColliderComponent
        -- Space: Server, Client
        ---------------------------------------------------------
    
        -- Parameters
        local ContactedBodyEntity = event.ContactedBodyEntity
        ---------------------------------------------------------
        ContactedBodyEntity.PhysicsRigidbodyComponent:ApplyLinearImpulse(Vector2(0, 5))
        end
    end
    

#### GravityScale
    
    
    @Component
    script CollisionGravityModifier extends Component
        @EventSender("Self")
        handler HandlePhysicsContactBeginEvent(PhysicsContactBeginEvent event)
        --------------- Native Event Sender Info ----------------
        -- Sender: PhysicsColliderComponent
        -- Space: Server, Client
        ---------------------------------------------------------
    
        -- Parameters
        local ContactedBodyEntity = event.ContactedBodyEntity
        ---------------------------------------------------------
        ContactedBodyEntity.PhysicsRigidbodyComponent.GravityScale = 0.2
        end
    end
    

# SeeAlso

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