속도
Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 71개 중 5번째.
rb.linearVelocity는 물체가 지금 움직이는 방식입니다. x, y, z 방향으로 초당 몇 미터인지 나타내는 Vector3입니다. 이 값을 읽으면 물체가 어느 방향으로 가고 있는지 알 수 있고, rb.linearVelocity.magnitude는 물체의 속력입니다. 이 값을 설정하면 가속 과정이나 질량의 영향 없이 움직임이 즉시 바뀝니다. 1 kg 상자와 50 kg 금고 모두 2 m/s로 설정하면 다음 물리 스텝부터 정확히 2 m/s로 움직입니다. 이후에도 중력, 마찰, 충격은 계속 물체에 작용합니다.
이 고카트는 정확히 cruise m/s로 앞으로 달립니다. 속도를 복사한 다음 z만 바꾸고 다시 대입하므로, 중력이 만든 y 값은 그대로 유지되고 카트는 경사로 끝에서 계속 떨어집니다:
void FixedUpdate()
{
Vector3 vel = rb.linearVelocity;
vel.z = cruise; // 정확히 cruise m/s의 속도로 전진
rb.linearVelocity = vel; // y는 중력으로 인해 생긴 값을 유지
}y도 0으로 설정하면 매 스텝마다 중력으로 얻은 속도를 없애게 되고, 카트는 떨어지는 대신 경사로 끝에서 아래로 미끄러져 내려갑니다. Unity 6 이전에는 이 속성의 이름이 velocity였습니다. 오래된 튜토리얼에는 여전히 rb.velocity라고 쓰여 있습니다. Unity 6에서는 컴파일되지만, velocity가 더 이상 사용되지 않으며 linearVelocity로 이름이 변경되었다는 경고가 표시됩니다. 같은 방식으로 drag는 linearDamping이 되었습니다. 새 이름을 사용하세요.
챌린지
쉬움로봇을 정확히 speed m/s로 움직이고, 가장자리에서 떨어지게 하세요.
FixedUpdate()에서float h = Input.GetAxisRaw("Horizontal");을 읽고,"Vertical"에서float v를 읽으세요.- 중력의 y 값을 유지하면서
rb.linearVelocity = new Vector3(h * speed, rb.linearVelocity.y, v * speed);로 설정하세요.
‘플레이’를 누르고 가장자리 밖으로 걸어가세요. 손을 떼면 로봇이 멈추고 떨어집니다. 그런 다음 ‘확인’을 누르세요.
직접 해보기
using UnityEngine;
public class RobotWalk : MonoBehaviour
{
public float speed = 3f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
// 방향키로 정확히 speed의 속도로 이동하되, 중력에 의한 y 값은 유지합니다
}
}
물리와 게임플레이의 모든 레슨
직접 연습해 보세요: Unity 플레이그라운드