본문 바로가기
Unity

[Unity] New Input System 사용하기

by 심다린 2024. 9. 11.

유니티에는 New Input SystemOld Input Manager 가 존재한다.

 

new Input System은 기존의 입력 방식보다 더 편리한 UI를 제공하고 있다. 

그러나 방법을 처음에 잘 익혀둬야 앞으로도 유용하게 잘 사용할 수 있을 것 같다.

 

<New Input System API>

https://docs.unity3d.com/Packages/com.unity.inputsystem@1.8/manual/ActionsEditor.html

 

Configuring Input with the Actions Editor | Input System | 1.8.2

Configuring Input with the Actions Editor The Input Actions Editor allows you to edit Action Assets, which contain a saved configuration of Input Actions and their associated Bindings. It allows you to group collections of Actions into Action Maps, which r

docs.unity3d.com

 

 

기존의 게시물에서는 Old Input Manager를 이용하여 플레이어의 움직임을 구현했는데,

오늘은 New Input System을 이용해 플레이어의 움직임을 구현하는 방법을 알아보자 !

 

 

1. Input System 설치하기

먼저 프로젝트 창을 열어 Pachage Manager에 들어가 Input System을 검색하고 install 해준다.

 

2. Create -> Input Actions

패키지가 성공적으로 설치되었다면, Create를 눌렀을 때 사진과 같이 Input Actions가 추가된 것을 볼 수 있다.

(만약 보이지 않는다면, 가장 밑에 있는 화살표를 눌러 끝까지 내려가면 보일 것이다.)

 

 

2. Input Actions 설정하기

추가한 Input Actions를 눌러주면 다음과 같은 창이 뜰 것이다. 나는 플레이어의 움직임을 조정하기 위한 Input Actions이므로, PlayerControls라고 이름을 수정했다.

왼쪽 상단의 All Control Scheme을 누르고 Add Control Scheme을 누르면, 다음과 같은 창이 뜬다.

처음에는 리스트가 비어있지만, 이 곳에 내가 입력할 때 필요한 수단들을 추가해주면 된다.

나는 키보드와 마우스를 추가했다.

 

Action Maps 과 Actions를 생성해준다. 나는 움직이기 위한 Movement 와 총알 발사를 위한 Fire Actions을 생성했다.

Actions 오른쪽에 있는 + 를 클릭해 원하는 바인딩을 추가해준다.

그리고 추가해준 바인딩의 Path를 지정해주면 된다.

(이 부분은 UI가 조금 이상한데, Path의 더보기를 누르고 아무것도 뜨지 않더라고 내가 원하는 키를 입력해보면 검색이 가능하다)

 

3. 스크립트 생성 (PlayManager)

 

플레이어의 움직임을 구현하기 위해 다음과 같이 스크립트를 작성하였다. 

움직이는 원리는 같기 때문에, 지난 게시물인 플레이어 이동방법을 참고하면 도움이 될 것이다. (밑에 첨부)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
using UnityEngine.InputSystem;
using Unity.VisualScripting;

public class PlayerManager : MonoBehaviour
{
    float Speed = 5.0f;
    Vector3 moveDirection;  //(x,y,z)입력받을 값을 저장할 변수 생성


    void Update()
    {
        //이동할 방향에 따라 캐릭터의 방향을 설정 (시각적 전환)
        if (moveDirection.x > 0)
        {
            //오른쪽을 보도록 설정
            transform.localEulerAngles = new Vector3(0, 0, 0);
        }
        else if (moveDirection.x < 0)
        {
            //왼쪽을 보도록 설정
            transform.localEulerAngles = new Vector3(0, 180, 0);
        }

        //이동 처리 (일관된 이동 방향, 방향 전환은 localEulerAngles로만 처리
        transform.Translate(new Vector3(Mathf.Abs(moveDirection.x),moveDirection.y,0)*Time.deltaTime*Speed);
    }
    //입력시 호출
    void OnMovement(InputValue value) //On + "Actions name" 함수 이름으로 지정
    { 
        Vector2 input = value.Get<Vector2>();  //입력받은 값을 Vector2의 형식으로 가져오기
        if (input != null)
        {
            moveDirection = new Vector3(input.x, input.y, 0);
        }
    }

}

 

 

[Unity] 플레이어 이동방법

게임을 개발하기 위해서는 플레이어가 필요하고, 플레이어의 움직임을 제어할 수 있도록 구현하는 것이 필요하다. 마우스 클릭 시 캐릭터 커서 위치로 이동void Update(){ if (Input.GetMouseButton(0)) //0

simdarincodin.tistory.com

 

<알아둬야할 것>

  • Actions의 이름을 사용하여 함수를 만들어야한다. On + "함수이름" 
    지정해놓은 입력을 받을 때, 이 함수가 바로 실행된다.