AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

ジョイパッドのAxis

リアルパッドの話ですが、左アナログパッドは各社でほぼ統一されているようですが、右アナログパッドはバラバラな模様。
うちのGameSirのパッドだと、スマホのUSBホストに刺すと、上下の動きが左右になっていて、左右の動きは上下に反映されません。
(PCで刺すとAxis4,5なのでXbox360と同じ模様
これはInput設定で、どのAxisの値を見て動かしているか次第です。

PCにつけた場合と、スマホにつけた場合でaxisが変わってるのでややこしい。



この記事が参考になりますが、右パッドの仕様違いはソフトからはわからないので、設定画面でユーザーに変更してもらうしかないのでしょう。
Unityでゲーム開発 -左右スティックを使う方法-

・ELECOM JC-PS101USV+PS2アナログコントローラ(DUALSHOCK 2)純正品
左右:3rd
上下:4th

・ホリパッド3 PRO. ブラック HP3-105
左右:3rd
上下:4th

・ELECOM JC-U2912FBKゲームパッド
左右:3rd
上下:5th

・Logicool Rumble Gamepad F510
左右:4th
上下:5th

※参考までに Xbox360コントローラは,左右:4th,上下:5thらしいです


ちなみに、左右axis3 上下axis4にしたら、GameSirのジョイパッドで行けました。


設定画面にAXIS変更ボタンを作って、Axis3,4→Axis3,5→Axis4,5と切り替えられるようにしました。

                if (b == 25) //axis
                {
                    if(axis==0)
                    {
                        axis = 1;
                        GameObject.Find("/Canvas/SetupMenu/Button25/Text").GetComponent<Text>().text = "RightPad\nAxis 3,4";
                    }
                    else
                    if (axis == 1)
                    {
                        axis = 2;
                        GameObject.Find("/Canvas/SetupMenu/Button25/Text").GetComponent<Text>().text = "RightPad\nAxis 3,5";
                    }
                    else
                    {
                        axis = 0;
                        GameObject.Find("/Canvas/SetupMenu/Button25/Text").GetComponent<Text>().text = "RightPad\nAxis 4,5";
                    }
                }


右アナログパッドを見ているカメラのスクリプトで、

                if(Main.axis==0) // axis 4,5
                {
                    ax2 = main.joystickRx();//axis4
                    ay2 = main.joystickRy();//axis5
                }
                else
                if (Main.axis == 1) // axis 3,4
                {
                    ax2 = main.joystickAxis3();//axis3
                    ay2 = main.joystickRx();//axis4
                }
                else // axis 3,5
                {
                    ax2 = main.joystickAxis3();//axis3
                    ay2 = main.joystickRy();//axis5
                }

という感じで切り替えました。
ゲームセーブするときはaxis設定も保存しておきます。




業界標準って感じなので、XBOX360有線パッドをAmazonで注文しました。明日届きます。コンビニ受け取りです( ゚Д゚)今、ヤマト運輸たいへんみたいだし
XBOX360無線パッドは持ってるんですが、電池がいつのまにか切れてたり、自動電源OFFが働いて使いずらい。
XBOX ONEのジョイパッドが一時期安くなってたと思うんですが、また高くなってますね。