いんでぃーづ

ゲームいろいろ、いろいろ自由

Unity : SteamInput でゲームパッド全種対応

Steamには SteamInput というゲームパッド用の仕組みがあり、Xbox用コントローラやPS4用など、メジャーどころのゲームパッドをユーザになんの設定もなく使ってもらえる。
「なんだ最高じゃんこれヤッホー」と準備中のゲームに使おうと思ったら想像以上にハマったハマった。
数日試行錯誤の甲斐あって一応導入できそう

SteamAPI用のサードパーティライブラリ導入

SteamInputの利用にはSteamSDKの導入が必要であり、SDKUnity用を提供していないと公式に バッテンついてます。

Steamworks API Overview (Steamworks Documentation)

ページ下部の Engines 参照。
ここにUnityに導入するためのサードパーティ製ライブラリのリンクが貼ってある。

二つ紹介されているが、メジャーなのは Steamworks.NET のほうっぽい。というかもう一方のほうはSteamInput対応してない?

Steamworks.NET - Steamworks.NET

導入手順は割愛。

2019/6/6 現在、SteamSDK1.43に対応して更新が止まっているように見えるがSteamInputもちゃんと使える。

アプリケーションのビルドをSteamにアップロードする

Steamからアプリケーションを起動できるようにしておく必要があるので、アプリのビルド、アップロードまでやる。

ルートディレクトリに自分のAppIDが書いてある steam_appid.txt を入れるのを忘れずに。

VDFファイルを作成

SteamInputでは アクションセットアクション という単位で入力を受け取る。

アクションとは「ジャンプ」「キャンセル」などのゲーム内で受け取りたい入力のこと。
入力に使うコントローラがXboxだろうがPS4だろうが、 Steam側で変換して通知してくれるので、どの物理ボタンを押されたかは気にしなくていいという機能。
アクションセットはアクションの集合で、ゲーム画面、メニュー画面などで別々のアクションを定義し、切り替えて使うためのもの。

そのアクションを定義するのが in-game actions (IGA) (ゲーム内アクション)ファイル 、拡張子 vdf のJSONファイルだ。

定義方法は割愛。マニュアル見れ。

Getting Started for Developers (Steamworks Documentation)

VDFファイルをローカルフォルダに入れる

Windows利用前提Macは対象フォルダがわからない...

Steam本体をインストールしたフォルダに controller_config フォルダを新しく作成し、vdfファイルを配置する。
vdfファイル名は game_actions_X.vdf (XにはAppID) とする。

この状態でSteam本体を起動し、コントローラを接続。
Big Pictureモード にする。

ゲームを選択して ゲームを管理 から コントローラ設定 を選択。

f:id:sugar_affordance:20190609111852p:plain

接続されているコントローラが見える。

そしてVDFファイルに定義したアクションがこの時点でパッドに設定されているので、ちゃんと意図したボタンにアクションが割り当てられているか確認する。

f:id:sugar_affordance:20190609111911p:plain

設定をエクスポート

ハマったところその1

Steamアプリから上画像下部の「設定をエクスポート」ボタンをクリック。 新しい個人バインドを保存 する。

f:id:sugar_affordance:20190609112741p:plain

すると「設定を共有」ボタンが見えるようになるので、このボタンをクリック。

f:id:sugar_affordance:20190609112317p:plain

「設定を共有」ボタンが表示される条件が非常にわかりづらいが、一度「設定を閲覧」を選択してから個人設定リストを表示させ、エスクポートしたい設定に マウスオーバーする ことで下部にボタンが表示される。なんでこんな操作なんだ...

クリックするとリンクがコピーされた旨のダイアログが表示されるはず。

SteamWorks で設定

ここでSteamアプリを抜け、ブラウザを起動してSteamWorksに移動する。

アプリケーションの設定メニューで
アプリケーション > Steam入力
と選択してリストから カスタム設定 を選択して、Steamで共有ボタンからコピーしたURLをペーストする。

まあここは公式のページを参考にしてくだしあ。

Getting Started for Developers (Steamworks Documentation) ステップ 4 - 公開

ゲームパッドごとに割り当てたい物理ボタンが違う場合、ゲームパッドごとに設定を作りましょう。
特にXboxコンは下のボタンがAになっているので。

ゲームで入力を受け取る実装

Steamworks.net の SteamInputクラス を使って実装する。
同じようなクラスに SteamController クラスがあるが、こちらはdeplicateでSteamInputクラスに移行するということらしい。これはSteamSDKのほうでそうなっているので素直に従う。
実装は割愛。

ハマったところその2

注意したいのは ゲームが起動してすぐコントローラ接続を検出できるわけではない ことで、
ポーリングで数秒間はコントローラ接続されていないかチェックを走らせる必用がある。

ゲームを動かして入力を受け取る

ハマったところその3

Steamからゲームを起動しないとアクションが受け取れない 状態だった。たぶんSteamOverlayの関係(?)
つまりSteamInputのテストするにはビルドしてSteamにアップロードしなければならない。。。ウーム


すぐ終わるかと思ったら近年まれにみるシンドさであった。

あ、SteamInputに対応した新作ゲーム Crazy Beat's Junction 、Steamで準備中です。

store.steampowered.com


“Unity” and Unity logos are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere, and are used under license.


免責事項

当サイトの広告バナー、リンクによって提供される情報、サービス内容について、当サイトは一切の責任を負いません。

また、当サイトの情報を元にユーザ様が不利益を被った場合にも、当サイトは一切の責任を負いません。

すべて自己責任でお願いします。