AddForce로 밀기
Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 63개 중 2번째.
오브젝트에 Rigidbody가 있으면 물리 시스템이 오브젝트를 움직이므로, 더 이상 위치를 변경하는 대신 밀어야 합니다. rb.AddForce(force)는 힘을 가해 본체를 밀며, 힘은 뉴턴 단위의 Vector3입니다. 힘은 속도를 설정하지 않습니다. 힘을 계속 가하는 동안 매초 힘을 질량으로 나눈 만큼 본체의 속도를 높입니다. 밀기를 멈춰도 본체는 현재 속도를 유지합니다.
이 호버크래프트(2 kg)에는 추진기가 있습니다. 위쪽 화살표를 누르고 있는 동안 thrust만큼의 힘이 +z 방향으로 앞으로 밀어 줍니다. 추력이 12라면 매초 12 / 2 = 6 m/s만큼 속도가 증가합니다.
public float thrust = 12f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
if (Input.GetKey(KeyCode.UpArrow))
{
rb.AddForce(Vector3.forward * thrust);
}
}힘은 FixedUpdate()에 적용합니다. Unity는 매 물리 단계가 시작되기 전에 초당 50회 이 함수를 호출합니다(그 이유는 4과에서 설명합니다). 이 줄에는 Time.deltaTime이 없습니다. AddForce는 이미 해당 단계에 걸쳐 힘을 적용하므로 Time.deltaTime을 곱하면 미는 힘이 50배 약해집니다. 지면에서는 마찰력이 반대 방향으로 작용하므로, 작은 힘으로는 무거운 상자가 전혀 움직이지 않을 수도 있습니다.
챌린지
쉬움아이스링크 위의 퍽에는 Rigidbody가 있고, 얼음에는 마찰이 없습니다. 화살표 키로 밀어 보세요. Horizontal 축은 x축을 따라, Vertical 축은 z축을 따라 퍽을 밀며, 힘의 크기는 push입니다(Inspector에서 4로 설정).
힘만 가해 퍽을 밀어 보세요. 손을 떼도 계속 미끄러집니다. Play를 누르고 아이스링크에서 퍽을 조종한 다음 Check를 누르세요.
직접 해보기
using UnityEngine;
public class PuckPusher : MonoBehaviour
{
public float push = 4f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
// 퍽을 밀기: Horizontal은 x축 방향, Vertical은 z축 방향
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.