Unity 개인 공부

Unity 개인 공부(2025-01-22)

kimjunki-8 2025. 1. 22. 21:42

자자자, 사실 input 개념이 초보자 단계는 아닙니다.

Input System의 새로운 설계
이전 Unity의 Input Manager는 간단히 Input.GetAxis() 또는 Input.GetKey()로 입력을 처리했기 때문에 초보자가 쉽게 접근할 수 있었습니다.
반면, 새로운 Input System은 더 많은 기능과 확장성을 제공하기 위해, 객체 지향과 데이터 중심 설계를 도입했습니다. 이로 인해 초보자에게는 복잡해 보입니다.

추상화된 개념
InputActionAsset처럼 에디터와 코드가 연동되는 시스템은 초보자에게 생소한 개념입니다.
"왜 코드는 객체를 직접 만들지 않고 에디터에서 불러오는가?"라는 흐름 자체가 초보자에게는 직관적이지 않습니다.

기본적인 프로그래밍 이해 필요
InputAction, FindAction, Enable 등 객체 생성, 참조, 메소드 호출에 대한 기본적인 C# 개념을 알아야 이해가 가능합니다.

간단한 Input 처리부터 시작하는 것이 좋습니다. 기존 Input Manager 방식으로 간단히 입력을 이해한 후에 새로운 Input System을 배우는 것이 더 효과적입니다.
void Update()
{
    if (Input.GetKey(KeyCode.W))
    {
        Debug.Log("W 키가 눌렸습니다!");
    }
}


2. Input System의 간단한 예제로 접근
새로운 Input System을 바로 사용하고 싶다면, 더 단순한 예제를 사용하세요. 예를 들어:

using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerInput : MonoBehaviour
{
    void Update()
    {
        if (Keyboard.current.wKey.isPressed)
        {
            Debug.Log("W 키가 눌렸습니다!");
        }
    }
}

이 코드는 Keyboard.current를 사용하여 새로운 Input System의 일부만 간단히 활용한 예제입니다. 여기에는 InputActionAsset이나 FindAction 같은 복잡한 개념이 없습니다.

Keyboard.current.wKey.isPressed는 Unity의 새로운 Input System에서 키보드 입력을 처리하는 방식 중 하나입니다. 기존 방식인 Input.GetKey(KeyCode.W)와 유사하지만, 새로운 Input System의 저수준 API(Low-Level API)를 사용한 방식입니다.

1. Keyboard.current란 무엇인가?
Keyboard.current는 새로운 Input System에서 현재 연결된 키보드 장치를 나타내는 객체입니다.

Keyboard는 InputSystem의 키보드 입력을 처리하는 클래스입니다.
current는 현재 사용 중인 키보드 인스턴스를 나타냅니다.
만약 여러 개의 입력 장치(예: 키보드, 게임패드)가 연결되어 있다면, Keyboard.current는 현재 활성화된 키보드를 가리킵니다.

2. wKey란 무엇인가?
wKey는 키보드에서 W 키를 나타내는 속성입니다.
Keyboard 클래스는 모든 키(예: aKey, spaceKey, escapeKey 등)를 속성으로 제공합니다.
따라서 Keyboard.current.wKey는 현재 키보드에서 W 키에 대한 정보를 가져옵니다.

3. isPressed란 무엇인가?
isPressed는 해당 키가 현재 눌려 있는지 여부를 나타내는 Boolean 속성입니다.
true: 키가 눌려 있는 상태
false: 키가 눌려 있지 않은 상태

4. 전체 구조
따라서, Keyboard.current.wKey.isPressed는 다음을 의미합니다:
Keyboard.current: 현재 활성화된 키보드.
wKey: 키보드에서 W 키.
isPressed: W 키가 눌려 있는지 여부를 확인.

