1. transform.Translate()
public float speed = 10f;
void Update(){
horizontalInput = Input.GetAxisRaw("Horizontal");
verticalInput = Input.GetAxisRaw("Vertical");
Vector3 move = new Vector3(horizontalInput, 0, verticalInput);
transform.Translate(move * speed * Time.deltaTime);
}
Translate는 물리엔진을 거치지 않고 로컬좌표를 기준으로 순간이동하는 것입니다.
물체와 충돌인식이 불완전하고, Update문에서 이루어져야합니다.
2. RigidBody.AddForce()
public float speed = 10f;
private Rigidbody playerRb;
// 권장하는 방법
void Update(){
horizontalInput = Input.GetAxisRaw("Horizontal");
verticalInput = Input.GetAxisRaw("Vertical");
Vector3 moveDirection = new Vector3(horizontalInput, 0, verticalInput).normalized;
playerRb.AddForce(moveDirection * speed, ForceMode.Impulse);
}
// 권장하지 않는 방법
void Update(){
horizontalInput = Input.GetAxisRaw("Horizontal");
verticalInput = Input.GetAxisRaw("Vertical");
playerRb.AddForce(Vector3.right * speed * horizontalInput, ForceMode.Impulse);
playerRb.AddForce(Vector3.forward * speed * verticalInput, ForceMode.Impulse);
}
AddForce는 지정한 방향으로 힘을 가해 이동하는 것으로, 무게, 마찰, 힘을 적절하게 결정해야합니다.
충돌을 완전하게 인식하며 FixedUpdate문에 작성해야합니다.
* 2D인경우 권장하지 않는 방법이나 Y축을 고정하지 않을 경우 충돌하여 Y축으로 이동이 생길 수 있으니, Y축까지 명시하는 것이 좋다.
3. Rigidbody.MovePosition
public float speed = 10f;
private Rigidbody playerRb;
void FixedUpdate(){
horizontalInput = Input.GetAxisRaw("Horizontal");
verticalInput = Input.GetAxisRaw("Vertical");
Vector3 moveDirection = new Vector3(horizontalInput, 0, verticalInput).normalized;
playerRb.MovePosition(playerRb.position + moveDirection * speed * Time.fixedDeltaTime);
}
MovePosition은 다음 물리 프레임에 이 위치로 이동한다는 것입니다.
충돌을 안정적으로 인식하며 FixedUpdate문에 작성해야합니다.
반응형
'Unity' 카테고리의 다른 글
| [Unity] Unity에서 AI 활용하기, MCP for Unity (0) | 2026.02.07 |
|---|---|
| [Unity] 버전 6.3 LTS 업데이트 (0) | 2026.02.05 |
| [게임 개발] 증강 테트리스 (0) | 2026.01.27 |
| [Unity] Unity learn Local multiplay (0) | 2026.01.26 |
| [Unity] Script 사용법 (0) | 2026.01.24 |
댓글