Game Development, 게임개발/개발

AddForce에 대한 모든 것(+RelativeForce) [Unity]

게임이 더 좋아 2021. 3. 14. 21:55
반응형
728x170

 

Rigidbody에서 엄청 많이 쓰이는 AddForce를 알아보자

 


 

어떠한 form을 가지고 있냐?

2가지 형태가 있다. 하지만 비슷한 메커니즘을 가진다.

 

  • public void AddForce(Vector3 force, ForceMode mode = ForceMode.Force);

  • public void AddForce(float x, float y, float z, ForceMode mode = ForceMode.Force);

 

쉽게 말하면  AddForce(방향*힘 값, 힘의 종류) 라고 보면 된다.

 

 

 

무엇을 하는 메서드냐?

말 그대로 AddForce다. Rigidbody에게 힘을 전달해준다.

(하지만 모든 Rigidbody가 아닌 Active 상태일 때만 전달된다.)

**이러한 Force calculation은 FixedUpdate() 때 이루어진다. (이미 설명했다)

 

 

예를 들어서 어떻게 쓰냐?

using UnityEngine; // 이것을 쓰지 못하면 Rigidbody에 접근이 불가능함.

public class ExampleClass : MonoBehaviour
{
    public float thrust = 1.0f; //미는 힘
    public Rigidbody rb; // 해당 리지드바디

    void Start()
    {
        rb = GetComponent<Rigidbody>(); // 이 스크립트를 refer하는 오브젝트에서 리지드바디를 가져옴
    }

    void FixedUpdate()
    {
        rb.AddForce(transform.forward * thrust); //해당 방향으로 업데이트될 때마다 힘을 줌.
        // ForceMode를 안 써도 default 값으로 진행됨
    }
}

 


 

엥 ForceMode는 뭐지??

 

어떤 식으로 힘을 전달할 것인가를 결정하는 것이다.

4가지가 있다. 

Acceleration, Force, Impulse, and VelocityChange.

 

하는 역할은 각각 뭔데??

 

저것들의 차이는 질량을 무시하느냐? 또는 연속적인 힘이냐? 에 따라 달라진다.

Force는 연속 + 질량 무시 X

-> 현실적인 물리현상을 나타낼 때 많이 씀

 

Accel은 연속 + 질량 무시 O

->질량에 관계 없이 가속된다. 즉, 오브젝트의 질량에 관계없이 가속을 주고싶다면 이용한다.

 

Impulse는 불연속 + 질량 무시 X

-> 짧은 순간의 힘, 충돌이나 폭발과 같은 것에 많이 쓰인다.

 

Velocity Change 불연속 + 질량 무시 O

-> 마찬가지로 질량에 관계 없이 속도를 바꾼다. 질량이 다른 함대 같은 경우 같은 힘을 줘서는

같은 속도로 움직일 수 없는데 이 모드를 사용하면 가능하다.

 


그리고 중요한 것이 또 하나 있다.

 

AddRelativeForce라는 것이 있다.

원형을 보자면 아래와 같이 생겼다.

 

  • public void AddRelativeForce(Vector3 force, ForceMode mode = ForceMode.Force)

 

하지만 우리는 힘을 Global Coordinate에서만 주었다. (0,1,0)이든 뭐든 간에..

그렇게 해도 되는 경우가 있는 반면 그러기 싫을 때가 있다.

 

차 같은 경우 나는 분명 좌회전을 했는데...? Global 로 설정하다 보니 

좌회전하기 전에는 W가 분명 전진이었는데 이제는 우로 이동이 되었다.

사실 이건 극단적인 경우지만 분명 일어날 수 있는 경우다.

 

 

그래서 이것을 해결하기위해서 AddRelativeForce가 있는 것이다.

 

바로 역할은!

Adds a force to the rigidbody relative to its coordinate system.

RigidBody가 새로운 좌표계가 되어서 반영되는 것이다.

즉, 처음에 RigidBody가 북쪽을 바라보고 있으면 돌든 뒤집든 무엇을 하든 RigidBody가 바라보고 있는 방향이 북쪽이 되는 것이다.

실제로 북쪽이든 아니든 바로 그것이 Local이고 우리가 편하게 프로그램을 짤 수 있게 도와준다.

 

 

 

 


아래의 링크를 통해 자세히 보자

docs.unity3d.com/ScriptReference/Rigidbody.AddRelativeForce.html

docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html

 

 

반응형
그리드형