Steamworks 문서
개발자 입장에서 시작하기

개요


Steam Input API는 게임에서 Steam Input 장치의 '완벽 지원'을 더 쉽게 활성화할 수 있도록 설계되었습니다. 완벽 지원은 다음과 같이 정의됩니다.

  • 게임 내 입력 프롬프트를 표시할 때 게임에서 적절한 컨트롤러 전용 글리프를 사용합니다.
  • Steam Input 구성기 화면에서 키나 버튼을 사용하지 않고 게임에서 플레이어가 수행하는 게임 내 동작을 사용합니다.
  • 귀하가 지원하는 컨트롤러의 공식 구성을 공개했습니다.
  • 게임에서 사용자가 컨트롤러를 자유롭게 설정할 수 있습니다. 이는 마우스와 키보드, 게임 패드를 동시에 입력할 수 있는 것을 의미합니다.
  • 게임에서 키보드 입력이 필요할 때(아바타에 이름을 붙일 때 등) API를 호출하면 텍스트 입력 UI를 자동으로 불러옵니다.
  • 게임에 마우스나 키보드 입력을 요구하는 시작 관리자가 없습니다. 시작 관리자 자체가 없으면 더 좋습니다.

사용자에게 더 나은 게임 환경을 제공할 수 있도록 다음과 같은 사항을 권장합니다.

  • 약간 멀리서도 UI를 읽을 수 있게 합니다. 예를 들어, 게임이 1920 x 1080에서 실행될 때 글자 크기는 24px 이상이어야 합니다.
  • 사용자가 Steam Big Picture 모드를 실행할 때 전체 화면으로 게임이 실행되도록 기본 설정합니다('SteamTenfoot' 환경 변수가 설정됨).
  • 첫 실행 시 사용자의 화면 해상도를 감지하고 그에 맞게 해상도를 설정할 수 있으면 더욱 좋습니다.

일반적인 사용 사례

게임을 출시하기에 앞서 Steam Input API를 추가하려고 합니다.


훌륭합니다! Steam Input API 지원 사용하기에 있는 기술 지침을 따르세요.

다른 입력 라이브러리와 함께 Steam Input API 지원을 추가하려고 합니다.


전통적인 게임패드 입력과 함께 Steam Input을 추가하는 것은 문제가 없으며, 초기 출시 이후에 Steam Input API 지원을 추가하거나 여러 플랫폼을 통해 게임을 출시할 경우 이러한 상황이 발생할 수 있습니다. 이 경우 몇 가지 주의 사항이 있습니다.

1. 아날로그 동작 선택은 신중하게 하셔야 합니다.
이 주제와 관련된 자세한 사항은 추후 더 말씀드리겠지만 요약한 내용은 다음과 같습니다.
  • 커서나 정밀 카메라 조작을 위해서는 마우스 방식의 동작을 항상 포함해야 합니다. 방향 조준을 위해 조이스틱 위치를 사용하는 트윈 스틱 또는 스포츠 타이틀에서는 마우스 방식 입력을 사용하지 않아도 됩니다.
  • 특별히 필요하지 않은 이상 시스템 마우스('os_mouse' 옵션)를 사용하는 것은 피하세요. 실제 마우스로 입력할지 아니면 컨트롤러로 입력할지 정하는 것은 UX 작업의 중요한 부분입니다.
  • 감도(예: 입력되는 Steam Input 데이터를 거르지 않음)를 필요한 수준으로 제공하기 위해 구성기에 모두 의존하든지 아니면 시스템 마우스와 구분되는 Steam Input 전용 감도 옵션을 사용해야 합니다.

2. 조이스틱의 자동 조준이 일관성을 유지해야 합니다.
XInput 아날로그 스틱에 자동 조준 혹은 조준 어시스트가 있다면, 적어도 Steam Input을 통해 구성된 전통적인 컨트롤러 모델을 포함한 Steam Input 장치에 이를 적용하는 것을 고려해 보세요. GetInputTypeForHandle을 호출하여 각 컨트롤러의 모델 유형을 결정하거나 별도의 마우스 또는 조이스틱 방식의 카메라 동작을 적용할 수 있습니다.

3. 되도록 2.0.8 버전 이상의 SDL을 사용하세요.
입력과 같은 부분을 취급할 때 가장 많이 사용되는 교차 플랫폼 게임 라이브러리인 SDL(Simple DIrectMedia Layer)을 사용하는 경우, 최신 버전 또는, 적어도 2.0.8 버전 이상을 사용해야 합니다. 이 버전에서는 Steam이 SDL에 Steam Input에서 이미 구성된 컨트롤러에 대한 입력을 무시하도록 명령하여 이중 입력으로 인한 버그를 예방할 수 있습니다.

