LoginSignup
1
1

More than 5 years have passed since last update.

DualTouchControlsのMoveTouchpad

Posted at

StandardAssetsのDualTouchControls

とりあえずAndroid用のゲームを作ってみようかなと思い
色々いじっています。

モバイルアプリで必要なのは、入力方法の実装ですよね。
マウス操作のAPIでもある程度実現できますが、
まるっと同じ訳にはいかないもの。
StandardAssetsにあるDualTouchControlsを使ってみることにしました。

MoveTouchpad

CrossPlatformInputをインポートし、DualTouchControlsをSceneに追加します。
今回はMoveTouchPadのみ使用したかったので、
他のオブジェクトは削除してしまいました。

TouchPad.png

こんなイメージ。

タッチパッドからの入力をそのままSphereのpositionにぶち込みます。

Sphere.cs
void Update(){
        var x = CrossPlatformInputManager.GetAxis("Horizontal");
        var y = CrossPlatformInputManager.GetAxis("Vertical");
        this.transform.position += new Vector3(x*.1f, 0, y*.1f);
 }

※ちょっと値が大きいので、その辺は調整しました。

タッチパッド内をタッチし、指の移動量でSphereを動かします。
指が停止したら、Sphereも停止させたい。
UnityRemote上で試す分には、思った通りの動きをしてくれました。

ですが、Android端末に入れて試したところ・・・

NG.gif

指の移動が停止しても、Sphereが動いてしまっています。
ジョイスティックみたいな動きをしていますね。

TouchPad.csを確認してみたところ、

TouchPad.cs
#if !UNITY_EDITOR
            if (controlStyle != ControlStyle.Absolute )
            m_Center = data.position;
#endif

上記のようにUNITY_EDITORでifdefされている箇所が、4か所もありました。
そうかなるほど、UnityRemoteで動作確認しているとは言え
実際はUnityEditor上で動いているわけで。
このプリプロセッサがAndroid端末で定義されている訳ありませんので
実機に入れたとたんに異なる動きをしてしまう訳なのです。

UnityEditorと同じ動きをしてほしいので、Android時にもUNITY_EDITORを定義しちゃえばいいじゃん、
という訳にはいきません。
他のどんなソースで、同様の切り替え方をしているかわかりませんので・・。

という訳で、TouchPad.cs内のUNITY_EDITOR切り替えを全て修正し、
実機で動かしたのがこちら。

OK.gif

指の動きが止まったら、Sphereも止まっていることが確認できました。


Qiitaの画像容量ですが、制限があるみたいで。(そりゃそうだ)
何も考えずにデカいサイズの動画をアップしてしまいました:scream:
次から気を付けます・・・。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1