업데이트된 튜토리얼과 샘플 프로젝트인 워리어스를 통해 입력 시스템에 대해 알아보세요.

KRISTYNA HOUGAARD / UNITY TECHNOLOGIESContributor
Nov 26, 2020|7 분
업데이트된 튜토리얼과 샘플 프로젝트인 워리어스를 통해 입력 시스템에 대해 알아보세요.
이 웹페이지는 이해를 돕기 위해 기계 번역으로 제공됩니다. 기계 번역으로 제공되는 콘텐츠에 대한 정확도나 신뢰도는 보장되지 않습니다. 번역된 콘텐츠의 정확도에 관해 의문이 있는 경우 웹페이지의 공식 영어 원문을 참고해 주시기 바랍니다.

입력 시스템을 사용하면 모바일부터 VR까지 다양한 플랫폼에 대한 컨트롤을 빠르게 설정할 수 있습니다. 초보자와 중급 사용자를 위한 예제 프로젝트와 새로운 동영상 튜토리얼로 시작하세요.

입력은 실시간 프로젝트를 인터랙티브하게 만드는 핵심 요소입니다. 유니티의 입력 시스템은 컨트롤 구현 방식을 표준화하고 새로운 고급 기능을 제공합니다. Unity 2019 LTS 이상 버전에서 검증되었습니다( 지원되는 입력 장치 전체 목록은 문서를 참조하세요).

새로운 튜토리얼 콘텐츠는 여러 플랫폼에 대한 개발이 전혀 처음이더라도 빠르게 시작할 수 있도록 도와줍니다. 워크플로에 이미 익숙하다면 입력 시스템을 사용하여 시네머신이나 Unity UI를 사용한 워리어와 같은 (다른) Unity 툴을 구동하는 방법에 대한 자세한 내용은 주요 예제 프로젝트인 워리어를 통해 알아보세요.

3월에 진행된 개발자를 만나다 세션에서는 이 새로운 시스템을 만든 이유를 설명하고 로컬 멀티플레이어 설정, 게임패드 컨트롤의 빠른 추가, 새 플레이어 스폰, 모바일 컨트롤 구현을 위한 워크플로를 설명하는 데모가 포함되어 있습니다. 입력 시스템의 수석 개발자인 르네 담이 도구와 팀의 로드맵에 대한 청중의 질문에 답변합니다.

롤어볼: 초보자를 위한 입력 시스템

Unity의 기본 입력 워크플로에 대해 알아보고 싶은 초보자라면 Unity 학습에서 업데이트된 롤어볼 프로젝트를 확인해 보세요. 입력 시스템 패키지 설치, 플레이어 입력 컴포넌트 추가, 플레이어에 입력 데이터 적용과 같은 첫 단계를 안내합니다.

Unity Learn의 롤어볼 프로젝트 이미지
프로토타입 시리즈: 우주선 제어하기
프로토타입 시리즈의 이미지: 우주선 제어하기

프로시저 애니메이션으로 보스를 만드는 이 동영상과 예제 프로젝트에서 볼 수 있듯이 프로토타입 시리즈에서도 입력 시스템을 사용합니다. 우주선의 입력 액션 에셋은 이동 제어, 레이저 발사체 발사, 부스트에 입력을 사용합니다.

전사: 중간 통합 및 게임플레이 시나리오

워리어스는 일반적인 3인칭 로컬 멀티플레이어 크로스 플랫폼 게임 설정에서 입력 시스템으로 좀 더 중간 단계의 툴링과 API를 시연하는 프로젝트입니다. 이 기능은 Unity 2019 LTS에서 사용할 수 있으며 내년에 출시되는 2020 LTS 버전에 업데이트될 예정입니다. 프로젝트는 세 가지 브랜치가 있는 GitHub에서 다운로드할 수 있습니다:

  • V1은 위에서 언급한 개발자와의 만남 세션 당시 프로젝트 상태를 캡처합니다;
  • V2는 가장 최근의 입력 시스템 유나이트 나우 세션에 사용한 것입니다(아래 참조);
  • 마스터 브랜치에서 작업을 계속하고 있습니다.