4. Xbox 컨트롤러 지원 계획을 준비하세요.
게임이 이미 출시되었고 XInput 지원을 유지하는 경우라면, 기본 설정으로 Xbox 컨트롤러를 XInput 경로에 두는 것이 좋습니다. 로컬 멀티플레이어 게임인 경우에는 두 개의 경로에서 입력을 동시에 수락할 수 있거나 Steam Input에 모든 컨트롤러를 설정할 수 있어야 합니다.

비 Steam Input API 게임을 Steam Input으로 문제없이 플레이하고 싶습니다.


우선 Zach Burke의 The Five Golden Rule of Input을 읽어보시기 바랍니다.

요약하면 다음과 같습니다.

  1. 가상 아이콘이 입력 장치와 매치되어야 합니다.
  2. 마우스 커서가 입력 장치와 매치되어야 합니다.
  3. 모든 장치가 언제나 100% 작동해야 합니다.
  4. 메뉴를 탐색할 때는 방향 패드, 아날로그 스틱, 마우스를 모두 사용할 수 있습니다.
  5. 게임패드 연결이 해제되면 게임이 일시 중지되어야 합니다.

이는 가능한 한 반드시 따라야 하는 일반 지침입니다. 여기에 몇 가지 내용을 추가하면,

게임패드와 마우스 입력은 동시 사용이 가능해야 합니다.

대부분의 게임은 마우스 입력이나 게임패드 입력이 가능하지만 두 가지를 동시에 사용할 수 없으며, 이는 Steam Input 시스템 호환성 문제의 가장 큰 원인이기도 합니다.

기타:

  1. 모든 컨트롤러 유형을 위한 권장 컨트롤러 구성을 설정합니다.
    이렇게 하면 Steam을 시작할 때 사용자에게 구성 선택을 요청하지 않습니다. 또한 Xbox 360과 Xbox One 컨트롤러의 구성을 모두 제공하지 않아도 됩니다. 둘 중 하나만 제공해도 다른 모델에 적용할 수 있습니다.
  2. 네이티브 지원이 없는 컨트롤러는 Steam Input 사용을 선택하세요.
    컨트롤러에 내장된 지원이 없는 경우에는 파트너 사이트에서 Steam Input을 사용하는 옵션을 선택해야 합니다. 자세한 정보는 이 섹션의 하단 부분을 참조하세요.
  3. 게임패드/마우스를 동시에 지원하지 않을 계획이라면
    최소한 조이스틱의 데드존, 가속, 감도 구성은 가능하게 하세요. 트랙패드에 대한 조이스틱 에뮬레이션은 가상 조이스틱을 빠르게 튕기면 작동하므로 이러한 설정에 꽤 민감한 편입니다. 감도를 높이고 데드존을 0으로 만들고 가속 곡선을 선형으로 설정하면 좋은 결과를 얻을 수 있습니다. Shadow of War의 컨트롤러 설정은 이에 관한 좋은 예시를 제공합니다.
  4. 사용자가 메뉴에서 Xbox 혹은 PS4 글리프 선택이 가능하도록 하거나, 저희 API를 통해 기기 종류를 감지할 수 있도록 해주세요.
    Steam에서 게임패드 입력을 전송할 때 사용자의 게임에서는 일반 장치가 아닌 Xbox 컨트롤러 입력으로 인식됩니다. 이 기능은 일반적으로 작동하지 않는 장치를 플레이어가 사용할 수 있도록 하기 때문에 유용하지만, 또한 USB 장치 ID 등에 대한 일반적인 검사가 작동하지 않기 때문에 Steam에서 도움 기능을 호출해야 합니다. 여기서 중요한 점은 사용자가 Steam Remote Play를 통해 게임을 스트리밍하고 있거나 Steam Input이 장치를 재구성하도록 설정했기 때문에, 지원이 내장된 귀사의 컨트롤러가 Steam Input을 통해 게임에 나타날 수도 있다는 사실입니다.

더 자세한 정보는 Steam 입력 게임패드 에뮬레이션 모범 사례 페이지를 참조해 주세요.

텍스트 입력


가상 텍스트 입력은 기술적으로 ISteamInput과 다르지만 ISteamUtils에서 찾아볼 수 있습니다.

