Unityのゲームにスマホ向けなバーチャルパッドを追加する
Unityで取り敢えずゲームを作る過程で「Input.GetButton」系を使用している場合でも、タッチパネルに対応する方法を紹介します。
今回もSample Assetsシリーズです。
新 Standard Assets候補、Sample Assets (beta) - テラシュールブログ
ただし、作業は4.6向けSample Assetsを使用します。(こっちはタッチパネル等がuGUIで構成されているので)なので、必然的に4.6が必要です。
Sample Assets (beta) for Unity 4.6
Unity 4.6オープンβスタート。新GUI「uGUI」の試用が可能に - テラシュールブログ
基本的なやり方
といっても難しい事はなく、Unity公式チュートリアルのバーチャルジョイスティック対応のとおりです。ただし幾つかの点で異なります。
1. EventSystemの追加
まずは、メニューバーのGameObject>UI>EventSystemを選択して、シーンにEventSystemを追加します。
これが無いと、UGUIはイベントを受け取れません。
2. バーチャルジョイスティックの追加
次に、Assets/SampleAssets/CrossPlatformInput/PrefabsにあるMobileSingleStickControlRigをシーンに配置します。
3. バーチャルジョイスティック対応のコードに切り替え
コードも書き換えます。
コードの頭にusing UnitySampleAssets.CrossPlatformInput;を追記し…
各コードのInputクラスをCrossPlatformInputManagerに変更します。例えば
Input.GetAxis()はCrossPlatformInputManager.GetAxis()、
Input.GetButtonDown()はCrossPlatformInputManager.GetButtonDown()のような形です。
以下サンプル
Input.GetAxisとCrossPlatformInputManager.GetAxis
4. バーチャルジョイスティック・物理スティック切り替え
後はメニューバーのMobile InputをEnableにすればモバイル要バーチャルスティックが表示され、Disableにすればキー(パット)入力となります。
このEnable/Disableについてですが、Mobile Control Rigコンポーネントが付与されているオブジェクトの子オブジェクトが、状況によりON/OFFになります。
とりあえずコレで、バーチャルパットでものが動かせるようになります。
バーチャルパットのカスタマイズ
このバーチャルパットのカスタマイズ方法について紹介します。基本はボタンの追加とJoystickの設定さえ何とかすれば結構色々なゲームに対応出来る気がします。
それ以上はソースコード改造でb
ボタンの追加
バーチャルボタンを追加する手っ取り早い方法は、
- MobileSingleStickControlRigのJumpButtonをDuplicate(コピペ)してもう一つ作る
- 名前をFire1とかにする
- EventTriggerのイベントの引数をFire1とかにする
これで、CrossPlatformInputManager.GetButtonDown("Fire1")のような呼出でボタン判定が取れるようになります。
なお、PC側でも入力を発行できるようにメニューバー>Edit>ProjectSettings>InputのInputManagerにFire1を追加しておくと良さそうです。*1
JoyStickの調整
Joystickは、移動向きの限定(縦方向のみ・横方向のみ・両方)と、移動範囲、それと縦方向ベクトル・横方向ベクトルに動かした際のGetAxisの引数名を指定出来ます。
例えば、左右にスティックを置いた状態で右のスティックのHorizontalとVerticalをMouse X、Mouse YとかにするとThirdPersonControllerが動かせるようになります。
ThirdPersonControllerはWSADで移動・マウスで視点移動するので、マウス視点移動が加われば概ね操作出来るようになります。これに先ほどのFire1を追加出来れば、概ねTPSが動かせそうです。
スティック・ボタンの画像変更
Imageのスプライトを差し替えます。TextureFormatをSpriteにしているものならば、大体OKです(Raw Imaegでも多分大丈夫)。座標調整も楽(そう、UGUIならね)
画像は描いても良いですし、Photoshop加工を駆使しても良いですし、AssetStoreから確保しても良いです。
範囲指定のタッチパネル
スティックではなく範囲をスライドすると動くタイプです。
Assets/SampleAssets/CrossPlatformInput/PrefabsにあるDualTouchMobileControlsのTouch Padがアタッチしてあるオブジェクトがそれです。
左側のタッチパネルがスティック、右側のタッチパネルがマウスのX移動・Y移動と同じ物となります。
マルチ解像度対応
このUGUI版ですが、そのまま使うとモバイルに出力した際に超小さくなります。ピクセルパーフェクト仕様の為です。なので、想定解像度で大きくしてしまいます。
ReferenceResolutionをコントローラーの親Canvasと同じオブジェクトに追加します。これで画面が超高解像度でも拡大してくれます。
アスペクト比はアンカーで何とかしましょう。
次回はカメラについてかな
*1:Fire1はデフォルトでは左クリックとして登録されています