이번 강좌는 힘을 이용하여 물체를 움직여 보는 강좌다.
그중에서도 특히 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)
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가 해당 방향으로 이동했다면, 이 방법은 해당 방향을 축으로 이동하기 때문에 주의해야 한다.
오브젝트를 움직이는 방법이 이렇게나 많은 줄 몰랐다.
약간씩 차이가 있으니 신경 써서 사용해야겠다.