Version: Unity 6.0 (6000.0)
언어 : 한국어
입력 이벤트
마우스 이벤트

키보드 이벤트

키보드 이벤트는 키보드의 키를 누르거나 놓을 때 발생합니다. 각 이벤트에는 이벤트의 수정자, 텍스트 문자 및 관련 키 코드에 대한 정보가 포함됩니다.

많은 표준 컨트롤은 KeyDownEvent를 사용하여 단축키나 접근성 동작을 인코딩합니다. 다음 예시들은 모두 키보드 이벤트를 사용합니다.

  • ToggleButton 클래스는 마우스 클릭에 대한 대체 동작으로 EnterSpacebar 키 누름을 수신합니다.
  • ScrollView 및 Slider 컨트롤은 방향 화살표 키 누름을 사용하여 값을 조정합니다.
  • TextField 컨트롤은 keyCode 프로퍼티와 문자 프로퍼티를 모두 확인하여 특수 동작을 실행하거나 텍스트를 수락합니다.

모든 키보드 이벤트의 기본 클래스는 KeyboardEventBase입니다.

이벤트 설명 트리클다운 버블업 취소 가능
KeyDownEvent 사용자가 키보드 키를 누를 때 전송됩니다. 지원 지원 지원
KeyUpEvent 사용자가 키보드 키를 놓을 때 전송됩니다. 지원 지원 지원

고유한 프로퍼티

keyCode: keyCode 프로퍼티는 입력 장치의 물리 키(키보드, 조이스틱 등)에 직접 대응하는 문자 키를 반환합니다. character 속성과 keyCode 속성의 차이점은 keyCode가 물리 키를 나타내는 반면 character는 특정 문자의 입력을 나타낸다는 것입니다. 예를 들어 aA는 모두 keyDownEvent 동안 keyCode=KeyCode.A를 반환합니다.

character: character 프로퍼티는 keyDownEvent 동안 문자 코드를 반환합니다.

modifiers: modifiers 프로퍼티는 사용자가 누르고 있는 수정 키를 반환합니다. 수정 키에는 Shift, Ctrl, Alt 키 등이 있습니다.

자세한 내용은 MDN 기술 자료의 수정 키 섹션에서 확인하십시오.

이벤트 리스트

다음 리스트는 이벤트 패밀리에 있는 각 이벤트의 이름, 설명, 타겟을 제공합니다.

기본적으로 시각적 요소는 키보드 이벤트를 수신하지 않습니다. 포커스를 둘 수 있고 현재 포커스가 맞춰진 요소만 키보드 이벤트의 타겟이 됩니다. 왜냐하면 키보드 이벤트는 상향과 하향으로 전파되므로 부모 요소 또한 이벤트를 수신할 수 있기 때문입니다.

요컨대 키보드 이벤트를 수신하려면 요소를 focusable=true로 지정하고 element.Focus()를 사용하여 명시적으로 포커스를 부여해야 합니다. 그러면 해당 요소가 키보드 이벤트를 수신할 수 있습니다.

KeyDownEvent

키보드의 키를 누를 때마다 KeyDownEvent가 전송됩니다. 누른 키에는 해당 이벤트에 대한 keyCode 프로퍼티가 포함되어 있습니다. 해당 키 누름에 텍스트 입력이 연결되어 있다면 각 문자 텍스트가 입력될 때 추가 이벤트가 전송됩니다. character 프로퍼티에는 해당 이벤트에 대한 문자가 포함되어 있습니다.

a를 눌렀다 놓으면__ UI__(사용자 인터페이스) 사용자가 애플리케이션과 상호 작용하도록 해 줍니다. Unity는 현재 3개의 UI 시스템을 지원합니다. 자세한 정보
See in Glossary
툴킷이 다음 이벤트를 전송합니다.


KeyDownEvent { keyCode=KeyCode.A }
KeyDownEvent { character=’a’ }
KeyUpEvent { keyCode=KeyCode.A }

