본문 바로가기
  • 불확실한 내일을 위해
유니티 C#/이론

유니티 기초 - Input Manager 시스템으로 입력신호 관리하기

by 그린초코 2024. 4. 28.

유니티에서 키보드로 이동하는 함수를 만들 때 입력 신호 조건문을 만들어 구현할 수 있다.

예를 들어 W를 눌렀을 때 앞으로 이동하려면 아래처럼 구현하면 된다. 

if(Input.Gatkey(KeyCode.W))
{
	앞으로 이동
}

 

(Getkey 등의 입력 함수 종류 참고 : https://greenchoco.tistory.com/219)

 

C#기초 - 이동 함수와 인수 종류 (키보드, 마우스, 모바일)

키보드 등의 입력 신호를 감지하기 위해서는 유니티에서 제공하는 input 클래스를 사용해야 한다.input 클래스에서 자주 사용하는 함수와 변수는 아래와 같다.  1. 마우스와 터치에 사용되는 함수

greenchoco.tistory.com

 

하지만 이런 방식은 키에 대한 각각 상태를 조건문으로 구현해야 해서 코드가 매우 길어진다.

 

이를 더 편하게 하기 위해서 유니티에서 제공하는 것이 바로 InputManager 시스템이다.

[Edit] - [Project Setting...] 으로 들어가면 Input Manager 를 찾을 수 있다. 

 

여기서 Horizontal은 수평, Vertical은 수직이라는 뜻이다.

이 둘을 펼쳐서 보면 Negative Button, Positive Button 이 쓰여있다.

Negative 는 - 를, Positive는 + 를 뜻하는데 -는 왼쪽과 아래를, +는 오른쪽과 위를 향한다고 생각하면 된다. 

 

 

Input Manager의 버튼을 인수로 사용하기 위해서는 아래처럼 GetButton() 함수를 이용하면 된다. 

if(Input.GatButton("Vertical"))
{
	이동
}

 

이렇게 적으면 Vertical 인수를 이용했으므로 화살표 위아래나 W나 S 중 하나라도 누르면 캐릭터는 이동한다. 

 

참고로 Negative Button, Positive Button 은 수치로 표현하면 각각 -1, +1 로 인식한다.

이 숫자를 직접 확인해보고 싶으면 GetAxis() 함수를 아래처럼 사용하면 된다. 

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

public class Player : MonoBehaviour
{
    void Update()
    {
        float v = Input.GetAxis("Vertical");
        print(v);
    }
}

 

참고로 여기서 if문이 아닌 GetAxis함수를 사용한 이유는 반환값 때문이다.

if문의 반환값은 bool형만 가능하여 true, false만 출력하기 때문에 숫자로 된 수치를 확인할 수 없다.

그래서 float 자료형을 반환값으로 슬 수 있는 GetAxis() 함수를 사용한 것이다.

 

위 스크립트를 오브젝트에 적용한 후 콘솔창을 보고 키를 눌렀을 때, 화살표 위와 W키는 +1, 화살표 아래와 S키는 -1을 가리키는 것을 확인할 수 있다. 

 

 

 

728x90

댓글