유니티로 3D 게임을 개발하다가 만나게된 황당한 일입니다. 일반적인 FPS 게임처럼 케릭터를 움직이는 것을 구현해 보았는데, 키보드의 Up/Down으로 케릭터를 앞뒤로 움직이고 Left / Right 키로 케릭터를 회전시키는 메소드를 구현했습니다.


구현된 소스코드입니다. 아주 기본 코드죠.

그런데, 문제가 발생했네요. 케릭터의 회전하는 키를 몇번 눌렀다가 떼니까 계속 돌아가는것 아니겠어요.


    private void MoveByPad()

    {

        float h = CnInputManager.GetAxisRaw("Horizontal");

        float v = CnInputManager.GetAxisRaw("Vertical");


        if (v > 0)

            transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);

        else if (v < 0)

            transform.Translate(-Vector3.forward * moveSpeed * Time.deltaTime);

        if (h < 0)

            transform.Rotate(Vector3.up, -turnSpeed * Time.deltaTime);

        else if (h > 0)

            transform.Rotate(Vector3.up, turnSpeed * Time.deltaTime);

    }




아니 이런, 그래서 이런 문제를 해결해 주기 위해서 키를 누르지 않았을 경우에는 강제로 회전속도를 0으로 만들어 줬더니만, 문제가 간단하게 해결되었네요. (빨갛게 표시된 코드를 추가로 삽입했습니다)


    private void MoveByPad()

    {

        float h = CnInputManager.GetAxisRaw("Horizontal");

        float v = CnInputManager.GetAxisRaw("Vertical");


        if (v > 0)

            transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);

        else if (v < 0)

            transform.Translate(-Vector3.forward * moveSpeed * Time.deltaTime);

        if (h < 0)

            transform.Rotate(Vector3.up, -turnSpeed * Time.deltaTime);

        else if (h > 0)

            transform.Rotate(Vector3.up, turnSpeed * Time.deltaTime);

        else

        {

            rb.angularVelocity = new Vector3(0, 0, 0);

        }

    }


단 이 방법은 플레이어가 다른 어떤 외부 변수에 의해서 회전이 필요없을 경우에만 사용할 수 있다는것 기억해주세요.

이상 유니티 초보가 개발하면서 겪은 일과 나름의 해결 방법이었습니다.