今まではキャラクターを動かす時にキーボードとマウスを使って動かしていましたが、
パソコン用のゲームパッドやPS3のコントローラーで動かす事が出来れば市販のゲームと変わらずプレイ出来るので、独自のキーボードやマウスの操作方法で動かす必要もなくなります。
今回はPS3のコントローラーでキャラクターを動かす事が出来るようにします。
パソコンによってはMotionInJoyやBetter DS3を使わなくても出来るかもしれないので、まずはインストールせずにPS3コントローラーをパソコンにUSB接続し、『PS3コントローラーの番号割り当てを調べる』の項目部分から記事を見てコントローラーの入力を試してみてください。
わたくしはMotionInJoyを入れてやってみたんですが、見事にマウスが反応しなくなり焦りました・・・・。
フリーズしたのかと思ったら設定が変わっていたようです。
マウスが反応しなくなった時に困らないようキーボード操作だけでスタート画面を開いてコントロールパネルのデバイスのマウスの設定を変更出来るようにしておいた方がいいです。
キーボードの画面を開くボタン、方向キー、Tabキー、Enterキーで設定変更まで出来ますので、操作方法だけ覚えておいた方がいいです。
なお、PS3のコントローラーをパソコンで使用出来るようにする方法は
を参考にさせて頂きました。
MotionInJoyを入れる前に見ておけばよかった・・・・
PS3本体はずいぶん前からYLOD?で起動すら出来なくなったので久しぶりにコントローラーを触った感じです・・・(^_^;)
PS3とPS4がほしいです。
ダークソウル3がやりたいなぁ・・・・・(=_=)
わたくしがやるのは今までのキーボード操作とマウス操作で動かしていた部分をPS3コントローラーで動かす処理に変更するところです。
Better DS3のコントローラーの設定をする
まずはコントローラーの設定から作ります。
Better DS3を起動したら↑のような画面が開くので、赤い枠のNewをクリックし、
Direct Inputを選択します。
XInputを選択すると↑のような画面になり、赤枠のXBox 360ボタンを押すとXBox 360の設定に自動で変換されます。
今回はDirect Inputで話を進めるので、↑の画面のようにXBox 360ボタンは表示されません。
Unityという名前で作成します(名前は自由に付けてください)。
上記のように設定しました。
MotioninJoyを入れた時の設定と同じ?です。
PS3のR2とL2はあまり使わないのでXInputを選びXBOX360コントローラーと同じボタン設定にする事も出来ます。
自動でボタン設定が出来るので楽です。
そうするとゲームパッドのボタン番号が変わるのでUnityで設定する時は注意が必要です。
Unityで設定する時にここで指定した番号を使う事になります。
設定が終わったら下の方にあるSave Profileを押してデータを保存します。
設定を変更したい場合は最初の画面でSelected Profileでさきほど作成したUnityのデータを選択しEditボタンを押せば
再設定をする事が出来ます。
Better DS3で設定したボタンが反映されているかの確認
さきほど設定したPS3コントローラーとボタンの設定がちゃんと反映しているか確認します。
↑のようにControll Panelをクリックします。
↑のように接続されているコントローラーを選択する画面が出るので確認したいコントローラーを選択し、プロパティをクリックします。
PS3コントローラーの番号割り当てを調べる
↑のようにPS3のコントローラーを押すとアナログスティックの操作やボタンを押す事でどの番号が反応するかを確認する事が出来ます。
このプロパティはWindows7であれば
スタートメニュー→コントロールパネル→ハードウェアとサウンドのところのデバイスとプリンターの表示→PLAYSTAION(R)3 Controllerを右クリック→ゲームコントローラーの設定
からも見る事が出来ます。
他のWindowsやMacはわかりません。
UnityのInputManagerでキーとボタンの設定をする
次にUnityで設定をしていきます。
Unityのメニュー→Edit→Project Settings→Inputを選択するとインスペクタにInputManagerが表示されます。
Axesのすぐ下のSizeの値を増やすと設定値が増やせます。
スクリプトでInput.GetAxis(“Horizontal”)やInput.GetAxis(“Jump”)としてキーの受付をしていましたが、ここで設定したHorizontalやJumpに指定されているキーが押された時に値の取得や実行をしていました。
つまりHorizontalでは→←のキーを押した時に値を取得していますが、設定を変えるとAのキーを押したらHorizontalの値を取得するという設定にも変更出来てしまいます。
Nameの所はスクリプトから参照する時に使用する名前です。
Negative Buttonが負の値を設定する所で、Horizontalの場合←キーを押したら負の値になります。
Positive Buttonが正の値を設定する所で、→キーを押したら正の値になります。
Invertにチェックを入れると値が反転されます。
カメラを移動させる時に移動方法を反転させたい時に使えそうですね。
Typeはキーボード操作とマウス操作で設定するタイプやジョイスティックの動きで設定するタイプ等があります。
上の画像ではキーを設定しているのでTypeはKey or Mouse Buttonに設定します。
InputManagerでHorizontalは最初から2つ設定されているけどなんで!?
と思われる方もいるかもしれませんが、これはHorizontalはキーボードでの操作とジョイスティックでの2つの操作を考慮しているからです。
さきほどのHorizontalはキーボードでの設定です。
下の方にあるもうひとつのHorizontalは上の画像のようになり、TypeがJoystickAxisになっています。
設定の仕方はこれでわかったので、PS3コントローラーでキャラクターの移動やジャンプ、攻撃等の設定を作っていきましょう。
と言っても、移動で使うHorizontalとVerticalは元々あるものを使いますので、ジャンプと攻撃の設定を行います。
ジャンプはキー操作でspaceキーを押すと反応するように設定されています。
Jumpを選択しAlt Positive Buttonにjoystick button 14を指定してください。
そうするとPS3のコントローラーの×ボタンを押すとジャンプするようになります。
joystick button 番号
の番号部分をBetter DS3で指定したボタン番号-1にします。Unityは0番目から始まるので1を引きます。
Alt Positive Buttonのに設定するのではなく新しくJumpと同じ名前で設定
を作りPositive Buttonに指定する事も出来ます。
設定を増やすには前述したSizeの値を増やせば出来ます。増やした場合は最後の設定項目と同じ物が下に作られます。
キャラクターをジャンプさせるには、もちろんジャンプ機能を搭載していなければなりません。
を参考に機能を作成してみてください。
Jumpの設定は上のようになりました。
次は攻撃時の設定です。
攻撃する時は
Input.GetButtonDown(“Fire1”)
を使ってマウスの左クリックを押した時に攻撃していました。
攻撃機能に関しては
連続攻撃機能を作るには
を参照してください。
攻撃時に使用しているFire1の項目を見ると、すでにLeft CtrlがPositive Buttonにmouse 0がAlt Positive Buttonに設定されてしまっているので、新しい項目を作りNameをFire1としてそこのPositive Buttonに□ボタンを押した時に反応するよう設定します。
□ボタンはBetter DS3で16番に設定したのでUnityでは
joystick button 15
と設定します。
これでジャンプと攻撃の設定が終了しました。
Unityを実行してPS3コントローラーで操作出来るか確認してみる
それではUnityの実行ボタンを押して、PS3のコントローラーでキャラクターが動作するか確認してみましょう。
上が実行結果です。
これだけだとPS3のコントローラーで動かしているかどうか全然わかりませんね・・・・。
嘘偽りなくちゃんと動かしてますよー(^O^)
スクリプトにキーやボタンを取得してジャンプや攻撃をする処理を記述する時に注意が必要です。
たとえばFのキーを押した時やマウスの左を押した時に攻撃をしたい場合
Input.GetKeyDown(“f”)
Input.GetMouseButtonDown(0)
と記述しているとゲームパッドを使用した時に反応しません。
キーボードとマウス、ゲームパッドすべてで操作可能なゲームを作る場合は
Input.GetButtonDown(“Fire1”)
と記述しInputManagerでFire1の設定値にfキー、mouse 0、joystick button 15(設定によって変わる)を指定します。
スクリプトでキーを指定するのではなくInputManagerで設定するようにすれば他のキーで攻撃をするようにしたい場合等にスクリプトの修正ではなくInputManagerの設定を変更するだけで対応出来るようになるので便利です。
ゲームユーザーがコントローラーの設定をする方法
今回Unity側でFire1はこのキーやこのボタン、と設定しましたが、使用するゲームパッドによっては設定が違う可能性もあります。
そんな時はゲーム起動時に入力の設定を変更出来るのでユーザーに変更してもらう事も出来ます。
スタンドアロン(パソコンにダウンロードしてやるゲーム)形式では入力の設定が出来ますが、他の形式ではどうなんでしょ?
とりあえず今の所は配布形式だけ考えていきましょう。
ゲームのアイコンをクリックしゲームを起動したら、上のようにInputタブを選択し、PrimaryやSecondryをクリックし、変更したいキーを押して変更する事が出来ます。
例えばHorizontalの→キーを押して移動しているのをqキーに変更したい場合はHorizontal(+)のPrimaryのrightの部分をクリックしその後qキーを押します。
これで変更が可能です。
ユーザーに設定項目がわかりやすいように名前を変更する
ただゲームをプレイするユーザーがHorizontal(+)ってなに?となる事がほとんどなので、もっとわかりやすい名前を設定しましょう。
InputManagerインスペクタで上のようにHorizontalのDescriptive NameとDescriptive Negative Nameにわかりやすい名前を指定します。
Descriptive NameはPositive Buttonを押した時の名前
Descriptive Negative NameはNegative Buttonを押した時の名前
になります。
Fire1も分かりづらいのでAttackに変更します。
上が結果です。
Horizontal(+)やHorizontal(-)ではなくLeftとRightにしたことでわかりやすくなりました。
名前はわかりやすくなりましたが、操作方法を変更するやり方は分かりづらいのでそれを解説する必要はありそうですね。
今回の場合PS3コントローラーをゲームパッドとして使用する時の設定をしましたが、
パソコン用のコントローラーを繋いだ時のデフォルトのキー設定ってどうなっているんでしょう?
パソコン用のコントローラーで試して確認してみる必要があるけど、ないので各自確認をお願いします・・・(^_^;)