コガネブログ

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

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

はじめに

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

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

この記事では「JoyconLib」を Unity プロジェクトに導入して
Joy-Con を使用できるようにする手順を紹介していきます

追記

  • 2020/12/12 「JoyconLib」の導入方法が変わっていたため記事を修正しました
  • 2022/6/5 Unity 2021 で動作することを確認しました

検証環境

  • Unity 2021.3.1f1
  • Windows 10
  • Mono2x ビルド、IL2CPP ビルド

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

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

JoyconLib の入手

https://github.com/Looking-Glass/JoyconLib/releases

上記のページにアクセスして

「JoyconLib06.unitypackage」を選択して「JoyconLib06.unitypackage」をダウンロードします

JoyconLib を Unity プロジェクトに導入

ダウンロードした「JoyconLib06.unitypackage」を
Unity の Project ウィンドウにドラッグします

Import Unity Package ウィンドウが表示されたら「Import」を押します

Unity の Project ウィンドウに上記のようにファイルが追加されていれば導入完了です

JoyconLib のサンプルシーンで動作確認

「Scenes」フォルダ内の「Scene1」を開きます

Unity のバージョンによっては上記のエラーが出力されます
(古い機能が現在のシーンのカメラで使用されているという旨のエラーです)

エラーが出る場合は「Main Camera」を選択して「Flare Layer」を右クリックして
「Remove Component」を押して「Flare Layer」を消しておきます

この状態で Unity を再生します

すると、まだ別のエラーが大量に出る状態なのでこれを直していきます

「Joycon」スクリプトをダブルクリックして Visual Studio などのコードエディタで開きます

DebugPrint(string.Format("Dequeue. Queue length: {0:d}. Packet ID: {1:X2}. Timestamp: {2:X2}. Lag to dequeue: {3:s}. Lag between packets (expect 15ms): {4:s}",

370 行目の上記のコードを

DebugPrint(string.Format("Dequeue. Queue length: {0:d}. Packet ID: {1:X2}. Timestamp: {2:X2}. Lag to dequeue: {3:t}. Lag between packets (expect 15ms): {4:g}",

このコードに書き換えます

  • {3:s}{3:t} に変わっています
  • {4:s}{4:g} に変わっています

この状態で Unity に戻って再生します

これで Joy-Con が正常に動作するかどうかを確認できます

  • Joy-Con の傾きに合わせてキューブが回転します
  • B ボタンや▼ボタンを押すと Joy-Con が振動します
  • Xボタンや▲ボタンを押している間、キューブが赤色になります

もしも Unity を再生しても Game ウィンドウにキューブが表示されず、

Console ウィンドウに「No Joy-Cons found!」と表示されている場合は
PC に Joy-Con が接続できていないため、接続を確認してみてください

Joy-Con の情報を取得する方法

JoyconLib のサンプルシーンで動作確認ができたので、
実際に JoyconLib を使用して Joy-Con の情報を取得してみます

Unity メニューの「File > New Scene」を押して新規のシーンを作成します

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

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

これで Unity を再生すると Joy-Con の情報が画面に出力されます

文字が見切れている場合は Game ウィンドウのアスペクト比を
「Free Aspect」などに変更して画面の表示範囲を大きくします

白い文字が見づらい場合はカメラの「Clear Flags」を
「Solid Color」に変えて背景色を濃くします

これで Joy-Con の押しているボタンや、スティックの情報や
ジャイロ・加速度・傾きの値が確認できます

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」の基本的な使い方の紹介になります

検証プロジェクト