バルテウスが倒せない
アーマードコア6購入以降、ゲーム制作のみならず全ての予定が滞っている怠惰な皆さんこんにちは。私は例のミサイル弾幕野郎バルテウスと10時間以上格闘しても倒せなくてほぼ詰み状態なのですが、それでも遊ぶ手を止められなくてコーラル中毒となっているようです。どうしよう。
本来なら週末は自作ゲーム「W.T.」(早期アクセス版)のアップデート作業を進めないといけないのですが、
その開発作業が現在テストフェーズで確認とバグ潰しという苦行という事もあり、モチベーションの上がらないゲーム開発よりもバルテウスの全方位ミサイル避け作業の方を優先させてしまっています。
この為、ブログ記事用の検証作業も滞っているので今回は非常に小さなネタ記事となっています。申し訳ない。
ゲームコントローラーの接続/切断
某個人開発者さんが旧Twitterにて「Steamのゲーム審査でリジェクトはされなかったけど『ゲームコントローラー切断時にゲームが一時停止しない』と注意を受けた。」との呟いておられたのを見て、ゲームコントローラーの接続/切断はなるべく検知して対処した方が良いというのを知りました。
ここら辺はInputSystemを使っている場合は、接続/切断それぞれでイベントが用意されているのでそちらを利用すれば何とかなりそうです。
しかしながらInputSystem以前のInputManagerを既に使用している場合は、この対応の為にInputSystemを導入するとInputManager周りの諸々の処理が使えなくなるという弊害がでるので自力で何とかするしかありません。
調べてみるとInputクラスのGetJoystickNamesで接続しているゲームコントローラーの名前(配列)を取得して、配列のLengthが減った場合は切断だと判定する方法がありました。
で、早速試してみたのですが上手くいかない。私の環境はXInput形式のコントローラーを無線で、PS5コントローラーを有線で接続しているのですが
有線で繋がっているPS5コントローラーを抜いてもGetJoystickNamesから取得できるゲームコントローラー名配列のLengthは変わらず、ゲームコントローラー名が空欄(空文字)となっているようでした。
なので、ゲームコントローラーの接続/切断の判定はGetJoystickNamesで取得した配列のLengthで判定するのではなく、その中の名前が空欄(空文字)かどうかで判定する必要があるようです。
名前で判定した結果
本来ならInputSystemへ移行すべきなんでしょうが、InputSystemを使えない暫定的な対応としてはこの方式で十分だと思います。