간단한 참조:

Steam Input을 어떤 방법으로 사용하든 관계없이 유용하게 사용할 수 있습니다.

Steam Input API 지원 구현하기


구현 절차는 간단합니다. 단 며칠 동안의 작업으로 완성할 수 있습니다. 다음 네 단계로 이루어져 있습니다.

  1. 텍스트 편집기에서 플레이어가 컨트롤러에 지정할 수 있는 게임 내 동작을 Steam에 전달하는 게임 내 동작 파일을 생성하세요.
  2. Steam에서 Steam Input 구성기 UI를 사용하여 기본 구성기를 생성하세요.
  3. 게임에서 Steam Input API를 사용해 컨트롤러에서 전달되는 동작을 읽고, 표시해야 할 적절한 글리프를 가져오세요.
  4. 새 바이너리로 게임 디포를 업데이트하고 해당 구성을 공식 구성으로 공개하세요.

1단계 - 게임 내 동작 파일 만들기


먼저 게임 내 동작(IGA) 파일을 다운로드하세요. 파일을 '<Steam 설치 디렉터리>\controller_config' 디렉터리에 저장하세요. 해당 디렉터리가 없으면 새로 만드세요. 파일 이름을 'game_actions_X.vdf'로 바꾸세요. X에는 게임의 Steam AppID가 들어갑니다. 게임의 Steam AppID를 모르는 경우, Steam 파트너 사이트에서 로그인하면 찾을 수 있습니다.

이제 즐겨 쓰는 텍스트 편집기에서 게임 내 동작 파일을 여세요. 파일은 KeyValues라고 부르는 일반 Valve 형식으로 되어 있습니다. KeyValues는 읽기 쉽고 간편한 형식입니다. 게임 내 동작 파일 템플릿이나 Portal 2 IGA를 다운로드하여 참고하시면 도움이 될 수 있습니다.

더 자세한 정보는 게임 내 동작 파일 페이지를 참조해 주세요.

파일 형식


IGA 파일에는 게임에서 모든 게임 내 동작 세트(IGAS)를 목록화하는 'actions' 섹션이 있습니다. IGAS는 플레이어가 차량에 타고 있거나 도보로 이동하거나 메뉴 시스템을 둘러보고 있을 때와 같이 특정 게임 컨텍스트에서 플레이어가 취할 수 있는 모든 동작을 말합니다. Steam Controller 설정 UI는 각 IGAS에 대해 플레이어가 동작을 컨트롤러에 바인딩하는 방법을 개인 설정할 수 있는 탭을 제공합니다.

IGA 파일에서 IGAS 입력은 'title' 키와 값, 그리고 'StickPadGyro'와 'AnalogTrigger', 'Button'과 같은 하위 섹션을 포함해야 합니다. 'StickPadGyro'와 'AnalogTrigger' 섹션에는 오직 플레이어만 스틱, 패드, 자이로, 아날로그 트리거에 등록할 수 있는 IGA의 목록이 있습니다. ‘Button' 섹션에는 디지털 입력(물리적 ABXY 버튼, ABXY 모드 트랙 패드, 아날로그 트리거 동작으로 사용되지 않는 트리거 등)에만 바인딩할 수 있는 IGA가 있습니다.

IGA 설계하기

게임의 기능적인 측면을 생각해 보세요. 서로 다른 고유한 모드의 개수는 몇 개인가요? 고유한 컨트롤을 적용하고 싶은 위치마다 동작 세트를 생성할 수 있습니다. 대부분의 게임에는 최소 하나의 고유한 'Menu'와 'In-game' 동작 세트가 있으며 대다수는 그 이상을 필요로 합니다. 차량을 조작하는 것과 같은 특별한 경우를 포함하거나, 맵이나 보관함처럼 특수화된 게임 내 메뉴를 포함하는 게임이라면, 이에 대한 동작 세트를 생성하는 것이 좋습니다.

모든 것을 고유한 동작 세트로 만들 필요는 없습니다. 동작 세트 레이어를 이용해 유사한 모드들을 처리할 수도 있습니다. 예를 들어, 게임에서 자동차와 보트를 모두 운전할 수 있는 경우, '차량' 동작 세트를 하나 생성하고 '보트' 또는 '자동차'에 대한 동작 세트 레이어를 포함하면 됩니다. 동작 세트 레이어는 상위 동작 세트의 설정을 모두 유지하며, 개발팀과 사용자 모두가 설정을 더욱 쉽게 이해하고 관리할 수 있도록 돕습니다.

