StandardAssetsのDualTouchControls
とりあえずAndroid用のゲームを作ってみようかなと思い
色々いじっています。
モバイルアプリで必要なのは、入力方法の実装ですよね。
マウス操作のAPIでもある程度実現できますが、
まるっと同じ訳にはいかないもの。
StandardAssetsにあるDualTouchControlsを使ってみることにしました。
MoveTouchpad
CrossPlatformInputをインポートし、DualTouchControlsをSceneに追加します。
今回はMoveTouchPadのみ使用したかったので、
他のオブジェクトは削除してしまいました。
こんなイメージ。
タッチパッドからの入力をそのままSphereのpositionにぶち込みます。
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端末に入れて試したところ・・・
指の移動が停止しても、Sphereが動いてしまっています。
ジョイスティックみたいな動きをしていますね。
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切り替えを全て修正し、
実機で動かしたのがこちら。
指の動きが止まったら、Sphereも止まっていることが確認できました。
Qiitaの画像容量ですが、制限があるみたいで。(そりゃそうだ)
何も考えずにデカいサイズの動画をアップしてしまいました
次から気を付けます・・・。