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

2021年12月23日(更新: 2022年5月5日)

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 クライアントでの設定は完了です。

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

この手順は後述する「カスタム設定(ゲームにバンドル)」を使用する場合に必要です。「カスタム設定(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ワークショップでホスト)の場合

こちらを使用する場合、アクションマニフェストファイルを作成する必要はなく、キーバインドのURLをSteamクライアントから取得します。

公式設定としたいキーバインドを選択状態にすると、画面下部に設定を共有するボタンが現れます。

コントローラー設定を共有するためのオプション

これによってキーバインドのURLをクリップボードにコピーできますので、Steamworksの管理画面の「カスタム設定を追加」でそれをペーストします。

SteamInputのキーバインドをクリップボードにコピー

Steamワークショップでキーバインドを設定

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”に対応させる方法についてでした。

Unity の Input System との共存

Unityでゲームを制作している場合、すでに入力システムとして Input System を使用していると思います。

Steam Input と競合してしまうのではないかと思ったのですが、Steamクライアントの設定で Steam Input を有効にしているとゲームパッドによる操作は完全に Steam Input の入力の方が優先されます。

一方でキーボードやマウスによる操作は Input System の設定がそのまま入力として使用できるため、既に設定していた Input System を取り除く必要はありません。

Steam Input を使用すれば、Input System ではゲームパッド用キーコンフィグを作らなくて済むので作業量を減らすことができます。

作ったキーバインドが読み込まれないトラブル

上記の設定を終えて、実際に作ったキーバインドをコントローラーに適用しようとした時、何度選択しても反映されずにボタン割り当てが空のままになるトラブルがありました。

SteamInputのキーバインドを適用するボタン
SteamInputの設定が読み込まれず空のままのコントローラー

不具合かと思い Steam のサポートに問い合わせたところ「Steam/controller_config フォルダのIGAファイル(.vdf)を削除してみて」という返信をいただきました。

実際に削除したところ、キーバインドの読み込みが正常に行われました。

以前のバージョンのSteamクライアントでは問題なく読み込まれていたと思うのですが、アップデートで挙動が変わったのかも知れません。

おしまい

2022年1月31日に Steam にてゲーム「マリモ -VS- 外来種」をリリースしました。よろしくお願いいたします。

参考

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

コメントを残す

メールアドレスが公開されることはありません。