@@@ UNITY/이론

[UNITY] 다양한 이동 방법 (2) - Rigidbody 활용한 이동

HTG 2023. 1. 20. 17:54
728x90

이전에 작성한 이동 방법들은 전체적으로 position 을 강제로 이동시키는 류의 이동 방식

이 때문에 벽을 뚫는 버그들이 발생한다.

 

이를 해결하기 위해 rigidbody(물리적 속성)를 활용한 이동을 해보고자 한다.

 

 

1. Rigidbody.AddForce(이동방향 및 힘)

  • 오브젝트에 힘주 추가하여주는 function
    즉, 오브젝트에 일정한 힘을 주어 이동시키는 것
  • 먼저 Rigidbody 속성 중 AddForce라는 function 사용
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class RigidbodyMove : MonoBehaviour
{
    Rigidbody rb;
    float power = 30f;
 
    void Start()
    {
        rb = gameObject.GetComponent<Rigidbody>();
    }
 
    void Update()
    {
    	Vector3 moveDir = new Vector3(0, 1.0f, 0);
        rb.AddForce(moveDir * power);
    }
}

 


2. rigidbody.velocity

  • GetAxis 메서드를 이용한 Velocity 수정
  • Rigidbody의 AddForce는 가해지는 힘을 누적시켜 속도를 증가시킴.
    그러다 보니 관성의 영향을 받게 됨.
  • 그래서 Rigidbody에는 Velocity라는 속도를 나타내 주는 변수가 있다. 이 변수를 수정해 주면 질량과 관성들을 무시하고 입력받은 속도로 방향 전환이 가능하다. Velocity는 Vector3의 값으로 표현이 된다. 여기서 바로 피타고라스 정의에 의해 나오는 방향이 가고자 하는 방향이 되고, 여기서 발생되는 직석의 길이가 가고자하는 속도가 된다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class RigidbodyMove : MonoBehaviour
{
    Rigidbody rb;
    float speed = 10f;
 
    void Start()
    {
        rb = gameObject.GetComponent<Rigidbody>();
    }
 
    void Update()
    {
        float xMove = Input.GetAxis("Horizontal");
        float zMove = Input.GetAxis("Vertical");
 
        Vector3 getVel = new Vector3(xMove, 0, zMove) * speed;
        rb.velocity = getVel;
    }
}

'@@@ UNITY > 이론' 카테고리의 다른 글

[UNITY] 다양한 이동 방법 (1)  (0) 2023.01.20
[UNITY] OnCollision & OnTrigger  (0) 2023.01.20
[UNITY] 오브젝트 상호작용  (0) 2023.01.19
[UNITY] 벽 뚫기 방지  (0) 2023.01.19
[UNITY] 문 열고 닫기  (0) 2023.01.17