FPSゲーを作るときにFPS Controllerを使うと便利です。
FPS Controllerはクロスプラットフォーム(PCでもスマホで動く)を意識して作られているので、スマホのタッチパネルで操作することも簡単にできます。
FPS Controllerは「Standard Assets」の中に入っています。
Standard Assets/Characters/FirstPersonCharacter/Prefabs/FPSController.prefab
試しにプラットフォームをPCにして動かしてみます。
キーボードとマウスで操作できます。
- 移動:WASDボタン
- 視界回転 : マウス
- ジャンプ:Spaceボタン
歩く時の音、頭の揺れ、階段の上り下り…など、細かいところにも手が届いています。
流石Unityが提供しているアセットだけあってレベルが高いです。
では、モバイル(iOS,Android)で操作するにはどうすれば良いのか、この記事でまとめたいと思います。
プラットフォームに応じた入力を管理するCrossPlatformInputManager
FPSControllerはPCでは操作できますがPlatformをiOSやAndroidに切り替えると、操作できなくなります。

最初は全く操作できなくなったので焦りました。
原因を調べるためにFirstPersonController.csを見てみると、プラットフォームに応じて処理を受け取るCrossPlatformInputManagerが使われています。
CrossPlatformInputManager.GetButtonDown("Jump")
これはプラットフォームがPCならキーボード+マウスから入力を受け取り、スマホであればジョイスティックやタッチパネル上のボタンから入力を受け取るためのものです。
自動で処理を切り替えてくれるとても便利なクラスが用意されているのです。
CrossPlatformInputを使う
ではiOS,Androidで操作するにはどうすれば良いのでしょうか。
StandardAssetsに同梱されているMobileSingleStickControl.prefabを使います。

これを設置してみましょう。

あれ?何も見えない。
プラットフォームがPCになっていると見えないようにできているのです。
すごいですね。
プラットフォームをiOSに切り替えると、、、

ジョイスティックとボタンが表示されました。
(あんまりUIとしてはカッコ良くなりですね。)
このままでも操作可能ですがPC用にカーソルロックされると操作しづらいので、FirstPersonController.csのLockCursorのチェックを外しておきます。

実行結果は以下の通り。
コードを1行も書かずに、モバイルでも操作できるようになりました。
視線回転ボタンを増やす
さて、ここからが大事です。
操作できるようになりましたが、上記の動画では視点回転ができません。
視線回転のためのジョイスティックを設置するにはどうすれば良いのでしょうか。
ジョイスティックのスクリプトを見てみましょう。

- HorizontalAxisName:Horizontal
- VericleAxisName:Vertical
とあります。
これはInput Managerの名前になっているんですね。

視点を回転させるにはジョイスティックをコピペして、AxisNameをMouse X, Mouse Yと指定してあげれば良いのです。
画像を変更する
ちなみに私が作るときには画像を以下のように変更しています。

少し見栄えが良くなるのでオススメです。
参考