이 프로젝트는 싱글 플레이어와 로컬 멀티플레이어 모드에서 모두 제어할 수 있는 캐릭터를 중심으로 제작되었습니다. 게임 매니저가 로컬 멀티플레이어로 설정되어 있으면 전사 프리팹 인스턴스가 여러 개 인스턴스화됩니다. 전사 프리팹은 입력 시스템의 플레이어 입력 컴포넌트를 사용하도록 설정되어 있으므로, 전사의 각 인스턴스에는 자동으로 연결된 입력 장치가 페어링됩니다.

제어 체계

이 워리어의 컨트롤 방식은 크로스 플랫폼 플레이를 위해 설정되어 있으며 키보드와 다른 게임패드 간에 자동 전환됩니다. 이 설정은 원시 런타임 입력 데이터에 스무딩을 적용하여 플레이어가 어떤 축(키보드 키 또는 게임패드 조이스틱)을 입력하든 캐릭터의 방향 이동이 균일하도록 하는 예제입니다. 다음 제어 방식도 기본 공격 애니메이션에 버튼 누름을 사용합니다.

입력 작업의 이미지

전사의 입력 액션 에셋은 캐릭터 제어용(달리기 및 공격)과 메뉴 입력 제어용의 두 가지 액션 맵으로 구성되어 있습니다. 게임이나 기타 인터랙티브 프로젝트에는 일반적으로 동일한 입력 바인딩을 공유하는 서로 다른 제어 요구 사항을 가진 여러 상태가 있습니다.

예를 들어 조이스틱을 한 방향으로 밀면 전사가 해당 축을 향해 달리게 됩니다. 하지만 게임이 일시 정지된 상태에서 플레이어는 조이스틱을 사용하여 일시 정지 메뉴의 여러 선택 가능한 버튼과 옵션 사이를 이동할 수 있습니다.

입력 시스템을 사용하면 다양한 제어 방식 시나리오에 대해 다양한 액션 맵을 쉽게 설정하고 런타임에 간단한 API를 사용하여 플레이어 입력 컴포넌트별로 이를 전환할 수 있습니다:

playerInput.SwitchCurrentActionMap(stringForMapName);

UI와 상호 작용하기

UI와 상호작용하기 위한 액션 맵을 설정하고 나면 이벤트 시스템의 UI 입력 모듈에 액션을 할당할 수 있습니다:

제목

전사 프로젝트에서 각 플레이어는 게임을 일시 중지하고 일시 중지 메뉴와 상호작용할 수 있습니다. 오버레이 UI는 몇 가지 옵션 버튼과 오른쪽의 컨텍스트 변경 패널로 구성되어 있습니다. 입력 시스템 UI 입력 모듈은 인터랙터블이 활성화된 Unity UI 컴포넌트(예: 버튼 및 슬라이더)와 상호작용하는 데 할당된 동작을 적용합니다.

제목

이 UI 상호작용은 일시정지를 누른 특정 플레이어에 대해 격리됩니다. 예를 들어, 플레이어 3이 게임을 일시 중지하면 플레이어 1과 2는 상호작용할 수 없고 플레이어 3만이 게임을 제어할 수 있습니다. 플레이어 3이 게임을 일시 정지 해제하면 모든 플레이어 컨트롤이 다시 시작됩니다. 플레이어 입력 컴포넌트에서 다음 메서드를 호출하여 이를 수행합니다:

playerInput.ActivateInput();

playerInput.DeactivateInput();

런타임 리바인딩

UI 메뉴에는 런타임 리바인딩 컨트롤을 위한 컨텍스트 패널이 있습니다. 이를 통해 특정 입력 액션에 대해 대화형 리바인딩을 수행하고 새 입력 바인딩을 설정할 수 있습니다. 예를 들어 PlayStation 컨트롤러를 사용하는 경우 십자 버튼의 공격 동작을 삼각형이나 R2와 같은 다른 입력 버튼에 바인딩할 수 있습니다.

일시 중지된 애플리케이션의 이미지

이 리바인딩은 특정 플레이어 입력 컴포넌트에 대한 오버라이드로 적용됩니다. 예를 들어, 플레이어 2는 공격 버튼을 다른 버튼에 다시 바인딩할 수 있지만, 플레이어 3의 공격 입력 액션 사용에는 영향을 미치지 않습니다.

