본문 바로가기
UNITY

유니티 키보드와 마우스 입력

by J데빌 2022. 6. 30.
골드메탈 유니티 강좌 보고 정리한 내용입니다.

1. 키보드, 마우스 모든키 입력

Input 클래스는 유니티 엔진 내에 있는 모든 입력(키보드, 마우스)에 관련된 입력을 관리해주는 클래스이다.

input.anyKeyDown는 어떠한 모든 입력(키보드, 마우스)를 최초로 입력(눌러졌을 때) 받을 때 true를 반환해준다.

Input.anyKey는 어떠한 모든(키보드, 마우스) 입력이 누르고 있는 동안 반환값이 true를 반환해준다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move : MonoBehaviour {
    
    void Update() {
        
        if (Input.anyKeyDown) {
            Debug.Log("플레이어가 아무 키를 눌렀습니다.");
        }
		
        if (Input.anyKey) {
            Debug.Log("플레이어가 아무 키를 누르고 있습니다.");
        }
}

 

2. 키보드 입력

각 입력 함수는 눌렀을때(Down), 누르고 가만히 있을때(Stay), 누르고 땠을때(Up)  3가지 행동으로 구분

2-1. KeyCode

KeyCode.Return : 엔터
KeyCode.KeypadEnter : 오른쪽 숫자패드에 있는 세로로 길게 되어있는 작은 엔터
KeyCode.Escape : 키보드 ESC

키보드의 아스키 코드 값이 저장되어 있어 키보드를 물리적으로 매핑 시켜놓은 변수이다. 좀더 상세한 KeyCode 의 값을 보기 위해서 유니티 공식 문서를 참고하면 된다. 

 

Input.GetKey()는 키보드 버튼 누르고 있는동안에 true를 반환한다.

Input.GetKeyDown()는 키보드 버튼이 눌러 젔을 때 true를 반환한다.
Input.GetKeyUp()는 눌러진 키보드 버튼이 올라왔 때 true를 반환한다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move : MonoBehaviour {
    
    void Update() {
        if (Input.GetKeyDown(KeyCode.Return)) {
            Debug.Log("아이템을 구입하였습니다.");
        }

        if (Input.GetKey(KeyCode.LeftArrow)) {
            Debug.Log("왼쪽으로 이동 중");
        }

        if (Input.GetKeyUp(KeyCode.RightArrow)) {
            Debug.Log("오른쪽 이동을 멈추었습니다.");
        }    	
    }
}

 

3. 마우스 입력

input.GetMouse() 안에 매개변수 0은 마우스 왼쪽 버튼, 1은 마우스 오른쪽 버튼 이다.
Input.GetMouseButtonDown()은 마우스 버튼 눌렀을 때 true가 반환된다.
Input.GetMouseButton()은 마우스 버튼 누르고 있을 때 true가 반환된다.
Input.GetMouseButtonUp()은 마우스 버튼 눌렀다가 땠을 때 true가 반환된다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move : MonoBehaviour {
    
    void Update() {
        
        if (Input.GetMouseButtonDown(0)) {
            Debug.Log("미사일 발사!");
        }

        if (Input.GetMouseButton(0)) {
            Debug.Log("미사일 모으는 중...");
        }

        if (Input.GetMouseButtonUp(0)) {
            Debug.Log("슈퍼 미사일 밥사!");
        }
}

 

4. 버튼

Edit->Project Settings->Input Manager에서 확인할 수 있다.

 

Input Manager 버튼을 이용하면 좀더 유동적이고 세밀하게 제어할 수 있다. 유니티에서 공식적으로 지정해놓은 키를 가지고 사용 할 수 있다.

Input.GetButtonDown()는 Input 버튼을 눌렀을 때 true를 반환한다.
Input.GetButton()는 Input 버튼을 눌르고 있을 때 true를 반환한다.
Input.GetButtonUp()는 Input 버튼을 누르고 땠을 때 true를 반환한다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move : MonoBehaviour {
    
    void Update() {
        
        if (Input.GetButtonDown("Jump")) {
            Debug.Log("점프!");
        }

        if (Input.GetButtonDown("SuperFire")) { //ESC 키 맵핑
            Debug.Log("필살기!!");
        }

        if (Input.GetButton("Jump")) {
            Debug.Log("점프 모으는 중....");
        }

        if (Input.GetButtonUp("Jump")) {
            Debug.Log("슈퍼 점프!!");
        }
}

 

5. 수평(횡) 이동(왼쪽, 오른쪽)

※가중치는 가속도라고 표현해도 된다.

 

Input.GetAxis()는 수평, 수직 버튼 입력을 받으면 반환값이 float 이다. 가중치에 따라 1에 근접하게 실수형태로 왼쪽은 (-)음수, 오른쪽은 (+)양수로 반환된다.
Input.GetAxisRaw()는 Input.GetAxis()랑 같은데 가중치 없이 -1(왼쪽) 또는 1(오른쪽)로 반환된다. 가만히 있있거나 왼쪽 오른쪽 둘다 누르면 0 이다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move : MonoBehaviour {
    
    void Update() {
        
        if (Input.GetButtonDown("Horizontal")) {
            Debug.Log("가중치(가속도)가 있는 반환값 : " + Input.GetAxis("Horizontal"));
            Debug.Log("가중치(가속도)가 없는 반환값 : " + Input.GetAxisRaw("Horizontal"));
        }
}

 

6. 수직(종) 이동(위, 아래)

수평(횡)과 같이 수직일 때는 (+1)위, (-1)아래, 위아래 동시(0) 이다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move : MonoBehaviour {
    
    void Update() {
        
        if (Input.GetButtonDown("Vertical")) {
            Debug.Log("가중치(가속도)가 있는 반환값 : " + Input.GetAxis("Vertical")); 
            Debug.Log("가중치(가속도)가 없는 반환값 : " + Input.GetAxisRaw("Vertical"));
        }
}

'UNITY' 카테고리의 다른 글

유니티 게임오브젝트의 흐름 LifeCyle  (0) 2022.06.29
유니티 C# 프로그래밍 기초  (0) 2022.06.29

댓글