SteamInputでゲームをコントローラ操作とキーコンフィグに対応

2021年12月23日

Steam には”Steam Input”(Steam入力)と呼ばれる仕組みがあります。

これはSteamで販売されるゲームが、接続された様々な種類のゲームコントローラからの入力を、それらの種類に関わらず同じように認識し、ユーザーが遊びやすいようにキーバインドを変更できる機能などを提供するものです。

コントローラサポートに対応しているゲームには、そのアイコンにコントローラのマークが表示されます。

SteamInputに対応したゲームのアイコン表示

この記事では、作成したゲームをSteamInputに対応させる手順について紹介します。

前提条件

Steamゲームの開発者向けポータルサイトである Steamworks にアカウントとゲームを登録済みである状態にしてください。

ゲーム内で発生する入力を定義

ゲーム内ではプレイヤーの「移動」や「攻撃」、「メニューの操作」といった色々なアクションがあります。

SteamInputでは、ゲーム内で起こるこれら全てのアクションに名前をつけてゲーム内アクションファイルIn-Game Actions File: IGA)に記述します。

以下は実際に作ったIGAファイルの例です。ファイル形式は .vdf です。

game_actions_1820640.vdf

"In Game Actions"
{
	"actions"
	{
		"InGameControls"
		{
			"title" "#Set_Ingame"
			"StickPadGyro"
			{
				"Move"
				{
					"title" "#Action_Move"
					"input_mode" "joystick_move"
				}
			}
			"AnalogTrigger"
			{
			}
			"Button"
			{
				"Lock" "#Action_Lock"
				"Fire" "#Action_Shot"
				"Skip" "#Action_Skip"
				"Pause" "#Action_Pause"
			}
		}
		"MenuControls"
		{
			"title" "#Set_Menu"
			"StickPadGyro"
			{
			}
			"AnalogTrigger"
			{
			}
			"Button"
			{
				"Up" "#Menu_Up"
				"Down" "#Menu_Down"
				"Left" "#Menu_Left"
				"Right" "#Menu_Right"
				"Select" "#Menu_Select"
				"Cancel" "#Menu_Cancel"
			}
		}
	}
	"localization"
	{
		"english"
		{
			"Set_Ingame" "In-Game Controls"
			"Set_Menu" "Menu Controls"
			"Action_Move" "Movement"
			"Action_Lock" "Lock Mode"
			"Action_Shot" "Shot/Charge"
			"Action_Skip" "Skip"
			"Action_Pause" "Pause"
			"Menu_Up" "Up"
			"Menu_Down" "Down"
			"Menu_Left" "Left"
			"Menu_Right" "Right"
			"Menu_Select" "Select"
			"Menu_Cancel" "Cancel"
		}
		"japanese"
		{
			"Set_Ingame" "プレイヤー操作"
			"Set_Menu" "メニュー操作"
			"Action_Move" "移動"
			"Action_Lock" "ロックモード"
			"Action_Shot" "ショット/チャージ"
			"Action_Skip" "スキップ"
			"Action_Pause" "ポーズ"
			"Menu_Up" "上"
			"Menu_Down" "下"
			"Menu_Left" "左"
			"Menu_Right" "右"
			"Menu_Select" "選択"
			"Menu_Cancel" "キャンセル"
		}
	}
}

IGAファイルの中身についてざっくり説明します。

アクションセット

「InGameControls」「MenuControls」の2つはアクションセットと呼ばれ、場面ごとのアクションをまとめるセクションです。

この例では「タイトル画面のメニュー」と「キャラクターが行動するゲームシーン」では操作が異なるため別のアクションセットとしています。アクションセット内に「移動」「攻撃」などの各アクションを定義します。

アクション

「Fire」「Skip」などがアクションの名前で、表示名は各言語にローカライズすることができます。「#」から始まる文字列が localization で指定した言語にローカライズされます。

これら個々のアクションを後にコントローラの各キーに割り当てることになります。表示をローカライズしておくと、各国のユーザーが自分で割当を変更したい時に便利になります。

アクションをキーに割り当てた例

詳しい書き方については以下のドキュメントを御覧ください。IGAファイルのテンプレートも用意されています。

ゲーム内アクション(IGA)ファイル (Steamworks ドキュメント)

しかし、このIGAファイルを書いただけではSteamは認識してくれません。Steam にてIGAファイルを元にした実際のキーバインドを作成する必要があります。

Steamでゲームの公式キーバインドを作る

キーバインドを作っていきましょう。

以下の操作はWindowsで行います。公式ドキュメントにmacOSで行うための説明がないためです。

IGAファイルの配置

まず、Steamをインストールしたパスを表示します。デフォルトであれば C:\ProgramFiles(x86) にあるはずです。

そこに「controller_config」という名前のフォルダを作成してください。

SteamInput用カスタムキーバインドを保存するパス1

controller_configフォルダ内に先程作成したIGAファイル(.vdf)を置き、ファイル名を「game_actions_<番号>.vdf」とします。<番号>は対象となるゲームのAppIDで置き換えて下さい。

SteamInput用カスタムキーバインドを保存するパス2

ファイルの配置が済んだら、PCにコントローラを接続して Steam を起動します。