동작 세트 레이어에 대한 자세한 정보는 동작 세트 레이어 섹션을 참조해 주세요.

동작 개수 제한

현재 설정 가능한 아날로그 동작 개수는 최대 16개이며, 디지털 동작 개수는 최대 128개 입니다. 동작은 동작 세트 간 서로 공유할 수 있으므로, 대부분의 경우, 동작의 최대 개수 중 소수의 동작만을 필요로 합니다. 이러한 제약은 엄격하게 적용되지 않으므로 더 많은 동작이 필요한 경우에는 적절한 이유와 함께 저희에게 요청해 주시기 바랍니다.

Button 동작


'Button' 동작의 형식은 다음과 같습니다.

"<동작 이름>" "#<현지화 키>"

<동작 이름>은 컨트롤러 API와 통신할 때 게임 코드에서 해당 동작을 부르는 내부 이름입니다. <현지화 키>는 현지화 섹션에서 입력하는 이름입니다. '현지화 추가'를 참고해 주세요. 현지화 키 앞부분에 반드시 특수 문자 '#'을 넣어 주세요.

Analog Trigger 동작


'AnalogTrigger' 동작의 형식은 'Button' 동작의 형식과 같습니다. 'AnalogTrigger' 동작은 차량의 가속처럼 게임이 완전히 아날로그 입력으로 해석하는 동작이어야 합니다. 이런 종류의 입력이 없는 경우, 이 섹션은 비워 놓으세요. Steam Input 구성기 UI는 플레이어가 모든 'Button' 동작을 물리적 트리거에 바인딩하는 것을 허용합니다. 이는 플레이어가 'AnalogTrigger' 동작을 사용하고 있지 않은 경우에만 해당합니다.

StickPadGyro 동작


'StickPadGyro' 동작의 형식은 다음과 같습니다.

"<동작 이름>" { "title" "#<현지화 키>" "input_mode" "<아날로그 모드>" }

<동작 이름><현지화 키>는 'Button' 포맷의 연결 키와 동일합니다. <아날로그 모드>는 물리적 컨트롤로 입력된 데이터를 Steam Input API를 통해 게임으로 전달하기 전에 어떻게 해석해야 하는지 알려줍니다.

유효한 <아날로그 모드>는 다음과 같습니다.

  • 'absolute_mouse' - 동작이 마우스처럼 행동할 것으로 예상될 때. 1인칭 또는 3인칭에서 유용합니다. 실제 마우스 커서도 마찬가지입니다.
  • 'joystick_move' - 캐릭터를 움직이기 위해 동작을 사용 중일 때.

'absolute_mouse''joystick_move'

1인칭/3인칭 게임의 카메라 입력 혹은 모든 커서 입력을 통한 움직임을 생성할 때는 항상 'absolute_mouse' 유형의 동작을 포함해야합니다. 마우스일 경우에는 delta에 반응하는 것이 매우 중요하며 좋은 품질의 자이로 조준 및 트랙패드 입력 구현을 위해 1:1 데이터가 필요합니다. Steam Input은 게임패드에서 조이스틱 입력을 'absolute_mouse' 유형의 입력으로 변환할 수 있으나 게임 내 적용되는 가속 곡선과 데드존으로 인해 반대 방향으로는 변환할 수 없습니다.

콘솔 빌드에서 조이스틱 조준의 정확한 패리티를 위해 'joystick_move' 유형의 동작을 포함할 수 있습니다. 그러나 'absolute_mouse'와 'joystick_move' 두 가지 입력을 동시에 받을 수 있는지 테스트하여, PlayStation과 Switch 컨트롤러가 조이스틱과 함께 자이로 조준을 사용할 수 있도록 하세요. 또한 카메라 수직 위치를 다시 중앙에 맞추기 위해 '카메라 재설정' 디지털 동작을 구현할 수도 있습니다. XInput 컨트롤러에 자동 조준이 활성화되어 있다면, 동일한 논리를 Steam Input API를 통해 조이스틱 입력에 적용하고, 트랙패드 및 자이로 조준에 소량의 자동 조준을 적용하는 것이 좋습니다.

'absolute_mouse'를 입력으로 사용하는 StickPadGyro 동작용 설정 옵션은 한 가지입니다. 'os_mouse' 키를 '1'로 설정할 경우, Steam이 플레이어의 입력을 OS와 게임으로 전달합니다. 이는 동작으로 제어되는 OS 마우스 커서가 보이는 경우에 매우 유용합니다.