대화형 리바인딩을 설정하는 API에는 리바인딩이 완료된 시점에 대한 연산도 포함되어 있습니다. 이를 통해 UI를 업데이트하거나 게임 상태를 저장하거나 이 이벤트에 따라 다른 게임플레이 요소를 변경할 때 자신만의 컨트롤을 설정할 수 있습니다.

private InputActionRebindingExtensions.RebindingOperation rebindOperation;

    void StartInteractiveRebind()
    {
        rebindOperation = inputAction.PerformInteractiveRebinding().OnComplete(operation => RebindCompleted());
        rebindOperation.Start();
    }

    void RebindCompleted()
    {
        rebindOperation.Dispose();

        //Apply UI Changes (IE: New Binding Icon)
    }
입력 시스템 및 시네머신

워리어스 프로젝트는 입력 시스템과 이벤트 시스템 및 Unity UI의 통합 외에도 시네머신과 함께 작동하도록 설정하는 방법도 보여줍니다. 3인칭 게임의 일반적인 카메라 설정은 마우스 위치나 조이스틱을 누르는 방향에 따라 뷰 방향이 설정되는 궤도를 도는 팔로우 카메라가 있습니다. 시네머신 입력 프로바이더 컴포넌트를 시네머신 프리룩 카메라 릭에 추가하면 입력 액션을 통해 벡터 2 축 데이터를 시네머신의 축 제어 값으로 직접 전송할 수 있습니다. 아래 이미지에서 시네머신 입력 제공자가 보기 입력 액션의 입력 데이터를 사용하고 있는 것을 볼 수 있습니다.

샘플 프로젝트 이미지, 워리어스
입력 시스템 API: UI 예제를 통한 데이터 표시

입력 시스템에는 다른 시스템이 런타임에 데이터에 액세스하여 UI 또는 기타 시각적 요소에 표시할 수 있도록 다양한 API도 포함되어 있습니다. Warriors 예제 프로젝트는 플레이어 입력의 데이터를 사용하여 현재 플레이어 디바이스, 플레이어 입력 ID와 같은 정보를 표시하거나 현재 바인딩의 UI 기반 리바인드 컨트롤을 업데이트할 수도 있습니다. 디바이스와 바인딩 문자열을 가져와 특정 아이콘을 반환하는 사용자 지정 시스템을 만들었습니다.

예를 들어 플레이어가 Xbox 컨트롤러를 사용 중이고 공격 동작이 북쪽 컨텍스트 버튼에 바인딩되어 있는 경우 Y 버튼 아이콘이 표시됩니다. 그러나 플레이어가 키보드를 사용하는 경우 현재 바인딩된 키보드 키의 문자열을 표시합니다. 이 디바이스 디스플레이 구성기 도구를 추출하여 프로젝트에 사용할 수 있습니다.

샘플 프로젝트 이미지
입력 시스템 패키지 샘플 및 문서

입력 시스템 패키지에는 패키지 관리자에서 탐색할 수 있는 몇 가지 추가 샘플도 포함되어 있습니다. 이를 참조하여 자신의 프로젝트에 맞게 확장하거나 조정할 수 있습니다. 이 빠른 시작 가이드를 포함한 공식 문서도 여기에서 찾을 수 있습니다.

곧 이어집니다: 입력 시스템 1.1

입력 시스템 1.1은 현재 프리뷰 버전으로, 많은 수정 사항과 일부 개선 사항이 포함되어 있습니다. 이제 리바인드를 JSON으로 저장 및 로드할 수 있으며(RebindSaveLoad.cs 샘플 스크립트 참조), 장치 레이아웃을 미리 컴파일할 수 있어 이러한 장치의 인스턴스화 시간과 가비지 컬렉션(GC) 힙 비용을 크게 줄일 수 있습니다.

더 많은 콘텐츠를 찾고 계신가요? 알려주세요!

샘플 프로젝트와 다른 학습 자료가 입력 시스템을 사용하여 아이디어를 실현하는 데 도움이 되기를 바랍니다. 아래 댓글 섹션에 다음에 배우고 싶은 내용을 공유해 주세요. 또한 입력 시스템 페이지에서 더 많은 튜토리얼과 기타 리소스를 확인하세요.