Unity

[Unity] Rigidbody.velocity로 움직이기

TIM_0529 2021. 3. 25. 06:09
반응형

 

//Rigidbody.velocity로 움직이기
    void MoveOnRigidVelocity()
    {
        float h = Input.GetAxis("Mouse X") *rotatespeed;
        float v = Input.GetAxis("Vertical") * speed;

        Vector3 move = transform.forward*v;
        Vector3 rotate = new Vector3(0, h, 0);

        rigid.velocity = move;
        rigid.rotation *= Quaternion.Euler(rotate);

        if (Input.GetKeyDown(KeyCode.LeftShift))
            speed += accspeed;
        else if (Input.GetKeyUp(KeyCode.LeftShift))
            speed = accspeed;

Input.GetAxis를 사용하여 입력된 값을 float h에 저장해준다.

참고로 Input.GetAxis는 입력을 했냐 안했냐를 구분하는 bool 형태가 아니라.

-1부터 1까지 값을 받아오는 float형태이다. 키보드는 입력을 했거나 안 했거나 둘 중 하나이지만

콘솔은 미는 '정도'를 계산할 수 있도록 사이값을 받아올 수 있는 float으로 받아 온 것이다.

 

입력을 했다면 h= 1 * speed 값이 들어가고 rotate는 Vector3 형태로 이 값을 저장하였다가.

rigid.velocity에 값을 넣어준다.

 

마우스의 좌우 이동 값으로 회전을 구현해 보고 싶어서 Input.GetAxis("Mouse X")를 넣고 rotate를 

구현해 봤다. 좌우 키로 이동이 안 되는 게 불편했지만 이런 구현 방법도 있다는 것이 궁금해서 해보았다.

 

rigid.velocity는 rigid.addforce와 다르게 즉각적인 움직임이 가능하다.

addforce는 질량에 의한 움직임으로 관성이 작용한다.

velocity는 질량을 무시하고 직접적으로 속도를 변화하여 즉각적인 움직임이 가능하다.

 

반응형