Input System - TeamCrazyPerformance/Game_study GitHub Wiki

Unity Input System

  • Unity에서 키보드,마우스, 콘솔 등 다양한 플랫폼을 통해 입력을 받을 수 있게 지원하는 시스템입니다.
  • 유니티가 기본적으로 지원하는 Input Manager의 단점을 보완합니다.

Input Manager의 특징

  • GetKey(), "Horizontal" 과 같은 축 입력을 통해 쉽게 입력값을 받을 수 있습니다.
  • 다른 플랫폼으로 게임을 만드는 경우, 위 코드를 일일이 수정해야 합니다.
 
public class Move : MonoBehavior
{
  Rigidbody rigid;
  void Start ()
  {
    rigid = GetComponent();
  }

  void Update() 
  {
    float x = Input.GetAxis("Horizontal");
    float y = Input.getAxis("Vertical");

    rigid.velocity = new Vector2(x,y);
  }
}

  • Input System의 경우, Scheme 만 변경해주면 플랫폼에 따른 코드를 쉽게 작성할 수 있습니다. image

기본 설정

  1. Unity에서 Window -> Package Manager를 클릭합니다.
  2. Packages:In Project 를 Packages:Unity Registry 로 변경, Input System을 검색합니다.
  3. Install 버튼을 누른 후 프로젝트를 재시작합니다.
  4. Edit -> Project Setting -> Player -> Active Input Handling 를 찾습니다.
  5. Input System Package(New)을 선택합니다. Input Manager도 쓰고 싶다면 Both를 선택합니다.
  • 이후 Project -> Create 에서 Input Action Asset를 생성하여 Input System을 사용할 수 있습니다.

기능 및 요소

Control Scheme

  • Control Scheme를 사용하면 플랫폼에 따른 입력방식을 쉽게 바꿀 수 있습니다.
  • Inspector -> Open 을 통해 Control Scheme를 설정할 수 있습니다.
  • 이름과 입력방식을 설정하여 Control Scheme를 추가합니다. image

Action Maps

  • 입력장치를 통해 입력을 어떤방법으로, 어떤 값으로 받아올지를 설정할 수 있습니다.
  • Action Properties -> Action Type, Control Type를 통해 어떤 값을 받을 지 설정할 수 있습니다.
  • Binding을 추가, Binding마다 Path를 설정하여 어떤 키로 어떤 입력을 받을지 설정할 수 있습니다.
  • save버튼으로 설정값을 저장할 수 있습니다. image image image

Player Input

  • Player Input 컴포넌트를 통해 Input Action Asset를 오브젝트에 적용할 수 있습니다.
  • Behavior 옵션에 따라 스크립트 작성법이 달라집니다.

Message

  • On+(Action의 이름) 형태로 함수이름을 작성합니다.
  • InputValue를 매개변수로 갖는 함수를 사용합니다.
Example

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

public class Move_sendM : MonoBehaviour
{
    Rigidbody rigid;
    Vector2 MoveDir = new Vector3(1f,1f,0f);
    void Start()
    {
        rigid = GetComponent();
    }

    void Update()
    {
        rigid.velocity = MoveDir; // 속도 조정
    }

    public void OnMove(InputValue Val) // 키를 입력받았을 때 Val을 받아 벡터를 얻어냄.
    {
        Vector2 vec = Val.Get(); // 입력 받은 벡터 값을 저장
        if (vec != null)
            MoveDir = new Vector3(vec.x, vec.y,0f); // 물체가 가질 벡터
    }
}

Event

  • 함수의 이름을 마음대로 결정할 수 있습니다.
  • CallbackContext를 통해 입력을 받아옵니다.
  • 이후 설정에서 오브젝트를 Event에 추가한 후, 작동시킬 함수를 설정해야합니다.
Example

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

public class Move_Event : MonoBehaviour
{
    Rigidbody rigid;
    Vector3 MoveDir;
    void Start()
    {
        rigid = GetComponent();
    }

    public void OnMove(InputAction.CallbackContext context) // 값을 입력받는 함수
    {
        Vector2 vec = context.ReadValue();
        if (vec != null)
            MoveDir = new Vector3(vec.x, vec.y, 0f);
    }

    void Update()
    {
        rigid.velocity = MoveDir;
    }
}

image

23 김정완

⚠️ **GitHub.com Fallback** ⚠️