본문 바로가기

유니티 3D기본(Roll A Ball)

10. 힘을 이용하여 물체 움직여보기 (velocity, addForce)

오브젝트를 힘을줘서 움직이려면 Rigidbody 컴포넌트가 필요합니다.

스크립트에서 Rigid 컴포넌트를 가져옵니다. 항상 변수는 선언 -> 초기화 -> 호출 과정을 거치는게 좋습니다.

public class MyBall : MonoBehaviour
{
    Rigidbody rigid; //선언

    void Start()
    {
        rigid = GetComponent<Rigidbody>(); //초기화
        //GetComponent는 자신의 T타입 컴포넌트를 가져온다. <>안에는 가져올 컴포넌트의 타입 적기
    }
    
    void FixedUpdate()
    {
        //호출 코드
    }
   
}

 

 

소스 코드

rigid는 보통 물리와 연관된 코드기 때문에 FixedUpdate에 적는게 권장됩니다.

오브젝트 무게가 무거우면(Mass), addForce를 쓰더라도 무게에 비해 힘이 부족해 오브젝트가 움직이지 않을 수 있습니다.

ForceMode : 힘을 주는 방식 (가속, 무게 반영)

 

public class MyBall : MonoBehaviour
{
    Rigidbody rigid;

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

    void FixedUpdate()
    {
        
        //1. 속력 바꾸기
        rigid.velocity = new Vector3(1, 0, 0) * 2;
        
        //2. 힘을 가하기
        if (Input.GetButtonDown("Jump")) {
            rigid.AddForce(Vector3.up * 10, ForceMode.Impulse); //ForceMode : 힘을 주는 방식 (가속, 무게 반영)
        }

        float x = Input.GetAxisRaw("Horizontal");
        float y = Input.GetAxisRaw("Vertical");
        Vector3 vec = new Vector3(x, 0, y);
        rigid.AddForce(vec, ForceMode.Impulse);
        
        //3. 회전력
        rigid.AddTorque(new Vector3(0, 1, 0) * 2);
    }

}

 

 

작동 결과

velocity (속력)

 

AddForce (힘을 가하기)

 

 

AddTorque (회전력)