임펄스로 점프하기
Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 71개 중 3번째.
AddForce는 두 번째 인수인 ForceMode를 받으며, 이 인수는 벡터를 어떻게 사용할지 지정합니다. 이 인수를 생략하면 한 번의 물리 스텝 동안 지속되는 밀어내기인 ForceMode.Force가 사용되므로, 매 스텝마다 추가해야 합니다. 발차기, 점프, 폭발은 한순간에 일어나며, 이것이 ForceMode.Impulse입니다. 즉, 한 번에 전체 힘을 가해 충격량을 질량으로 나눈 만큼 속도를 바꿉니다.
이 축구공(0.5 kg)은 클릭할 때 차입니다. 다음 물리 스텝에서 속도가 (0, 2, 6) / 0.5 = (0, 4, 12) m/s만큼 증가하고, 그다음부터는 중력과 잔디가 영향을 미칩니다:
void Update()
{
if (Input.GetMouseButtonDown(0))
{
rb.AddForce(new Vector3(0, 2, 6), ForceMode.Impulse);
}
}한 번만 가하는 힘은 클릭한 프레임에 Update()에서 호출할 수 있습니다. Unity는 이를 유지했다가 다음 물리 스텝에서 적용합니다. 네 가지 모드는 두 가지 면에서 서로 다릅니다. 한 번에 가하는지 한 스텝 동안 가하는지, 그리고 질량을 고려하는지 여부입니다:
Force: 한 스텝 동안 가하며, 질량으로 나눕니다(엔진, 바람).Acceleration: 한 스텝 동안 가하며, 질량을 무시합니다.Impulse: 한 번에 가하며, 질량으로 나눕니다(발차기, 점프).VelocityChange: 한 번에 가하며, 질량을 무시합니다. 벡터를 속도에 바로 더합니다.
챌린지
쉬움스페이스바를 누를 때마다 개구리가 한 번 점프하도록 하세요.
- 주석 아래에
if (Input.GetKeyDown(KeyCode.Space))를 작성하세요. - 그 안에서
rb.AddForce(Vector3.up * jumpImpulse, ForceMode.Impulse);를 호출하여 개구리의 무게가 2 kg이 되도록 하세요.
‘플레이’를 누른 다음 스페이스바를 누르세요. 개구리가 위로 뛰어오른 뒤 다시 떨어집니다. 그런 다음 ‘확인’을 누르세요.
직접 해보기
using UnityEngine;
public class FrogJump : MonoBehaviour
{
public float jumpImpulse = 10f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
// Space: jumpImpulse만큼 위쪽으로 한 번 밀어 올리기
}
}
물리와 게임플레이의 모든 레슨
직접 연습해 보세요: Unity 플레이그라운드