본문 바로가기

유니티 3D기본(Roll A Ball)

6. 키 입력과 오브젝트 이동

사용자의 키 입력을 받아 오브젝트에 다양한 명령을 줄 수 있습니다.

 

사용자의 키 입력을 받는 방법은 몇가지가 있습니다. 각각 3개의 방법으로 나눠지는데,

✅ Down은 버튼이 눌렸을 때 실행되며

✅ Up은 버튼이 눌렸을 때 실행되고,

✅ up도 down도 아닌 디폴트(예 : GetKey)은 버튼이 눌리고 있을 때 계속 실행됩니다.

 

1. 아무키나 입력받음

anyKey / anyKeyDown

    void Update()
    {   
        // anyKey는 메서드가 아니기 때문에 인자가 없다.
        if (Input.anyKey) {
            Debug.Log("키를 누르고 있는 중...");
        }

        if (Input.anyKeyDown)
        {
            Debug.Log("키 Down");
        }

    }

 

2. 키보드 입력받음

GetKey / GetKeyDown / GetKeyUp

    void Update()
    {
        // GetKey는 인자로 KeyCode를 줘야합니다.
        if (Input.GetKeyDown(KeyCode.Return)) {
            Debug.Log("Enter 키를 누르는 중...");
        }

        if (Input.GetKeyUp(KeyCode.W)) {
            Debug.Log("W 키 Up!");
        }

        if (Input.GetKeyDown(KeyCode.Escape)) {
            Debug.Log("ESC 키 Down!");
        }

    }

 

 

3. 마우스 입력받음

GetMouseButton / GetMouseButtonDown / GetMouseButtonUp

    void Update()
    {
        // GetMouseButton는 인자로 정수 0~2(마우스 인덱스 번호)를 줘야합니다.
        if (Input.GetMouseButton(0)) {
            Debug.Log("마우스 왼쪽 누르는 중...");
        }

        if (Input.GetMouseButtonDown(1))
        {
            Debug.Log("마우스 우클릭!");
        }

        if (Input.GetMouseButtonUp(2))
        {
            Debug.Log("마우스 휠 클릭!");
        }

    }

 

 

4. 버튼 입력받음

GetButton / GetButtonDown / GetButtonUp

    void Update()
    {
    	//인자로 버튼 이름을 준다.
        if (Input.GetButton("Jump")) { 
            Debug.Log("키를 누르고 있는 중...");
        }

        if (Input.GetButtonDown("Jump")) {
            Debug.Log("Down!");
        }

        if (Input.GetButtonUp("Jump"))
        {
            Debug.Log("Up!");
        }


    }

 

Input Manager

GetButton의 경우 Input Manager을 통해 직접 button을 만들거나 삭제할 수 있습니다.

유니티 상단 메뉴 edit -> Project Settings -> Input Manager 탭 으로 이동

최상단 Size는 현재 존재하는 버튼의 갯수고, 버튼을 삭제하거나 추가하려면 Size를 수정하면 됩니다.

 

축 입력

GetAxis("Horizontal") / GetAxis("Vertical")

수평과 수직 이동 값을 받아 실수로 리턴해 줍니다. 중간값이 있으며, 1로 수렴합니다.

    void Update()
    {
        if (Input.GetButton("Horizontal")) {  //수평이동
            float x = Input.GetAxis("Horizontal");
            Debug.Log("수평이동 : " + x);
        }

        if (Input.GetButton("Vertical")) {  //수직이동
            float y = Input.GetAxis("Vertical");
            Debug.Log("수직이동 : " + y);
        }

    }

 

 

GetAxisRaw("Horizontal") / GetAxisRaw("Vertical")

수평과 수직 이동 값을 받아 정수로 리턴해 줍니다. 중간값이 없고 1 또는 -1로 간결하게 뜹니다.

    void Update()
    {
        if (Input.GetButton("Horizontal")) {  //수평이동
            float x = Input.GetAxisRaw("Horizontal");
            Debug.Log("수평이동 : " + x);
        }

        if (Input.GetButton("Vertical")) {  //수직이동
            float y = Input.GetAxisRaw("Vertical");
            Debug.Log("수직이동 : " + y);
        }

    }

 

 

 

Translate를 이용한 간단한 오브젝트 이동

 

    void Update()
    {
        Vector3 vec = new Vector3(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"), 0); //GetAxis 값을 벡터 값으로 사용
        //모든 오브젝트는 기본적으로 transform을 가지고 있기 때문에 this를 쓰지 않아도 본인을 가리킬 수 있습니다.
        transform.Translate(vec); //Translate는 vector 값을 인자로 필요로 합니다.

    }