【Unity】ゲームパットの接続/切断時に通知を出してあげる

f:id:coffee_ryo:20190203020248g:plain

概要

#StrangeTelephone を開発されている方のツイートを見て、ゲーム側でゲームパット接続の通知を出してあげることに良さみを感じました。
接続した際に、これがゲームで使えるかどうかを教えてあげるのはプレイヤーに対して優しいですね。
Nintendo SwitchなんかでもJoyConくっつけたら画面に表示されますし。

これについて、Unityで実装をしてみました。

確認環境

Unity2018.2.20f1 Personal

Input.GetJoystickNamesを使う方法

docs.unity3d.com

スクリプト
using UnityEngine;
using System.Linq;

/// <summary>
/// ゲームパット接続/切断 サンプルコード
/// </summary>
public class OutputLog : MonoBehaviour {
    string[] CacheJoystickNames;

    void Start () {
        CacheJoystickNames = Input.GetJoystickNames();
    }
    
    void Update () {
        var joystickNames = Input.GetJoystickNames();

        // ※同一フレーム中に接続/切断した時については未検証
        // ※複数のゲームパットでは動作未検証
        if(CacheJoystickNames.Length > joystickNames.Length){
            Debug.Log("切断" + CacheJoystickNames.Except(joystickNames).ToList()[0]);
        }

        if(CacheJoystickNames.Length < joystickNames.Length){
            Debug.Log("接続" + joystickNames.Except(CacheJoystickNames).ToList()[0]);
        }

        CacheJoystickNames = joystickNames;
    }
}
結果

f:id:coffee_ryo:20190203013004p:plain

ゲームパット接続/切断時を取得することができました。

Rewiredのイベントを使う方法

assetstore.unity.com

様々なゲームパットの対応を用意にしてくれるAssetのRewiredを使用している場合、
Rewired側がイベントの用意をしてくれているので、公式ドキュメントにならえば良いです。

guavaman.com

Receiving Joystick connect and disconnect events

その他

あとはuGUIやDotweenなどで画面を作ってあげたり、通知時にSEを鳴らしたりすれば良さそうです。

f:id:coffee_ryo:20190203020248g:plain