今回はユニティちゃんの操作をマウス操作からゲームコントローラーでの操作に対応させていきます。
前回はワールドマップの作成とシーン間の移動を出来るようにしました。
ユニティちゃんのRPGを作ってみようの他の記事は
から見ることが出来ます。
Unityでのボタンの割り当て
Unityでキーボードの矢印キーを押した時にユニティちゃんが移動していますが、その時に使用しているのが、Input.GetAxisメソッドで、引数には対応するボタンの名前を渡しています。
以下の場合はHorizontalに割り当てられたキーやボタンが押された時、Verticalに割り当てられたキーやボタンが押された時。
1 2 3 4 | Input.GetAxis("Horizontal"); Input.GetAxis("Vertical"); |
その他マウスの左ボタンを押した時に攻撃をしたい時は
1 2 3 4 | if(Input.GetBottonDown("Fire1")) { } |
上のようにInput.GetButtonDown(“Fire1”)でマウスの左ボタンが押されたかどうかで判定したりします。
HorizontalやVerticalに割り当てられているキーやボタンはUnityメニューのEdit→Project Settings→→Inputで設定されています。
Horizontalは二つあり、一つはキーボードとマウスの設定で、もう一つはゲームコントローラーの設定になります。
キーボードとマウスの設定ではキーボードのleftがNegative Button、rightがPositive Buttonに設定されていて、TypeにKey Or Mouse Buttonが設定されAxisにX Axisが設定されています。
なので、スクリプトからInput.GetAxis(“Horizontal”)を使うとキーボードの矢印の左を押すとマイナスの入力値、矢印の右を押すとプラスの入力値が得られます。
ゲームコントローラーの設定ではTypeがJoyStick AxisでAxisにX Axisが設定されているので、ゲームコントローラーのジョイスティックを左に倒すとマイナスの入力値、右に押すとプラスの入力値が得られます。
ゲームコントローラーボタンの割り当て
キーボードやマウス、ゲームコントローラーのジョイスティックの割り当てについては先ほどのように割り当てられています。
ではゲームコントローラーのボタン(PS3コントローラーの〇ボタン等)はどのように割り当てられているのでしょうか?
試しにゲームコントローラーのボタンの割り当てがされているFire1を見てみます。
上のようにPositive Buttonにはjoystick button 0が割り当てられています。
これはゲームコントローラーの0の番号のボタンを押された時にFire1のボタンが押されたとされます。
ゲームコントローラーのボタン番号を調べる方法は後でやります。
Joy NumにはGet motion from all Joysticksが設定されパソコンに複数のゲームコントローラーが接続されている場合にどのコントローラーでも同じように反応します。
複数のゲームコントローラーを接続してそれぞれ別に動かしたい場合はJoy Numを接続したコントローラーの番号に変更するばそのコントローラーでしかそのボタンは反応しません。
ゲームコントローラーに割り当てられているボタンの番号の取得の仕方
Unityでのボタンの割り当てはProject SettingsのInputで行えることがわかりました。
次にゲームコントローラーのボタンを押した時にパソコンでどの番号に割り当てられているかを調べなければいけません。
Windows10で調べていきます。他のWindowsOSでも同じような感じで調べることが出来ます。MacOSは持っていないのでわかりません・・・(-_-)
まずはゲームコントローラーをパソコンに接続します。
今回はPS3コントローラーを接続していますが、設定を見たいゲームコントローラー(パソコン用のコントローラーやPS4コントローラー等)も同じ感じで見れます。
それぞれのコントローラーによってボタンに割り当てられている番号が変わります。
WindowsのスタートメニューからWindowsシステムメニュー→コントロールパネルを選択します。
コントロールパネルでハードウェアとサウンドを選択します。
ハードウェアとサウンドでデバイスとプリンターを選択します。
PLAYSTATION(R)Controllerを選択した状態で右クリックしゲームコントローラーの設定を選択します。
新しく出てきたウインドウでゲームコントローラーを選択し、プロパティを押します。
すると新しくウインドウが開きPS3コントローラーのジョイスティックを倒したり、ボタンを押した時に押されたボタンの番号が表示されます。
例えばPS3コントローラーの△ボタンを押すと1番のボタンが光ります。
Unityではここで調べられるボタンの番号から1を引いた数値で割り当てられます。
先ほどFire1でjoystick button 0が割り当てられていましたが、スクリプトで
1 2 3 4 5 | if(Input.GetButtonDown("Fire1")) { Debug.Log("押された"); } |
上のような処理があるとPS3コントローラーの△ボタンを押した時に「押された」という文字列がコンソールに出力されます。
ユニティちゃんRPGのボタンの作成と設定
ここまででボタンの割り当て方とコントローラーに割り当てられているボタン番号の取得が出来ました。
そこでPS3コントローラーでユニティちゃんRPGを操作する時の割り当てを行っていきましょう。
ユニティちゃんの移動には左のジョイスティックを倒す事、十字キー(ハットスイッチ)を押すことで移動出来るようにします。
ジョイスティックの設定はデフォルトで作られているので十字キーを押した時の設定を作っていきます。
新しいボタンを作成したい場所の上のボタンを選択した状態でCtrl+Dキーを押します。
今回はデフォルトのInput設定のCancelを選択した状態でCtrl+Dキーを押しCancelボタンの設定を複製します。
またはAxes下のSizeの数値を一つ増やします(数値を減らすと元の設定が消えるので注意してください)。
Ctrl+Dキーを押すとCancelボタンの設定が複製されるので、下のCancelを選択し、NameをHorizontalにし、Gravity、Dead、Sensitivityを既に作成してあるHorizontalの設定と同じにします。
TypeをJoystick Axisにし、Axisを9th Axisにします。
Positive Button等にジョイスティックのボタンが設定されている場合は削除しておきます。
PS3コントローラーの十字キーの左右のボタンは9th Axisに対応しています。
ps4コントローラーは7th Axisのようです。
同じように今作ったHorizontalの設定を選択した状態でCtrl + Dキーを押して設定を複製し、NameにVertical、Gravity、Dead、SensitivityをHorizontalと同じにし、TypeをJoystick AxisにしてAxisを10th Axisにします。
次は同じようにActionという名前の設定を作り、〇ボタンを割り当てます。
Positive Buttonにjoystick button 1を設定し、他の設定はCancelボタン等のボタンを押した時の設定等に合わせます。
またキーボードでの操作も残しておく為にJumpボタンに設定されていたspaceキーの設定をAlt Positive Buttonに設定します。
同じようにMenuという名前の設定を作り、△ボタンを割り当てます。
Positive Buttonにjoystick button 0を設定します。他の設定はActionボタンと同じです。
とりあえず十字キーの設定とActionボタンに〇ボタン、Menuボタンに△ボタンの設定が出来ました。
以前作成した会話機能で会話を開始する時のボタンはInput.GetButtonDown(“Jump”)にしていたので、ここをActionボタンに変更します。
会話を開始する処理はUnityChanScriptスクリプト内に2か所あります。
また会話を進める処理はUnityChanTalkScriptスクリプト内で行っていてここでもJumpボタンを設定している個所をActionボタンに変更します。
1 2 3 | Input.GetButtonDown("Action") |
これで設定が出来たのでUnityを実行してゲームコントローラーの十字キーを押してユニティちゃんを移動したり、〇ボタンを押して村人と会話が出来るか試してみてください。
PS3コントローラーが一切反応しない場合
PS3コントローラーをパソコンに接続しても動かない場合はパソコン用のゲームコントローラーやPS4コントローラーで試してみてください。
PS3コントローラーに関しては別途ソフトをインストールすることで利用可能になる場合もあります。
上の記事ではゲームコントローラーに対応する際の詳細についても書いていますので、参照してみてください。
終わりに
今回はユニティちゃんRPGをゲームコントローラーで操作出来るようにしました。
現時点ではマウスとキーボード、ゲームコントローラー全てで操作が出来ますが、例えばゲームコントローラーのみで操作したい時はマウスやキーボードの設定では動かないようにInputの設定を変更する必要があります。
今回作成したMenuボタンはまだ使っていませんが今後使います。
また必要に応じてPS3の□ボタンや×ボタンやその他のボタンの設定も作成していきます。
次回はアイテムやキャラクターのステータス管理についてやっていきます。
この作品はユニティちゃんライセンス条項の元に提供されています