기록 보관소

[Unity/유니티] 기초-뱀서라이크: 새로운 인풋시스템 적용하기[02+] 본문

유니티 프로젝트/뱀서라이크

[Unity/유니티] 기초-뱀서라이크: 새로운 인풋시스템 적용하기[02+]

JongHoon 2023. 3. 30. 17:08

개요

유니티 독학을 위해 아래 링크의 골드메탈님의 영상들을 보고 직접 따라 해보면서 진행 상황을 쓰고 배웠던 점을 요약한다.

https://youtube.com/playlist?list=PLO-mt5Iu5TeYI4dbYwWP8JqZMC9iuUIW2 

 

📚유니티 기초 강좌

유니티 게임 개발을 배우고 싶은 분들을 위한 기초 강좌

www.youtube.com


뱀서라이크: 새로운 인풋시스템 적용하기[02+]

1. 패키지 설치

Input Manager

  • 지난 시간에 플레이어 이동 구현에 사용했던 Input Manager(Horizontal, Vertical)는 유니티의 오래된 인풋 방식이다.
  • 최근에는 유니티에서 새로운 Input System을 도입해서, 이를 사용해보기 위해 패키지 설치를 하려고 한다.

메뉴 탭 Window - Package Manager 클릭
Package Manager에서는 현재 프로젝트에서 어떤 패키지가 설치되어 있는지 확인할 수 있다.
Unity Registry로 변경
스크롤을 내려서 보면 Input System이 있다. 이를 Install 해준다.
설치 완료 후 뜨는 재시작 경고창
재시작 후 Package Manager을 확인해보면 Input System이 In Project, 즉 현재 프로젝트에 설치된 것을 확인할 수 있다.


2. 인풋 액션 설정하기

Add Component에서 검색시 Player input이라는 컴포넌트가 생겼다
컴포넌트 추가

  • Player Input을 사용하려면 Actions라고 하는 프로필 에셋을 요구한다. 따라서 컴포넌트에 있는 Create Actions... 버튼으로 파일을 생성한다.

Undead Survivor 폴더 아래에 Player.inputactions 파일을 생성
생성 직후 보이는 Input Actions창과 Input Actions 파일이 생성된 Undead Survivor 폴더, 그리고 Actions에 생성했던 Player가 설정되어 있는 모습
InputActions 창

  • Input Actions 창에서는 Action Maps(카테고리)에 따라 다양하게 설정할 수 있다. 현재는 플레이어 이동을 구현할 것이므로, Player의 Move Action을 설정하도록 하자.

Player의 Move Actions 내용

  • Actions 항목은 기존의 Input Manager에서 방향키나 (W, A, S, D와 같은)추가 키 설정과 비슷하다고 보면 될 것 같다.
  • 위에 보이듯 게임 패드, 키보드, XR 컨트롤러, 조이스틱 등 다양한 디바이스의 인풋을 관리할 수 있다.

Action Type 설정
Control Type 설정

  • Action Properties에서 Action Type은 어떤 형태의 input인지 결정해주는 속성으로, 버튼 클릭인지 값을 내보내는 것인지 구분할 수 있다. Control Type은 그 값의 형식을 결정한다.
  • 이번 구현에서는 보이는 것처럼 Action Type은 Value, Control Type은 Vector2로 지정해주었다.

Interactions 설정

  • Interactions에서는 input의 호출 타이밍을 지정하는 것으로, 사용자가 어떤 행동을 할 때 작동해야하는지 설정한다고 보면 된다.
  • 위 4가지 방식 중 Press는 GetButtonDown(영상에서는 On Button Down이라고 했는데 아마 이를 뜻하는 것 같다)과 비슷하다고 한다.

Processors 설정

  • Processors는 input 값을 후보정한다.
  • 이전에 대각선 보정을 위해서 벡터2 변수에 normalized를 했던 것처럼, Normalize Vector2를 추가하도록 한다.

변경 사항을 저장하자

  • 변경 사항을 저장할 때는 직접 Save Asset 버튼을 눌러도 되고, 그 옆의 Auto-Save를 체크해서 자동 저장을 하도록 만들 수도 있다.

3. 스크립트 적용

Player Input 컴포넌트

  • Player Input 컴포넌트를 자세히 보면 Behavior 아래에 여러 함수 이름들이 적힌 것을 볼 수 있다. 이를 활용해서 스크립트에 함수를 만들어 작성하면 적용이 된다.
//Plyaer Script

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;  //새로운 Input System 추가

public class Player : MonoBehaviour {
    Vector2 inputVec;   //키보드 입력 값 변수
	public float speed; //속도 관리 변수

    Rigidbody2D rigid;

    void Awake() {
        rigid = GetComponent<Rigidbody2D>();
    }

    void FixedUpdate() {
		//위치 이동
		Vector2 nextVec = inputVec * speed * Time.fixedDeltaTime;   //normalized는 Input Actions 창에서 이미 설정했으므로 제거
		rigid.MovePosition(rigid.position + nextVec);
    }

    void OnMove(InputValue value) {
        inputVec = value.Get<Vector2>();    //Get<T> : 프로필에서 설정한 컨트롤 타입 T 값을 가져오는 함수
    }
}
  • 일단 Input System 네임스페이스를 추가한 다음, OnMove 함수를 만들 것이므로 Update 함수에 있던 내용을 모두 제거했다.

새로운 Input System이 적용된 플레이어 이동 테스트