카테고리 없음

내일배움캠프: AddForce

pracumj 2024. 10. 17. 21:54

오늘 공부한 내용

내일배움캠프에서 수준별 꾸준 학습을 하던 중 Addforce를 사용해서 특정 기능을 구현하라는 문제가 나왔다. Addfoce자체는 기존에도 알고 사용도 해봤던 메서드였지만 막상 참고자료 없이 사용하려하다보니 Addforce 사용 방식에 대해서 잘 모르고 있다는 사실을 깨달았다. 이 때문에 Addforce 메서드 사용 방식을 정리해봤다.

 

AddForce 란? 

유니티의 Rigidbody에 힘을 가하는 메서드로, 물리적인 힘을 통해 오브젝트를 움직일 때 사용된다. 

 

AddForce 구성

Rigidbody(2D).AddForce(Vector3 force, ForceMode mode) ,

  • force: 가해질 힘의 크기와 방향을 나타내는 벡터값입니다. 예를 들어 (0, 10, 0)은 오브젝트가 Y축으로 힘을 받게 만든다.
  • mode: 힘을 가하는 방식을 설정하는 ForceMode 열거형 값, 기본값은 ForceMode.Force

ForceMode

  1. ForceMode.Force(기본모드)
    • 설명: 물체의 질량을 고려한 힘을 매 프레임마다 지속적으로 가합니다.
    • 사용 상황:
      • 지속적인 이동: 캐릭터가 걷거나 달릴 때, 물체가 지속적으로 이동하는 상황에서 사용된다. 예를 들어, 자동차가 일정한 속도로 전진하거나 바람이 일정한 방향으로 물체를 밀어내는 경우
      • 부드러운 힘의 전달: 물체에 부드럽고 자연스러운 움직임을 주고자 할 때 사용
    • 예시: 물체가 지속적으로 밀리거나 캐릭터가 방향키를 눌렀을 때 부드럽게 이동하는 경우.
     
  2. ForceMode.Acceleration
    • 설명: 질량을 무시하고, 가속도만 적용합니다. 즉, 가벼운 물체와 무거운 물체 모두 동일한 가속도로 움직인다.
    • 사용 상황:
      • 질량이 중요한 상황이 아닌 경우: 질량과 상관없이 일정한 가속도를 부여하고자 할 때 사용합니다. 예를 들어, 중력이나 중력과 유사한 힘을 구현해야하는 상황 
      • 균등한 가속도: 무거운 물체와 가벼운 물체가 동일한 가속도를 적용받아 움직여야 할 때 사용
    • 예시: 게임에서 무게에 상관없이 모든 물체가 일정한 가속도로 떨어지는 경우.
     
  3. ForceMode.Impulse
    • 설명: 순간적으로 강한 힘을 가하여 물체가 즉시 반응하게 합니다. 물체의 질량을 고려하여 힘을 즉시 적용한다.
    • 사용 상황:
      • 점프나 충돌: 캐릭터가 점프할 때, 물체가 충돌했을 때와 같은 상황에서 순간적으로 큰 힘을 가해 빠르게 반응할 때 사용
      • 폭발적인 움직임: 순간적으로 강한 힘을 가해 빠르게 움직여야 하는 상황에서 유용
    • 예시: 캐릭터가 점프하거나 물체가 충돌할 때 강한 반응을 요구하는 경우.
     
  4. ForceMode.VelocityChange
    • 설명: 물체의 질량을 무시하고, 속도의 변화만을 직접적으로 적용한다. 속도 그 자체를 조정하기 때문에 즉각적인 속도 변화가 일어난다.
    • 사용 상황:
      • 즉각적인 속도 변경: 물체의 질량과 관계없이 속도를 정확하게 제어해야 할 때 사용. 예를 들어, 물체의 현재 속도에 즉각적인 변화를 주어 회피 동작을 구현하거나 빠른 이동을 적용하는 상황.
      •  순간 이동: 캐릭터가 빠르게 회피하거나, 물체가 순간적으로 이동하는 게임 내 빠른 동작에 사용
    • 예시: 캐릭터가 재빠르게 회피하거나 순간 이동하는 경우.
     

ForceMode  요약

  • ForceMode.Force: 지속적인 힘을 주어 부드러운 움직임을 만들고 싶을 때 사용.
  • ForceMode.Acceleration: 질량을 무시하고 일정한 가속도를 적용하고 싶을 때 사용.
  • ForceMode.Impulse: 순간적인 힘을 가해 빠르게 반응하는 동작, 점프나 충돌 상황에서 사용.
  • ForceMode.VelocityChange: 물체의 질량에 관계없이 즉각적으로 속도 변화를 줄 때 사용, 빠른 회피나 순간 이동 같은 동작에서 활용.

마무리

AddForce를 통해 물리적인 힘을 적용하여 움직임을 제어할 수 있다.  상황에 따라 ForceMode를 고려해 적절한 방식으로 동작하게 할 수 있도록 해야겠다.