예시:

"menu_mouse" { "title" "#Menu_Mouse_Title" "input_mode" "absolute_mouse" "os_mouse" "1" }

경고

  1. 카메라 조작에 'os_mouse'를 사용하는 것은 절대 권장하지 않습니다. 게임의 특정 부분을 패치하기 어렵다면, 메뉴 및 게임 내 동작 세트에 사용되는 아날로그 동작을 분리하여 사용할 수 있다는 사실을 기억하시기 바랍니다.
  2. 'os_mouse'를 사용하면 컨트롤러 입력이 게임 내 마우스 감도에 의해 제어되며 싱글 로컬 플레이어에서만 사용할 수 있습니다.

1.1단계 - 현지화 추가하기


IGA 파일의 'localization' 섹션에는 언어 목록이 있습니다. 각 언어는 현지화 키와 현지화 값이 포함된 하나의 섹션을 가집니다.
예시:

"localization" { "english" { "Action_Jump" "Jump" "Action_Camera" "Camera" } "koreana" { "Action_Jump" "점프" "Action_Camera" "카메라" } }

이렇게 하면 IGA 파일의 동작이 원하는 현지화 키(특수 문자 '#'로 시작)를 참조하여 동작 이름을 지정합니다. 다음은 위에 나온 현지화 키를 사용한 예시 동작입니다.

"StickPadGyro" { "Camera" { "title" "#Action_Camera" "input_mode" "absolute_mouse" } } "Button" { "Jump" "#Action_Jump" }

게임 실행에 사용하는 언어를 현지화 섹션에서 찾을 수 없으면 대체 언어로 영어를 사용합니다. 영어를 찾을 수 없는 경우에는 해당 문자열이 있는 그대로 표시됩니다. 지원하는 언어에 대한 자세한 사항은 완전히 지원하는 언어에서 확인하세요.

1.2단계 - 제목 및 설명


컨트롤러 바인딩 구성도 제목과 설명을 현지화해야 합니다. 공식 구성을 하나만 만들면 이 부분은 걱정하지 않아도 됩니다. 기본 제목과 설명이 제공되므로 이 단계를 모두 건너뛸 수 있습니다. 공식 바인딩이 여러 개인 경우에는 각각 현지화된 제목과 설명을 제공해야 합니다.

컨트롤러 바인딩 구성 제목과 설명은 나머지 현지화 키와 함께 목록에 포함되어야 합니다. 제목 키는 반드시 'Title_'로 시작해야 하고, 설명 키는 반드시 'Description_'으로 시작해야 합니다.
예시:

"localization" { "koreana" { "Title_Config1" "공식 구성" "Description_Config1" "이 구성은 Game X 개발자가 제작했습니다." "Title_Config2" "공식 Southpaw 구성" "Description_Config2" "이 구성은 Game X 개발자가 제작했으며 Southpaw 사용자용으로 설정되었습니다." "Action_Jump" "점프" "Action_Camera" "카메라" } }

컨트롤러 구성을 공개할 때(4단계 - 공개 참고), 원하는 현지화 제목과 설명을 선택할 수 있습니다.

2단계 - 기본 구성 만들기


IGA 파일을 만들고 알맞은 디렉터리에 저장한 뒤 게임의 AppID에 맞게 이름을 붙이고 나면 이제 컨트롤러 구성을 만들 수 있습니다.

Big Picture 모드로 Steam을 실행한 뒤 해당 게임의 ‘게임 상세 정보’ 페이지로 이동하세요.

‘게임 관리'를 선택하고 '컨트롤러 구성'으로 가세요. 이 단계에서 오류를 수신하면 파일에서 문제를 식별하고 개발자가 개입하여 문제를 해결해야 합니다. 가장 흔한 실수는 닫는 따옴표나 중괄호를 빠뜨린 경우입니다.

오류를 수신하지 않았다면 빈 컨트롤러 구성이 준비되었고 게임 내 동작이 완벽하게 인식된다는 뜻입니다. UI를 사용해 기본 구성을 만듭니다. 첫 게임 내 동작 세트뿐 아니라 모든 게임 내 동작 세트에 대해 기본 구성을 만드는 것을 잊지 마세요.

구성을 만들면 먼저 비공개로 저장하세요. 게임이 IGA를 수신할 준비가 되지 않았으므로 아직 공개하면 안 됩니다.

3단계 - Steam Controller API


