임펄스로 점프하기
Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 63개 중 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: 한 번에 적용하며, 질량은 무시합니다. 벡터를 속도에 바로 더합니다.
챌린지
쉬움개구리가 점프하게 만드세요. Space를 누를 때마다 개구리에 jumpImpulse(Inspector에서 10)의 위쪽 충격이 한 번 가해집니다. 개구리의 무게는 2 kg이며, 점프할 때 질량을 고려해야 합니다. 더 무거운 개구리는 더 낮게 점프합니다.
Space를 계속 누르고 있어도 점프는 한 번만 합니다. Play를 눌러 점프한 다음 Check를 누르세요.
직접 해보기
using UnityEngine;
public class FrogJump : MonoBehaviour
{
public float jumpImpulse = 10f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
// Space: jumpImpulse만큼 위쪽으로 한 번 힘을 가함
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.