Menu
CoddyTech

AddForce로 밀기

Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 71개 중 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배 약해집니다. 지면에서는 마찰력이 반대 방향으로 작용하므로, 작은 힘으로는 무거운 상자가 전혀 움직이지 않을 수도 있습니다.

challenge icon

챌린지

쉬움

마찰이 없는 링크에서 힘을 사용해 퍽을 밀어 움직이세요.

  1. FixedUpdate()에서 float h = Input.GetAxis("Horizontal");와 float v = Input.GetAxis("Vertical");을 읽으세요.
  2. Time.deltaTime 없이 rb.AddForce(new Vector3(h, 0, v) * push);를 호출하세요.

‘플레이’를 누르고 밀었다가 놓으세요. 퍽은 계속 미끄러집니다. 그런 다음 ‘확인’을 누르세요.

직접 해보기

using UnityEngine;

public class PuckPusher : MonoBehaviour
{
    public float push = 4f;
    private Rigidbody rb;

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

    void FixedUpdate()
    {
        // 퍽 밀기: Horizontal은 x축 방향, Vertical은 z축 방향
    }
}

물리와 게임플레이의 모든 레슨

직접 연습해 보세요: Unity 플레이그라운드