Area2D

  • 감지(detection)와 영향(influence) 기능 제공
  • Area2D에 오브젝트가 겹치고 들어오고, 나가는 때 signal 표현 가능
  • Area2D를 사용한 Scene에 정의된 중력이나 댐핑(damping) 같은 물리속성을 무시할 수 있다.(물리 속성을 재정의 가능)
  • 마우스 및 터치 스크린 입력도 가능

 

StaticBody2D

  • 고정된 Body.(주로 고정되거나 움직이는 Platform, 컨베이어 벨트, 벽 및 기타 장애물에 쓰임)
  • 충돌 감지는 하지만 충돌 이후의 물리적인 운동을 하지 않는다. 그러나 충돌한 Body에게는 이동이나 회전을 부여해 줄 수 있다.(관련 특성:constant_linear_velocity, constant_angular_velocity)

 

RigidBody2D

  • 다음과 같은 4가지 모드가 제공된다.
    1. Rigid - 기본모드. 외력에 의한 물리적인 반응(다른 Body와의 충돌이나 임의로 힘을 가한 경우)을 한다.
    2. Static - StaticBody2D와 같고 움직이지 않음.
    3. Character - Rigid와 비슷하지만, 회전은 할 수 없다.(아마 외력에 의한 회전이 안된다는 의미인 듯)
    4. Kinematic - KinematicBody2D처럼 물리적인 반응을 하며, 이동은 직접 코드를 작성해야 함.
  • position, linear_velocity 및 기타 다른 물리적 특성을 변경하면, 정상적으로 동작하지 않을 수 있다.(직접 제어를 하지 말아야 함)
  • 물리적인 특성을 변경해야 하는 경우가 생긴다면, _physics_process() 대신에 _integrate_forces()를 이용하면 된다.
  • RigidBody가 sleeping 상태가 되면 _integrate_forces() 함수는 호출되지 않는다.(can_sleep을 비활성화 시키거나, 충돌이 일어났을때만 호출함. 대신 이렇게 하면 성능 저하가 생길 수 있다고 매뉴얼에 써 있다.)
  • Scene 안에 RigidBody가 많으면 많을 수록 필요한 메모리가 늘어난다. 그래서 Godot에서는 contact_reported가 0으로 설정(추적 안함)되어 있다. 추적을 하려면 0대신 다른 값으로 설정한다.

 

KinematicBody2D

  • 다른 Body와 충돌만 감지. 중력이나 마찰 같은 물리 특성에 영향을 받지 않는다. 이부분은 직접 코드로 구현해야 한다.
  • move_and_collide()나 move_and_slide()를 이용해야지 직접 position을 건드리면 안된다.
  • 충돌이 감지되면 즉시 멈추므로, 충돌 후 반응은 직접 코드로 구현해야 한다.
  • move_and_collide()와 move_and_slide()는 _physics_process() 안에서 사용할 수 있고, move_and_slide() 함수에 벡터를 넣을 때, delta(Timestep)를 곱하지 않아야 한다.(move_and_slide()함수는 자동으로 Timestep를 적용해서 계산함)

 

<참고>
http://docs.godotengine.org/en/3.0/tutorials/physics/physics_introduction.html

+ Recent posts