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** โš ๏ธ