ブログ SUNM Tech & Business Blog

⌚ 2021/2/ 1 (Mon) 🔄 2024/3/20 (Wed)

Nintendo SwitchのJoy-conをトラッカーにしたい

Nintendo SwitchのJoy-conをトラッカーにしたい
開発

前置き

どうも、去年の6月ごろからVRに興味を持ち、Oculus Rift Sを購入し、
色々楽しんでます、konne(コンネ)です。

ということで、その方向性で何かいいネタは無いかと探していたところ、
いい感じのネタを見つけました。

リングフィットアドベンチャーの道具でグーグルストリートビューを歩き回る【Unity+GoogleMapsJavaScriptAPI

ただ、これはなかなか難しそう・・・。

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

これは・・・!
これなら・・・!

というかSwitchは買って少し遊んだ後、かなりの間放置していたのでちょうど良かった。
Unityを触ったことはありますが、C#でスクリプトを書くのは初めてなのでやってみた!系です。

Nintendo SwitchのJoy-conはどうやらBluetoothで接続されているようで、
更にPCにもつなげることができるそう。

ゲームパッドとして認識してるので、Unityでしようすることも可能!
記事は2017年のものなので、もっと早くに試したかった!
あわよくばVRトラッカーとして再利用したい・・・。

まずはPCとBluetooth接続

結構電波が弱いみたいで、僕は距離が遠くてなかなか認識してくれませんでした。
本体(画面)と接続する面の、真ん中の小さい丸ボタンがSyncButtonのようです。

    画像1.jpg

ここを長押しすると隣の4つのランプが反復横跳びを始めますので、PCで探索します。

    「Joy-con (R)」
    画像2.jpg

    「Joy-con (L)」
    画像3.jpg

    画像4.jpg
    これが出来ればゲームパッドとして認識しますので、あとはどうとでもなります。

必要なものをダウンロード

    上記ブログで詳しいことは書いてますので割愛しますが、以下のファイルをダウンロードします。
    ・JoyconLib
    ・Unity-Wiimote

Unityプロジェクトに導入

「JoyconLib-master/Assets/JoyconLib_scripts」フォルダと
「Unity-Wiimote-master/Assets/Wiimote/Plugins/win64」フォルダ内の「hidapi.dll」を
Unityプロジェクトにコピーします。

恐らく、フォルダ構成は適当でもいいと思います。よしなに。

    画像5.jpg

UnityプロジェクトのInput設定に追加

メニューバーの「Edit」から、「Project Setting」、「Input」と選択して、
InputManagerを開きます。
「Input」タブの「Axes」を開くとリストが出てくるので、「size」の値を+1します。

    すると一番下の設定が、コピーして追加されるので以下の設定に変更してください。

    1つずつ、もしくはまとめて追加して、更に以下の設定を行います。

    ちなみに僕は、間違えて「Invert」を全てTrueにしてしまっていました。

確認用のC#Script作成

    こちらは元記事からほぼそのままいただいています。
    ファイル名:Example.cs
    このスクリプトもどこにおいてもいいと思いますが、
    ファイル名とクラス名は一致していなければならないので、ファイル名はそのままのほうが無難です。
    画像6.jpg

Empty GameObjectを作成し、スクリプトを適用する

「Hierarchy」Window内で右クリックして、「CreateObject」でGameObjectを作成します。
作成した「Object」を選択し、「Inspector」に表示させます。

「Add Component」ボタンを押下して、「Scripts」から「Example.cs」と「JoyconManager」
を追加します。

    画像7.jpg
    これでC#スクリプトが実行されるようになったので、早速実行ボタンを押下!

    しかし・・・。

「JoyconLib_scripts」のバグ修正

「JoyconLib」の最終更新日が2年前(2020年11月時点)なので
これは環境によるバグなのか、そもそもバグじゃないのかわかりませんが
そのまま実行しようとしてもエラーになってしまいました。

「Joycon.cs」の376行目と377行目をコメントアウトしてください。
"DebugPrint"とあるので、多分必要ありません。

いざ実行

恐らくこれで色々な設定値がウィンドウに表示されるかと思います。
何か間違っているとすぐUnityがフリーズするので、「Ctrl+S」するのを忘れずに・・・。

    画像8.jpg

    画像9.jpg

    画像10.jpg

背景を黒に変更

    僕はUnityについて全然わからないので、背景を黒一色に変更することで見やすくしておきました。
    文字が見えさえすれば、他の方法でも問題ありません。
    画像11.jpg

    画像12.jpg

オブジェクトに傾きの情報を与える

いい感じにJoyconの情報が見えるようになりました。
あとはこの情報をオブジェクトに与えてやるだけ!

    ということでいろいろ試しながら、以下のソースを追加しました。
    ファイル名:Example.cs
    ①トランスフォーム情報の変数「target」を定義

    ②Start関数で「target」に、gameobjectのトランスフォーム情報を格納

    ③orientation(GetVector関数で取得した、傾き)をオブジェクトのRotationに設定
    ※上4行は理解しないまま書いているだけなので無くてもよい、もしくはx,y,z軸毎に
    全部やる必要があるかもしれません。

事前に用意したオブジェクトのアーマチュアに適用する

    Empty GameObjectに適用した時と同様に、アーマチュアの「Leg」に適用しました。
    画像13.jpg

    足も黒なのでかなり見えにくいですが、右に曲がってます。

課題

とりあえず、オブジェクトのRotetionに、Joyconの傾きを適用するところまで出来ました。
見ての通りバグだらけなので、次回完成したらいいなぁ・・・。
わかっているところで以下のミスがあります。

Joyconの左右同じ処理をしているため、2つの膝に2つの傾きが2重に適用されている。

そもそもトラッカーとして使用するには同期の問題がありそうですがね・・・。


                                 ==konne(コンネ)==

問い合わせ

お申し込みはこちら.png

サン・エム・システム サービス

詳しくはこちら(OneStopCloud).png 詳しくはこちら(PowerApps).png 詳しくはこちら(power-automate-desktop).png 詳しくはこちら(Inc-Resu).png