유니티에서는 충돌 감지와 처리를 위해 물리 엔진을 사용합니다.
transform.position을 직접 수정하면 물리 엔진을 우회해서 움직이게 됩니다. 이 경우, 충돌이 제대로 처리되지 않을 수 있습니다.
게임 오브젝트를 물리 엔진을 통해 움직이려면 Rigidbody 컴포넌트의 메서드를 사용해야 합니다.
Rigidbody의 velocity 속성을 수정하거나 AddForce 함수를 호출하는 것과 같은 방법이 있습니다.
아래는 Player 스크립트에 Rigidbody를 이용하여 이동하는 코드 예제입니다.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { public float speed; float hAxis; float vAxis; bool wDown; Vector3 moveVec; Animator anim; // Rigidbody 컴포넌트 추가 Rigidbody rb; void Awake() { anim = GetComponentInChildren<Animator>(); // Rigidbody 컴포넌트를 얻습니다. rb = GetComponent<Rigidbody>(); } void Update() { hAxis = Input.GetAxisRaw("Horizontal"); vAxis = Input.GetAxisRaw("Vertical"); wDown = Input.GetButton("Walk"); moveVec = new Vector3(hAxis, 0, vAxis).normalized; // 이동을 처리합니다. rb.velocity = moveVec * speed; anim.SetBool("isRun", moveVec != Vector3.zero); anim.SetBool("isWalk", wDown); } }
유니티에서는 충돌 감지와 처리를 위해 물리 엔진을 사용합니다.
transform.position을 직접 수정하면 물리 엔진을 우회해서 움직이게 됩니다. 이 경우, 충돌이 제대로 처리되지 않을 수 있습니다.
게임 오브젝트를 물리 엔진을 통해 움직이려면 Rigidbody 컴포넌트의 메서드를 사용해야 합니다.
Rigidbody의 velocity 속성을 수정하거나 AddForce 함수를 호출하는 것과 같은 방법이 있습니다.
아래는 Player 스크립트에 Rigidbody를 이용하여 이동하는 코드 예제입니다.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { public float speed; float hAxis; float vAxis; bool wDown; Vector3 moveVec; Animator anim; // Rigidbody 컴포넌트 추가 Rigidbody rb; void Awake() { anim = GetComponentInChildren<Animator>(); // Rigidbody 컴포넌트를 얻습니다. rb = GetComponent<Rigidbody>(); } void Update() { hAxis = Input.GetAxisRaw("Horizontal"); vAxis = Input.GetAxisRaw("Vertical"); wDown = Input.GetButton("Walk"); moveVec = new Vector3(hAxis, 0, vAxis).normalized; // 이동을 처리합니다. rb.velocity = moveVec * speed; anim.SetBool("isRun", moveVec != Vector3.zero); anim.SetBool("isWalk", wDown); } }