Ctrl+a를 눌렀다 놓으면 UI 툴킷이 다음 이벤트를 전송합니다.


KeyDownEvent { keyCode=KeyCode.LeftControl, modifiers=EventModifiers.Control }
KeyDownEvent { keyCode=KeyCode.A, modifiers=EventModifiers.Control }
KeyUpEvent { keyCode=KeyCode.A, modifiers=EventModifiers.Control }
KeyUpEvent { keyCode=KeyCode.LeftControl }

target: 포커스가 있는 시각적 요소입니다. 포커스가 있는 요소가 없다면 패널의 루트 시각적 요소입니다.

KeyUpEvent

키보드의 키를 놓을 때 KeyUpEvent가 전송됩니다. 해당 이벤트의 keyCode 프로퍼티에는 놓는 키가 포함되어 있습니다. KeyDownEvent에는 키 입력에 연결된 텍스트 입력이 있을 때 전송되는 추가 이벤트가 있습니다.

a를 눌렀다 놓으면 UI 툴킷이 다음 이벤트를 전송합니다.

KeyDownEvent { keyCode=KeyCode.A }
KeyDownEvent { character=’a’ }
KeyUpEvent { keyCode=KeyCode.A }

Ctrl+a를 눌렀다 놓으면 UI 툴킷이 다음 이벤트를 전송합니다.


KeyDownEvent { keyCode=KeyCode.LeftControl, modifiers=EventModifiers.Control }
KeyDownEvent { keyCode=KeyCode.A, modifiers=EventModifiers.Control }
KeyUpEvent { keyCode=KeyCode.A, modifiers=EventModifiers.Control }
KeyUpEvent { keyCode=KeyCode.LeftControl }

target: 포커스가 있는 시각적 요소입니다. 포커스가 있는 요소가 없다면 패널의 루트 시각적 요소입니다.

예제

다음 코드 예시는 사용자가 TextField에서 키를 누르면 콘솔에 메시지를 출력합니다. 이 코드 샘플은 KeyUpEventKeyDownEvent의 이벤트 발생을 강조 표시합니다.

  1. 임의의 템플릿을 사용하여 Unity 프로젝트를 생성합니다.

  2. SampleScene에서 GameObject > UI Toolkit > UI Document를 선택합니다.

  3. 다음 내용을 포함하는 KeyboardEventTest.cs라는 이름의 C# 스크립트를 생성합니다.

    using UnityEngine;
    using UnityEngine.UIElements;
    
    // Add KeyboardEventTest to a GameObject with a valid UIDocument.
    // When the user presses a key, it will print the keyboard event properties to the console.
    [RequireComponent(typeof(UIDocument))]
    public class KeyboardEventTest : MonoBehaviour
    {
        void OnEnable()
        {
            var root = GetComponent<UIDocument>().rootVisualElement;
            root.Add(new Label("Press any key to see the keyDown properties"));
            root.Add(new TextField());
            root.Q<TextField>().Focus();
            root.RegisterCallback<KeyDownEvent>(OnKeyDown, TrickleDown.TrickleDown);
            root.RegisterCallback<KeyUpEvent>(OnKeyUp, TrickleDown.TrickleDown);
        }
        void OnKeyDown(KeyDownEvent ev)
        {
            Debug.Log("KeyDown:" + ev.keyCode);
            Debug.Log("KeyDown:" + ev.character);
            Debug.Log("KeyDown:" + ev.modifiers);
        }
    
        void OnKeyUp(KeyUpEvent ev)
        {
            Debug.Log("KeyUp:" + ev.keyCode);
            Debug.Log("KeyUp:" + ev.character);
            Debug.Log("KeyUp:" + ev.modifiers);
        }
    }
    
  4. 계층 창에서 UIDocument 게임 오브젝트를 선택합니다.

  5. KeyboardEventTest.cs를 인스펙터 창의 Add Component로 드래그합니다.

  6. 플레이 모드를 시작하고 TextField에 입력합니다.

추가 리소스

입력 이벤트
마우스 이벤트