[Unity] 유니티의 물리 계산 AddForce?

gunggme·2023년 8월 27일

유니티(unity)

목록 보기
4/9

자 오늘은 Rigidbody, Rigidbody2D에 있는 AddForce에 대해 알아 볼 것이다..!

AddForce란?

AddForce그래서 뭔데요

먼저 AddForce는 말그대로 "힘을 추가하는 것" 으로 점프나, 대쉬를 만들때 많이 사용한다. 그렇다면 사용방법을 알아야 될텐데 먼저 물리 계산인 만큼 Rigidbody컴포넌트를 스크립트에서 받아와야 된다

using UnityEngine;

public class Exaple : MonoBehaviour
{
   private Rigidbody rigid;

   private void Awake()
   {
       rigid = GetComponent<Rigidbody>();
   }
}

이런식으로 먼저 컴포넌트를 가져와야된다.

??? : 귀찮은데 사용할대마다 컴포넌트 가져오면 안되나요?

만약 이런 생각이 든다면 밑에 있는 글을 보고오면 될것 같다.
https://velog.io/@gunggme/Unity-TryGetComponent-%EA%B7%B8%EA%B2%8C-%EB%AD%94%EB%8D%B0

컴포넌트를 가져왔다면 AddForce를 쓰기까지 거의 다다른 것이다. 이제 선언해놓은 rigid변수를 이용해 AddForce매소드를 사용하면 되는 것이다.

using UnityEngine;

public class Exaple : MonoBehaviour
{
    private Rigidbody rigid;

    private void Awake()
    {
    	// 컴포넌트를 가져와서
        rigid = GetComponent<Rigidbody>();
    }

    private void FixedUpdate()
    {
    	// AddForce를 쓴다
        rigid.AddForce(transform.up * 10);
    }
}

이런식으로 사용하면 밑의 영상처럼 실행이 된다.

transform.up을 사용해 올라가는 모습을 볼 수 있는데 이유는 transform자체가 Vector3형식이기도 하고 up을 사용함으로서 Vector3.up과 같은 Vector값을 사용해 X : 0, Y : 1, Z : 0을 줘 Y값을 올려주고 있는 모습이다.
이제 AddForce에 넣을 수 있는 값을 알 수 있는데 공식문서에 가면

파라미터설명
X벡터 X값을 넣는다
Y벡터 Y값을 넣는다
Z벡터 Z값을 넣는다
mode힘을 넣는 방식을 넣을 수 있다.

이런식으로 적혀있는데 우리는 XYZ값은 벡터로 넣는다는걸 알 수 는 있지만 mode 가 뭔지는 모를 것이다. 하지만 여기서 mode라는 단어의 뜻을 알 수 있듯이 AddForce매소드에서 한가지 방식만이 아닌 여러가지 방식으로 넣을 수 있다는 것을 알 수 있다.

AddForce의 모드?

먼저 기본적으로 mode를 넣지 않고 실행을 하면 ForceMode.Force라는 것이 들어간다.
Force는 질량을 사용해, 연속적인 힘을 가하는 경우 사용하는 친구인데, 예시로는 자동차나, 우주선 같은 것을 만들때 사용한다고 보면 될것 같다.

ForceMode.Impulse란 질량을 사용해, 순간적으로 힘을 넣을 때 사용하는 친구이다, 만약 점프를 만들게 된다면 이 Impulse를 많이 사용하게 될 것이다.

ForceMode.Acceleration는 Force와 비슷하지만 질량을 사용하지 않는 것으로 지구의 중력 표면에 쓰인다고 한다.

ForceMode.VelocityChange는 Impulse와 비슷한데 질량을 사용하지 않고 순간적으로 힘을 넣을때 사용한다고 보면 된다.

이런식으로 ForceMode를 활용해 AddForce를 다양하게 사용이 되는데 만약 점프를 만들고 싶다면? Impulse를 사용해 구현하면 될것 같다.

profile
안녕하세요!

0개의 댓글