コガネブログ

平日更新を目標にUnityやC#、Visual Studioなどのゲーム開発アレコレを書いていきます

【Unity】Nintendo Switch の Joy-Con のジャイロ・加速度・傾きの値を取得したり、振動させたりすることができる「JoyconLib」紹介

はじめに

以前、上記の記事で
Unity で Nintendo Switch の Joy-Con を使用する方法を紹介させていただきました
こちらの方法は、特別なプラグインを使用することがないので設定は楽ですが、
ジャイロ・加速度・傾きの値を取得したり、振動させたりすることはできませんでした

こちらの「JoyconLib」を Unity プロジェクトに導入することで、
Joy-Con のジャイロ・加速度・傾きの値を取得したり、
振動させたりすることもできるようになります

検証環境

  • Unity 2017.1.1f1
  • Windows 10

Joy-Con を PC に接続する方法

こちらのページに記載しております

JoyconLib の導入方法

必要なファイルの入手

  1. 下記の URL にアクセスします
    https://github.com/Looking-Glass/JoyconLib
  2. 「Clone or download」ボタンを押して「Download ZIP」を選択します
  3. ダウンロードした「JoyconLib-master.zip」を展開しておきます
  4. 下記の URL にアクセスします
    https://github.com/Flafla2/Unity-Wiimote
  5. 「Clone or download」ボタンを押して「Download ZIP」を選択します
  6. ダウンロードした「Unity-Wiimote-master.zip」を展開しておきます

f:id:baba_s:20171111202141p:plain

以上で必要なファイルの準備が完了です

Unity プロジェクトへの導入

  1. 「JoyconLib」を導入したい Unity プロジェクトを準備します
  2. 「JoyconLib-master/Assets」フォルダ内の
    「JoyconLib_scripts」フォルダを Unity プロジェクトに追加します
  3. 「Unity-Wiimote-master/Assets/Wiimote/Plugins/win64」フォルダ内の
    「hidapi.dll」を Unity プロジェクトに追加します

f:id:baba_s:20171111201234p:plain

Unity プロジェクトに上記のようにファイルが追加できれば導入完了です

動作確認

まず、下記のスクリプトを「Example.cs」というファイル名で
Unity プロジェクトに追加します

f:id:baba_s:20171111201604p:plain

次に、シーンに空のゲームオブジェクトを作成して、
「JoyconManager.cs」と「Example.cs」をアタッチします

f:id:baba_s:20171111201824p:plain

そして、Unity を再生すると、下記の画面が表示されて、
Joy-Con の押しているボタンや、スティックや
ジャイロ・加速度・傾きの値が確認できます

f:id:baba_s:20171111200124p:plain

JoyconLib の使い方

var joycons = JoyconManager.Instance.j;
var joyconL = m_joycons.Find( c =>  c.isLeft ); // Joy-Con (L)
var joyconR = m_joycons.Find( c => !c.isLeft ); // Joy-Con (R)

上記のようなコードで、Joy-Con の情報を管理するインスタンスを取得できます

if ( joyconL.GetButton( Joycon.Button.DPAD_RIGHT ) )
{
    // 右ボタンが押されている
}
if ( joyconL.GetButtonDown( Joycon.Button.DPAD_RIGHT ) )
{
    // 右ボタンが押された
}
if ( joyconL.GetButtonUp( Joycon.Button.DPAD_RIGHT ) )
{
    // 右ボタンが離された
}

上記のようなコードで Joy-Con のボタンが押されているかどうかを判定できます

var stick       = joyconL.GetStick();  // スティック
var gyro        = joyconL.GetGyro();   // ジャイロ
var accel       = joyconL.GetAccel();  // 加速度
var orientation = joyconL.GetVector(); // 傾き

上記のようなコードで Joy-Con の
スティック・ジャイロ・加速度・傾きの値を取得できます

joyconL.SetRumble( 160, 320, 0.6f, 200 ); // 振動

上記のようなコードで Joy-Con を振動させることができます

以上が「JoyconLib」の基本的な使い方の紹介になります

その他

「JoyconLib」の調査中に詰まったことを備忘録として書き残しておきます

  • GitHub で公開されている「JoyconLib」に含まれている
    「hidapi.dll」を使おうとしたら、下記のエラーが発生した
Failed to load 'Assets/Plugins/win64/hidapi.dll', expected x64 architecture, but was Unknown architecture. You must recompile your plugin for x64 architecture.
  • 「JoyconLib」を導入した Unity プロジェクトの「Scripting Runtime Version」を
    「Experimental (.NET 4.6 Equivalent)」に変更してゲームを開始したら、
    下記のエラーが発生した
FormatException: Input string was not in a correct format.
System.Globalization.TimeSpanFormat.Format (System.TimeSpan value, System.String format, System.IFormatProvider formatProvider) (at /Users/builduser/buildslave/mono/build/mcs/class/referencesource/mscorlib/system/globalization/timespanformat.cs:60)
System.TimeSpan.ToString (System.String format, System.IFormatProvider formatProvider) (at /Users/builduser/buildslave/mono/build/mcs/class/referencesource/mscorlib/system/timespan.cs:335)
System.Text.StringBuilder.AppendFormatHelper (System.IFormatProvider provider, System.String format, System.ParamsArray args) (at /Users/builduser/buildslave/mono/build/mcs/class/referencesource/mscorlib/system/text/stringbuilder.cs:1466)
System.String.FormatHelper (System.IFormatProvider provider, System.String format, System.ParamsArray args) (at /Users/builduser/buildslave/mono/build/mcs/class/referencesource/mscorlib/system/string.cs:2978)
System.String.Format (System.String format, System.Object[] args) (at /Users/builduser/buildslave/mono/build/mcs/class/referencesource/mscorlib/system/string.cs:2943)
Joycon.Update () (at Assets/JoyconLib_scripts/Joycon.cs:365)
JoyconManager.Update () (at Assets/JoyconLib_scripts/JoyconManager.cs:93)

関連記事