최신 버전 Steamworks API를 가지고 있는지 확인하세요. Steamworks 시작하기 페이지에서 다운로드할 수 있습니다.

Steam 입력은 컨트롤러에 대한 실행할 매핑을 결정하기 위해 앱별 매핑을 제공하고 있으며, Steam은 전경색 창을 추적합니다. 작업하는 동안 구성이 계속 바뀌면 디버깅하기가 까다롭습니다. 디버거에서 중단점을 정할 때 컨트롤러의 구성을 바꾸기 때문입니다. 디버깅을 위해 Steam을 창에 고정하는 방법에는 두 가지가 있습니다. 이 중 하나는 다음 Steam URL을 실행하는 것입니다.
steam://forceinputappid/<게임의 AppID 또는 0을 입력하여 정상 작동으로 재설정>

또 다른 방법은 다음 명령 줄 매개변수를 Steam 바로 가기에 추가하는 것입니다.
-forcecontrollerappid <게임의 AppID>

참고:

‘Steam 바로 가기’는 Steam 클라이언트 자체에 대한 바로 가기를 말합니다. 명령줄 매개변수는 게임이 아닌 Steam 클라이언트에 전달되어야 합니다.

공식 컨트롤러 글리프 렌더러 또는 PSD 소스를 다운로드하세요. 이는 원하는 소스를 시작점으로 사용하고 싶을 때에만 필요합니다. 그렇지 않으면 API를 사용하여 모든 컨트롤러 입력(이미지 파일은 Steam 클라이언트와 함께 출시됨)에 적절한 소스 파일의 경로를 가져올 수 있습니다.

3.1단계 - API 개요


Steam 입력 API는 게임 내 동작 및 동작 세트를 중심으로 설계되었습니다. 게임 내 동작 및 동작 세트는 1단계의 게임 내 동작 파일에서 지정합니다.

API에 대한 자세한 내용은 ISteamInput 인터페이스 문서를 참조하세요.

대략적인 기능은 다음과 같습니다.

안전한 인터페이스

컨트롤러 데이터는 ISteamInput::RunFrame이 호출되면 수집됩니다. 이는 SteamAPI_RunCallbacks에 의해 보통 프레임마다 완료됩니다. 하지만, 버전에 영향을 받지 않는 인터페이스를 활성화한 경우 올바른 폴링 데이터가 수집되지 않는다면 프레임마다 ISteamInput::RunFrame을 호출해야 합니다.

코드에 #define이 있는지 확인하여 버전 안전 인터페이스를 사용할 수 있는지 확인할 수 있습니다.
VERSION_SAFE_STEAM_API_INTERFACES

3.2단계 - 입력 처리


디지털 동작의 경우, ISteamInput::GetDigitalActionData 기능으로 반환되는 데이터는 간단합니다.

bState: 컨트롤러(버튼 누름, 트리거 당김 및 기타)에서 동작이 전달될 경우 true가 됩니다.

아날로그 동작의 경우, ISteamInput::GetAnalogActionData 기능으로 반환되는 데이터는 약간 복잡합니다.

x,y: IGA 파일에서 게임 동작으로 지정한 모드에 따릅니다. - 'absolute_mouse': x와 y는 기존 마우스 위치의 델타를 나타냅니다. - 'joystick_move': x와 y는 -1에서 1까지의 범위 값으로 현재 조이스틱의 위치를 나타냅니다.

코드 작성 시에는 사용자가 다른 종류의 입력을 동시에 사용하지 못하도록 막아야 합니다. 흔히 발견되는 실수는 게임이 마우스와 키보드를 인식하면 게임패드 입력을 무시하고, 게임패드를 인식하면 마우스와 키보드 입력을 무시하는 것입니다.

3.3단계 - 가상 글리프

Steam 컨트롤러의 가상 글리프 프롬프트를 표시하려면 게임 내 동작에 바인딩된 물리적인 원본이 있어야 합니다. 플레이어가 같은 동작에 바인딩한 물리적 원본은 여러 개일 수 있습니다. 따라서 UI가 각 원본을 전환하여 표시하도록 하는 것이 가장 좋습니다. ISteamInput::GetDigitalActionOriginsISteamInput::GetAnalogActionOrigins를 사용하면 특정 동작에 대한 원본 개수를 반환하고 originsOut 배열을 통과한 항목을 작성합니다.

