기본 패턴
csharp
private void FixedUpdate()
{
body.MovePosition(body.position + moveDirection * moveSpeed * Time.fixedDeltaTime);
}설명
Rigidbody가 붙은 오브젝트를 물리적으로 움직일 때는Transform보다RigidbodyAPI를 우선 고려합니다.- 입력은 보통
Update에서 읽고, 실제 물리 이동은FixedUpdate에서 적용하는 흐름이 안정적입니다. MovePosition은 충돌 시스템과 더 잘 어울리고, 순간이동은position직접 설정과 성격이 다릅니다.- 점프나 반동처럼 힘 기반 표현이 필요하면
AddForce도 함께 이해해야 합니다.
짧은 예제
csharp
[SerializeField] private float moveSpeed = 5f;
private Rigidbody body;
private Vector3 moveDirection;
private void Awake() => body = GetComponent<Rigidbody>();
private void Update()
{
moveDirection = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")).normalized;
}
private void FixedUpdate()
{
body.MovePosition(body.position + moveDirection * moveSpeed * Time.fixedDeltaTime);
}빠른 정리
| 항목 | 설명 |
|---|---|
Rigidbody | 물리 계산 대상 컴포넌트 |
MovePosition | 물리 친화적 위치 이동 |
FixedUpdate | 일정 간격 물리 처리 |
| 입력 분리 | 입력은 Update, 이동은 FixedUpdate |
AddForce | 힘 기반 운동 표현 |
주의할 점
Rigidbody를 붙여 놓고 transform.position만 계속 바꾸면 충돌과 물리 결과가 부자연스러워질 수 있습니다. 오브젝트를 "물리로 움직일지, 직접 배치할지"를 먼저 정해야 합니다.
참고 링크
2 sources