コガネブログ

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

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

はじめに

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

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

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

追記

  • 2020/12/12 「JoyconLib」の導入方法が変わっていたため記事を修正しました

検証環境

  • Unity 2020.1.16f1
  • Windows 10

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

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

JoyconLib の入手

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

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

f:id:baba_s:20201212121225p:plain

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

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

f:id:baba_s:20201212121607p:plain

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

f:id:baba_s:20201212121612p:plain

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

f:id:baba_s:20201212121617p:plain

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

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

f:id:baba_s:20201212121621p:plain

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

f:id:baba_s:20201212121902p:plain

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

f:id:baba_s:20201212122121p:plain

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

f:id:baba_s:20201212122314p:plain

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

f:id:baba_s:20201212122345p:plain

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

f:id:baba_s:20201212122437p:plain

「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} に変わっています

f:id:baba_s:20201212122314p:plain

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

f:id:baba_s:20201212122833g:plain

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

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

f:id:baba_s:20201212125233p:plain

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

f:id:baba_s:20201212125238p:plain

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

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

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

f:id:baba_s:20201212130445p:plain

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

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

f:id:baba_s:20201212130954p:plain

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

f:id:baba_s:20201212131000p:plain

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

f:id:baba_s:20201212131018p:plain

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

f:id:baba_s:20201212131021p:plain

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

f:id:baba_s:20201212131025g:plain

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