UnityでRPGを作ってみる

UnityでRPGを作ってみる

UnityRemoteとApplication.isEditorの罠

罠、というか自分が勝手に嵌っただけですが・・・

スマホのタッチと、UnityでのEditorからの双方からデバッグできるようにするためにこうするといいよ、というサイト様を参考にこう作ったのですが、スマホから全く動かない。

 if (Application.isEditor)
        {
            if (Input.GetMouseButtonDown(0) || Input.GetMouseButton(0))
            {
                tap_pos = Input.mousePosition;
                ret = TapDataChk(tap_pos, 0, 1);
            }
            
        }
        else
        {
            // 実機で実行中
            for (int i = 0; i < Input.touchCount; i++)
            {
                // タッチ情報の取得
                Touch touch = Input.GetTouch(i);
                Debug.Log("i:" + i+ "   pos:" + touch.position);

                ret = TapDataChk(touch.position, 0, 1);

                if(ret != -1)
                {
                    i = 99999;
                }
            }
        }

で、Debug.Logでよくよく見てみると、エディタ用の処理が動いてることが判明。
まさか、エディタから起動しているからエディタ用の処理が動くのか?
スマホ用の処理をデバッグしたければエディタを落としてインストールしないといけないのか?
そんな馬鹿なことがあるのか?

と思っていたら、やはり自分がバカなだけでした。

Application.isEditor はエディタが起動しているか否かを判定しているので、それを消してやり、エディタ(マウス)用とスマホ用の処理を並列させてやればいいだけでした。

//エディタ用の判定
        if (Input.GetMouseButtonDown(0) || Input.GetMouseButton(0))
        {
            tap_pos = Input.mousePosition;
            ret = TapDataChk(tap_pos, 0, 1);
        }

        // 実機用の判定(エディタ用の判定結果が-1のときのみ判定する)
        if (ret == -1)
        {
            for (int i = 0; i < Input.touchCount; i++)
            {
                // タッチ情報の取得
                Touch touch = Input.GetTouch(i);
                Debug.Log("i:" + i + "   pos:" + touch.position);

                ret = TapDataChk(touch.position, 0, 1);

                if (ret != -1)
                {
                    i = 99999;
                }
            }
        }

解決。
処理負荷的には実機用の判定を上に書いたほうが良いのかな?
そもそもリリース時にはデバッグ処理は消した方がいいのかな?

#リリースすることはないだろうからあんま関係なさそう