Keyboard 클래스는 Keyboard.current 외에도 다양한 속성과 메서드를 제공합니다. 이를 통해 현재 키보드와 관련된 정보를 얻거나 여러 작업을 수행할 수 있습니다.
1. Keyboard 클래스의 주요 속성과 메서드
Keyboard 클래스는 다음과 같은 속성과 메서드를 제공합니다:
(1) current
현재 활성화된 키보드를 나타냅니다.
예: Keyboard.current
(2) all
현재 연결된 모든 키보드 장치의 리스트를 반환합니다.
반환값: IReadOnlyList<Keyboard>

foreach (var keyboard in Keyboard.all)
{
    Debug.Log($"연결된 키보드: {keyboard.deviceId}");
}

(3) spaceKey, enterKey, ...
키보드의 각 키를 나타내는 속성입니다.
각 속성은 KeyControl 타입으로, 특정 키를 제어합니다.
예: Keyboard.current.spaceKey.isPressed 또는 Keyboard.current.enterKey.wasPressedThisFrame
(4) anyKey
키보드에서 아무 키나 누르고 있는지 확인합니다.
타입: KeyControl

if (Keyboard.current.anyKey.isPressed)
{
    Debug.Log("어떤 키가 눌렸습니다!");
}

(5) deviceId
해당 키보드 장치의 고유 ID를 반환합니다.
다중 키보드 환경에서 유용합니다.
예: Keyboard.current.deviceId
(6) layout
현재 키보드의 레이아웃(예: QWERTY, AZERTY 등)을 반환합니다.
타입: string
예: Debug.Log(Keyboard.current.layout);
(7) enabled
현재 키보드 장치가 활성화되어 있는지 확인합니다.
타입: bool
예:

if (Keyboard.current.enabled)
{
    Debug.Log("키보드가 활성화되었습니다.");
}

(8) wasUpdatedThisFrame
현재 키보드 입력이 이 프레임 동안 업데이트되었는지 확인합니다.
타입: bool
예:

if (Keyboard.current.wasUpdatedThisFrame)
{
    Debug.Log("키보드 입력이 업데이트되었습니다.");
}


2. 키보드에서 키 관련 속성
Keyboard 클래스는 각 키에 대한 속성을 제공합니다. 모든 키는 KeyControl 타입으로 동작하며, 다음과 같은 속성을 사용할 수 있습니다:
주요 키 속성 예시
글자 키: aKey, bKey, ..., zKey
숫자 키: digit0Key, digit1Key, ..., digit9Key
특수 키: spaceKey, enterKey, backspaceKey, tabKey
방향 키: upArrowKey, downArrowKey, leftArrowKey, rightArrowKey
기능 키: f1Key, f2Key, ..., f12Key
조합 키: shiftKey, ctrlKey, altKey
각 키의 상태 확인
각 키는 다음과 같은 상태를 확인할 수 있습니다:
isPressed: 키가 눌려 있는 상태인지 확인.
wasPressedThisFrame: 키가 이번 프레임에서 눌렸는지 확인.
wasReleasedThisFrame: 키가 이번 프레임에서 떼어졌는지 확인.

연결된 키보드가 없을 때 (에러 방지)

using UnityEngine;
using UnityEngine.InputSystem;

public class SafeKeyboardCheck : MonoBehaviour
{
    void Update()
    {
        if (Keyboard.current != null && Keyboard.current.anyKey.isPressed)
        {
            Debug.Log("어떤 키가 눌렸습니다!");
        }
        else if (Keyboard.current == null)
        {
            Debug.Log("키보드가 연결되어 있지 않습니다.");
        }
    }
}

 

 

'Unity 개인 공부' 카테고리의 다른 글

Unity 개인 공부(2025-01-24)  (0) 2025.01.24
Unity 개인 공부(2025-01-23)  (0) 2025.01.23
Unity 개인 공부(2025-01-21)  (0) 2025.01.21
Unity 개인 공부(2025-01-20)  (0) 2025.01.20
Unity 개인 공부(2025-01-19)  (0) 2025.01.19