(ちなみにmacOSでは、同じようにSteamがインストールされたフォルダにcontroller_configを作成してIGAを保存しても認識されませんでした)

キーバインドの作成

Steam をビッグピクチャーモード(コントローラ操作向け画面)に変更し、ライブラリから設定を行いたい自分のゲームを選択し、「ゲームを管理」から「コントローラ設定」を開きます。

IGAファイルに誤りがなければ、空のキーコンフィグ画面が開きます。

各キーにIGAファイルで定義したアクションが選択できるようになっているはずですので、公式設定としたいキーバインドを作成します。

SteamInputでIGAファイルを読み込んで作成した公式キーバインド

このようにキーにアクションを配置し終えたら、画面下部の「設定をエクスポート」を選択します。

製作者は後から変更できますので気にしなくて大丈夫です。

SteamInputのキーコンフィグをエクスポート

このような画面が開きますので、「新しいテンプレートバインドを保存」を選択します。

SteamInputで使うキーバインドの名前と説明

名前と説明を書いて保存します。これらも後から変更可能です。

保存されたキーバインド

無事に保存されると、このようにキーバインドの一覧に追加されます。

同様に、色々な種類のコントローラにそれぞれ対応するキーバインドを作成すると良いでしょう。

公式では Xbox と Steam のコントローラの二種類に公式キーバインドを作ることを推奨しています。その他のコントローラの設定はこれらの設定から自動的に変換されるそうです。

実際”Xbox 360″用のキーバインドを作成したところ、”Xbox One”および”Nintendo Switch”のコントローラのキーバインドは自動的に作られていました。

必要なキーバインドが設定できたら Steam での設定は完了です。

キーバインドをエクスポート

先程作成したキーバインド設定を .vdf 形式のファイルでエクスポートします。

Windowsのコマンドプロンプトを起動し、以下のコマンドを実行します。

start steam://dumpcontrollerconfig?appid=<番号>

<番号>は対象となるゲームのAppIDで置き換えて下さい。

設定したキーバインドを出力するコマンド

このコマンドによって、ドキュメントフォルダ(MyDocuments)に設定したコントローラの分だけファイルが作成されているはずです。

例えば、Xbox360用キーバインドは以下のようなファイル名で出力されます。

config_1820640_controller_xbox360.vdf

キーバインドの名称や説明、製作者などを変更するには、このファイルをエディタで開いて該当する箇所を書き換えます。

キーバインドの説明書き換え例

IGAファイルをアクションマニフェストに変換

複数種類のコントローラに対応するキーバインドをまとめるにはアクションマニフェストファイルを作成します。

アクションマニフェストファイルはIGAファイルと同様に以下のような .vdf 形式です。

steam_input_manifest.vdf

"Action Manifest"
{
	"configurations"
	{
		"controller_xbox360"
		{
			"0"
			{
				"path" "config_1820640_controller_xbox360.vdf"
			}

		}
		"controller_steamcontroller_gordon"
		{
			"0"
			{
				"path" "config_1820640_controller_steam.vdf"
			}

		}
	}
	"actions"
	{
	}
	"localization"
	{
	}
}

先程出力した各キーバインドのファイルが対応するコントローラの設定となるようにします。

これを別ファイル(steam_input_manifest.vdf)として保存します。IGAファイルをフォルダに分けて保存する場合はパスに注意して下さい。

アクションマニフェストファイルの詳細は以下のページを御覧ください。

アクションマニフェストファイル (Steamworks ドキュメント)

Steamworksでの設定

アップロードするゲームの実行ファイル(.exe または .app)と同じパスに、先程作成したアクションマニフェストファイル(steam_input_manifest.vdf)と、それによって読み込まれるキーバインドの設定(config_1820640_controller_xbox360.vdfなど)を保存します。

そして Steamworks にログインして アプリとパッケージ > Steam入力デフォルト設定 を「カスタム設定(ゲームにバンドル)」として、アクションマニフェストファイルを読み込むようにパス指定します。

SteamworksでSteamInputの設定

アクションマニフェストファイルやキーバインド設定ファイルをフォルダに分けて保存する際はパス指定に気をつけて下さい。

以上が完了したら設定の変更を公開し、デポをビルドして Steam でゲームをアップデートして下さい。

ゲームのコントローラ設定から、自作したキーバインドが公式推奨設定として表示されたら完了です。

自作したSteamInputの推奨キー設定

Steam入力APIによる処理の実装

以上の設定が完了したら、実際にSteamInputからの入力による操作を行うためのプログラムを書きます。

ここでは詳しい実装方法については割愛させていただきます。Steam入力APIの公式ドキュメントはこちらです。

ISteamInput Interface (Steamworks ドキュメント)

Unity の場合 Steamworks.NET を使用するため C# で記述することになりますのでドキュメントと微妙に違いますが、以下のリポジトリのサンプルが Unity で実装する際の参考になると思います。

Steamworks.NET-Test/SteamInputTest.cs at master · rlabrecque/Steamworks.NET-Test · GitHub

以上、Steamのゲームを”Steam Input”に対応させる方法についてでした。

おしまい

2022年初頭に Steam にゲーム「マリモ -VS- 外来種」をリリースする予定です。よろしくお願いいたします。

参考

開発者のための入門 (Steamworks ドキュメント)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です