각 원본에는 ISteamInput::EControllerActionOrigin 열거를 사용해 해당 이미지에 맞춰 원본을 다시 매핑할 수 있습니다. 원본 열거에 이 기능을 호출할 경우, Valve의 공식 이미지 세트(Steam 클라이언트 설치 폴더에 위치)에서 컨트롤러의 글리프에 해당하는 .png 또는 .svg 파일의 로컬 파일 경로를 반환합니다. 이 방법은 Steam Input에서 인식하는 모든 하드웨어 장치를 지원합니다. 그렇기 때문에 PlayStation 컨트롤러는 PlayStation 버튼이, Xbox 컨트롤러는 Xbox 버튼이 표시됩니다. 더 좋은 점은 차후 보장도 된다는 것입니다. Valve에서 새로운 하드웨어에 대한 지원을 추가하면 이 기능이 자동으로 최신 글리프를 가져오기 때문에 새로운 글리프 에셋을 게임에 직접 컴파일하지 않아도 됩니다.

보유하고 있는 이미지를 컨트롤러 글리프로 사용할 수도 있으나 Steam Input이 새로운 기기에 대한 지원을 계속해서 추가한다는 점을 감안하여 차후 보장 글리프를 준비하시길 권장하고 있으며, 글리프 이미지가 손상되었거나 비어있는 경우에만 게임에서 이미지가 올바르게 표시되지 않습니다. 이러한 경우에는 다음을 시도하세요.
  • 동작 원본을 인식하지 못하는 경우 ISteamInput::GetGlyphForActionOrigin 함수가 반환한 이미지를 사용하세요.
  • ISteamInput ::TranslateActionOrigin 함수를 호출하여 기존의 Steamworks SDK 버전에서 사용하던 글리브와 가장 유사한 글리프를 불러오세요(예: PS6 십자 버튼을 PS5 십자 버튼으로 대체).

지속적인 폴링

컨트롤러 구성은 사용자가 언제든지 바꿀 수 있습니다. 이와 관련한 도움을 드리기 위해 ISteamInput::GetDigitalActionOriginsISteamInput::GetAnalogActionOrigins 호출의 부담을 줄였습니다.

가상 프롬프트를 표시할 때 원본를 캐시하지 않고 첫 번째 결과를 계속 표시합니다. 대신 프레임마다 원본을 다시 수집해 알맞은 프롬프트를 표시할 것을 추천합니다. 이렇게 하면 사용자가 프롬프트를 보고 컨트롤러 구성을 바꾸더라도 구성 화면에서 돌아왔을 때 해당 프롬프트가 원본과 일치하도록 자동으로 업데이트됩니다.

4단계 - 공개


컨트롤러로 게임을 플레이할 수 있게 되면 이를 공개할 수 있습니다. 새로운 게임 업데이트를 출시하고 해당 구성을 공식 구성으로 지정해야 합니다. 공식 구성은 플레이어가 게임을 처음 실행할 때 자동으로 불러오게 됩니다. 따라서 사용자는 구성 화면으로 이동할 필요 없이 바로 게임을 실행하고 플레이할 수 있습니다.

다음은 권장하는 작업 절차입니다.

4.1단계 - 게임 업데이트

  • Steam 디포를 새 게임 버전으로 업데이트하세요.

4.2단계 - 컨트롤러 구성 공개

  • Big Picture 모드로 Steam을 실행한 뒤 컨트롤러 설정에서 만든 기본 구성으로 이동하세요.
  • (Y) 버튼을 누르거나 화면 맨 아래 'Save As' 버튼을 클릭하세요.
  • 팝업에서 원하는 현지화 제목과 설명을 선택하여 '공개' 프로필로 변경한 후 '공개' 버튼을 클릭하세요.
  • 확인 메시지 및 공개 구성의 파일 ID를 받게 됩니다. ID를 복사해 저장하세요.

4.3단계 - 구성을 공식 설정으로 지정하기

  • Steamworks 파트너 웹사이트에서 게임 페이지를 여세요.
  • 'Application' 탭에서 'Steam Input'을 선택하세요.

    steamworks_steam_input.png

  • 'Steam Input 템플릿' 섹션으로 스크롤하세요. 드롭다운 메뉴에서 '사용자 구성' 옵션을 선택하세요. (네이티브 지원을 추가할 계획이 없고 일반 레거시 모드 기본 설정에서 선택하려는 경우에는 다음을 통해 설정할 수 있습니다.)

    steamworks_steam_input_custom_config.png

    그리고 아래의 선택란에서 '사용자 구성 추가'를 선택하세요.

    steamworks_steam_controller_custom2.png

  • 공개 바인딩 설정의 파일 ID를 상자에 붙여 넣고 확인 버튼을 클릭하세요.

    steamworks_steam_controller_custom3.png

  • 파트너 사이트에서 평소와 같이 앱 변경 사항을 공개하세요.

