Unity - 힘을 이용하여 물체 움직여보기

TXMAY·2023년 7월 15일
1

Unity 튜토리얼

목록 보기
9/33
post-thumbnail

이번 강좌는 힘을 이용하여 물체를 움직여 보는 강좌다.
그중에서도 특히 RigidBody 컴포넌트에 집중된 강좌다.
RigidBody를 사용한 이동은 Transform보다 자연스럽우므로 많이 사용한다.


컴포넌트 가져오기

우선 스크립트 파일을 하나 생성한 후 다음과 같이 코드를 작성한다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    Rigidbody rigid;

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

    }
}

GetComponent<T>() : 자신의 T타입 컴포넌트를 가져옴
Rigidbody 변수 'rigid'를 선언한 후, Getcomponent<Rigidbody>()를 사용하여 컴포넌트를 가져온다.

속도를 설정해서 움직이기

다음은 오브젝트에 속도를 설정해 보겠다.

rigid.velocity = 속도(Vector3.right/new Vector3(x, y, z) ... )

velocity : 현재 이동 속도

위 코드를 추가하게 되면 오브젝트가 해당 방향으로 움직이는 것을 확인할 수 있다.
추가하는 위치에 따라서도 결과가 달라지는데, Start에 추가할 경우 시작할 때만 해당 방향으로 움직인 후 물리 영향을 받아 움직이고(저번 강좌에서 추가했기에), Update/FixedUpdate에 추가할 경우 해당 방향으로 계속해서 움직인다.
다만 이러한 RigidBody 관련 코드는 안정성을 위해 반복 실행을 할 경우 FixedUpdate에 작성해야 한다.

힘을 가해서 움직이기

위에서 오브젝트에 속도를 설정해서 움직였다면, 오브젝트에 힘을 가해서 움직여 보겠다.

rigid.AddForce(Vector3.up * 5, ForceMode.Impulse)
  • AddForce(Vec, ForceMode) : Vec의 방향과 크기로 힘을 줌
    • ForceMode : 힘을 주는 방식(가속, 무게 반영)
      • Force : 연속적 + 질량 무시 X
      • Accel : 연속적 + 질량 무시 O
      • Impulse : 비연속적 + 질량 무시 X
      • Velocity Change : 비연속적 + 질량 무시 O

ForceMode와 오브젝트의 Mass 값에 따라 결과가 달라질 수도 있다. (값이 클수록 움직이는데 더 많은 힘이 필요하다)
반복 실행을 할 경우 velocity에 값을 대입하여 실행한 것과 같은 결과가 나오는데, AddForce의 힘 방향으로 계속 velocity가 증가하기 때문이다.

버튼 입력으로 움직이기

이번에는 버튼 입력으로 오브젝트를 움직여 보겠다.

Vector3 vec = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical")
rigid.AddForce(vec, ForceMode.Impulse)

방향키를 누르면 해당 방향으로 굴러간다.

회전력을 주어 움직이기

마지막은 회전력을 줘서 오브젝트를 움직여 보겠다.

rigid.AddTorque(Vector3.up)

AddTorque(Vec) : Vec 방향을 축으로 회전력이 생김
다른 방법들의 경우 Vec가 해당 방향으로 이동했다면, 이 방법은 해당 방향을 축으로 이동하기 때문에 주의해야 한다.


오브젝트를 움직이는 방법이 이렇게나 많은 줄 몰랐다.
약간씩 차이가 있으니 신경 써서 사용해야겠다.

profile
게임 개발 공부하는 고양이

0개의 댓글