作ったスクリプトをスマホで軽く検証したい、というときにUnity Remoteが便利ですが、初心者がその時にちょっと陥ってしまったメモ
Application.isEditor
Unityのエディタ上で動いているときはtrueを返すbool値です。
「スマホではスマホ用の操作をしたいけど、エディタ上ではキーボードで動きの確認をしたい」というときに使います。
C#
/// Editorで起動しているときはキーボード操作を可能にし、そうじゃないときはスマホのジャイロで動かす
if (Application.isEditor) {
move.x += Input.GetAxis ("Horizontal") * 3.0f; /// Vector3 moveは別に記述、数字は適当
if(Input.GetKeyDown("space")) Jump(); /// void Jump()は別に記述
} else {
move.x = Input.gyro.gravity.x * 12.0f; /// スマホを傾けると左右に移動、数字は適当
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began) {Jump ();} ///タップするとジャンプ
}
エディタで操作しているときは左右キーでx軸方向移動、Spaceキーでジャンプ。
実機で操作しているときは傾けてx軸方向移動、タップでジャンプ。
なのですが、このscriptだとUnityRemoteで動きません。エラーも起きないので1時間ほどハマってしまいました。
なぜかというと、UnityRemoteもエディタから起動するので、 Application.isEditor = true
になるからです。普通に考えたら当たり前です。
なのでこのようにしました。
C#
/// Editorで起動しているときはキーボードでもスマホでも操作可能にする。 そうじゃないときはキーボードでは操作できない。
move.x = Input.gyro.gravity.x * 12.0f;
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began) {Jump ();}
if (Application.isEditor) {
move.x += Input.GetAxis ("Horizontal") * 3.0f;
if(Input.GetKeyDown("space")) Jump();
}
else
を取っただけです。
あと、Input.gyro.gravity.x
がInput.GetAxis("Horizontal")
を上書きしないよう、記述の順序を変えました。
これでUnityRemote(スマホ)でもキーボードでも無事に動作するようになりました。