원하는 경우, 게임의 공식 구성을 여러 개 지정할 수도 있습니다. 예를 들어 공식 왼손잡이 모드를 만들 수 있습니다.

먼저 4.2단계를 통해 구성을 여러 개 만들고 각각 공개합니다. 그리고, 4.3단계와 같이 구성의 ID 파일을 모두 상자에 붙여 넣되, ID 파일 사이에 쉼표를 넣습니다. 목록에 있는 첫 번째 ID의 우선순위가 가장 높으며 신규 플레이어에게 기본 구성으로 제시됩니다. 각 구성에 대한 제목 및 설명을 잊지 마세요.

공식 구성이 게시되면 '사용자 구성' 섹션에 나타납니다.

steamworks_steam_input_branch_settings.png

각 구성은 직접적인 링크를 가져올 수 있고 어떤 컨트롤 유형을 위한 것인지 확인, 어떤 베타 분기에 사용할 수 있는지 제어하거나 완전히 제거할 수 있습니다. 새로운 공식 구성을 생성할 때는 이 섹션의 구성을 제거/기능 추가에 사용하여 기존의 구성 대신 사용할 수 있습니다.

Steam Input에 컨트롤러 설정하기


다음으로, 어느 유형의 컨트롤러가 Steam Input을 사용할지 설정해야 합니다. Steam Input API를 사용하는 경우, '모든 차후 장치' 옵션을 선택하여 새 컨트롤러가 Steam에 지원된 후에 별도의 설정 변경 없이 새로운 컨트롤러가 기본으로 작동될 수 있도록 해야 합니다.

steamworks_steam_input_optin_settings.png

이 확인란을 선택하면 컨트롤러 유형이 기본 게임패드 입력 프로토콜을 사용하지 않고 Steam Input을 사용하게 됩니다.

공식 구성 업데이트하기

구성을 업데이트하는 데는 두 가지 방법이 있습니다.
  1. 중요한 변경이 필요한 경우(새로운 동작 세트 추가 및 제거 또는 추가 동작 바인딩), 지원하는 각 컨트롤러 유형의 구성을 업로드하고 이전 구성을 제거하시기 바랍니다. 또한 구성 설정 시 사용했던 계정으로 Steam Input 구성 브라우저로 가서 다음을 클릭하여 '삭제'로 표시하세요.

    steamworks_remove_community_config.png
  2. 동작 이름 현지화에 새 언어 추가 및 각 구성에서 매번 바인딩할 필요가 없는 선택적 동작 추가와 같이 선택적인 옵션을 변경하려면, 새로운 단일 구성을 업로드하고 '동작 블록 사용' 확인란을 이용하여 해당 구성의 동작 블록이 선택된 브랜치에서 우선적으로 사용되도록 해야 합니다.

전용 메뉴 동작

메뉴 컨트롤에 대한 게임 내 동작 세트는 메인 게임 세트에 있는 동작을 재활용하는 것보다 따로 만드는 것이 좋습니다. 대다수의 고객은 이 메뉴 컨트롤 설정을 수정할 필요가 없지만, 사용이 불편한 게이머의 경우 메뉴 컨트롤 설정을 수정해야 할 때 동작 세트를 따로 만들어 두면 작업을 쉽게 할 수 있습니다.

사용자 지정 아이콘

Steam Input 시스템은 여러 가지 형식의 가상 메뉴 만들기를 지원합니다. <기본 게임 디렉터리>/TouchMenuIcons/*.png에 고유 .png 아이콘을 저장하면 게임의 터치 메뉴나 원형 메뉴 목록에 이 그림이 표시됩니다. 따라서 게임 코드나 UI 코드를 사용하지 않아도 특정한 동작에 바인딩된 아이콘으로 고유한 가상 원형 메뉴 또는 터치 메뉴를 만들 수 있습니다. 기본 구성에 원형 메뉴나 터치 메뉴가 없더라도 개발자로서 이러한 기능을 사용하길 원할 수도 있을 것입니다. 사용자가 구성을 수정할 때도 이 기능을 사용하여, 게임의 공식 아이콘 아트를 가지고 테마별로 세련된 메뉴를 만들 수 있습니다.