読者です 読者をやめる 読者になる 読者になる

テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

Unityのゲームにスマホ向けなバーチャルパッドを追加する

Unityで取り敢えずゲームを作る過程で「Input.GetButton」系を使用している場合でも、タッチパネルに対応する方法を紹介します。

 f:id:tsubaki_t1:20141009033400g:plain

今回もSample Assetsシリーズです。


新 Standard Assets候補、Sample Assets (beta) - テラシュールブログ

ただし、作業は4.6向けSample Assetsを使用します。(こっちはタッチパネル等がuGUIで構成されているので)なので、必然的に4.6が必要です。

f:id:tsubaki_t1:20141009024331p:plain

Sample Assets (beta) for Unity 4.6

 


Unity 4.6オープンβスタート。新GUI「uGUI」の試用が可能に - テラシュールブログ

基本的なやり方

といっても難しい事はなく、Unity公式チュートリアルバーチャルジョイスティック対応のとおりです。ただし幾つかの点で異なります。

 

1. EventSystemの追加

まずは、メニューバーのGameObject>UI>EventSystemを選択して、シーンにEventSystemを追加します。

これが無いと、UGUIはイベントを受け取れません。

f:id:tsubaki_t1:20141009024347p:plain

 

2. バーチャルジョイスティックの追加

次に、Assets/SampleAssets/CrossPlatformInput/PrefabsにあるMobileSingleStickControlRigをシーンに配置します。

 

f:id:tsubaki_t1:20141009024822p:plain

 

3. バーチャルジョイスティック対応のコードに切り替え

コードも書き換えます。

コードの頭にusing UnitySampleAssets.CrossPlatformInput;を追記し…

各コードのInputクラスをCrossPlatformInputManagerに変更します。例えば

Input.GetAxis()CrossPlatformInputManager.GetAxis()

Input.GetButtonDown()CrossPlatformInputManager.GetButtonDown()のような形です。

以下サンプル
Input.GetAxisとCrossPlatformInputManager.GetAxis

 

4. バーチャルジョイスティック・物理スティック切り替え

後はメニューバーのMobile InputEnableにすればモバイル要バーチャルスティックが表示され、Disableにすればキー(パット)入力となります。

f:id:tsubaki_t1:20141009030209p:plain

このEnable/Disableについてですが、Mobile Control Rigコンポーネントが付与されているオブジェクトの子オブジェクトが、状況によりON/OFFになります。

 

とりあえずコレで、バーチャルパットでものが動かせるようになります。

 

 

 

バーチャルパットのカスタマイズ

このバーチャルパットのカスタマイズ方法について紹介します。基本はボタンの追加とJoystickの設定さえ何とかすれば結構色々なゲームに対応出来る気がします。

それ以上はソースコード改造でb

 

ボタンの追加

バーチャルボタンを追加する手っ取り早い方法は、

  1. MobileSingleStickControlRigのJumpButtonをDuplicate(コピペ)してもう一つ作る
  2. 名前をFire1とかにする
  3. EventTriggerのイベントの引数をFire1とかにする

これで、CrossPlatformInputManager.GetButtonDown("Fire1")のような呼出でボタン判定が取れるようになります。

なお、PC側でも入力を発行できるようにメニューバー>Edit>ProjectSettings>InputのInputManagerにFire1を追加しておくと良さそうです。*1

f:id:tsubaki_t1:20141009030802p:plain

 

JoyStickの調整

Joystickは、移動向きの限定(縦方向のみ・横方向のみ・両方)と、移動範囲、それと縦方向ベクトル・横方向ベクトルに動かした際のGetAxisの引数名を指定出来ます。

 

例えば、左右にスティックを置いた状態で右のスティックのHorizontalとVerticalをMouse XMouse YとかにするとThirdPersonControllerが動かせるようになります。

 

f:id:tsubaki_t1:20141009032815p:plain

 

ThirdPersonControllerはWSADで移動・マウスで視点移動するので、マウス視点移動が加われば概ね操作出来るようになります。これに先ほどのFire1を追加出来れば、概ねTPSが動かせそうです。

 

f:id:tsubaki_t1:20141009040112p:plain

スティック・ボタンの画像変更

Imageのスプライトを差し替えます。TextureFormatをSpriteにしているものならば、大体OKです(Raw Imaegでも多分大丈夫)。座標調整も楽(そう、UGUIならね)

f:id:tsubaki_t1:20141009040739p:plain

 画像は描いても良いですし、Photoshop加工を駆使しても良いですし、AssetStoreから確保しても良いです。


AssetStoreの2D素材 - テラシュールブログ

 

範囲指定のタッチパネル

スティックではなく範囲をスライドすると動くタイプです。

Assets/SampleAssets/CrossPlatformInput/PrefabsにあるDualTouchMobileControlsのTouch Padがアタッチしてあるオブジェクトがそれです。

 

左側のタッチパネルがスティック、右側のタッチパネルがマウスのX移動・Y移動と同じ物となります。

 

f:id:tsubaki_t1:20141009034705p:plain

マルチ解像度対応

このUGUI版ですが、そのまま使うとモバイルに出力した際に超小さくなります。ピクセルパーフェクト仕様の為です。なので、想定解像度で大きくしてしまいます。

 

ReferenceResolutionをコントローラーの親Canvasと同じオブジェクトに追加します。これで画面が超高解像度でも拡大してくれます。

f:id:tsubaki_t1:20141009033153p:plain

 

アスペクト比はアンカーで何とかしましょう。

 

次回はカメラについてかな

*1:Fire1はデフォルトでは左クリックとして登録されています