2014/02/18(火) [n年前の日記]
#2 [unity] タッチパネルと十字キーとABボタンについてもやもやと考え中
昨日アップロードした、Unityで作ったソレを、Android機に持っていって動かしてみたいなと。
しかし、十字キー+ABボタンで操作することが前提のアプリを、タッチパネルしか持ってないAndroid機で動かしても、何も操作できないなと気がついて。どうしたもんか。
しかし、十字キー+ABボタンで操作することが前提のアプリを、タッチパネルしか持ってないAndroid機で動かしても、何も操作できないなと気がついて。どうしたもんか。
◎ Unityとタッチパネルについてメモ。 :
一応 Unity には、仮想ジョイスティックだか、バーチャルパッドだかを実装できる Asset が入ってるそうで。
_Unity でスマフォ向けに仮想ジョイスティックをつける。 | Lonely Mobiler
_テラシュールウェア [Unity3D]スマートフォンに仮想パットを付ける
しかし、見るからに、アナログスティック。
アナログスティックでは、デジタルな十字キーの代替にならない。これは既に、自分が中高生の頃に、MZ-700上で体験した。ゲームをもっと快適に遊びたいなーと思って、MZ-700に接続できる、独自規格のSHARP純正ジョイスティックを買ったのだけど。X軸とY軸が0〜255の値を返すアナログスティックだったので、快適になるどころか拷問レベルのプレイ感覚を味わって。…「知らないまま買っちゃったのかよ?」と笑われそうだけど、アナログなジョイスティックがこの世に存在するなんて、当時の自分は知らなかったのです。
てなわけで、「ジョイスティック」を使えば遊びやすくなるとは一概に言えない。ジョイスティックの種類によりますよ、と。
ということで、Unityが標準で用意してるバーチャルパッドは使えない。自分で、デジタルな十字キー相当を実装する必要がある。そのためには、タッチパネル上のどのへんを押されたか、情報を取得できないと話にならない。
タッチ情報を取得するなら、Unity の場合、 _Input.GetTouch てのが使える模様。
であれば、PC + Unity Editor でアプリを動かした際、このタッチ情報を、マウス情報で代替・エミュレートしてくれるのだろうな。
と思いきや、さにあらず。Unity上では、マウス情報は、あくまでマウス情報。タッチ情報は、あくまでタッチ情報。別々になったまま。つまり、PC + Unity Editor しか持ってない状況では、タッチパネル操作を取得・エミュレートする手段が無い。要するに、このままではAndroidアプリが作れない。
そこで、 _Unity Remote というAndroidアプリが関係してくる。らしい。
と、ここまでは調べたのだけど。
_Unity でスマフォ向けに仮想ジョイスティックをつける。 | Lonely Mobiler
_テラシュールウェア [Unity3D]スマートフォンに仮想パットを付ける
しかし、見るからに、アナログスティック。
アナログスティックでは、デジタルな十字キーの代替にならない。これは既に、自分が中高生の頃に、MZ-700上で体験した。ゲームをもっと快適に遊びたいなーと思って、MZ-700に接続できる、独自規格のSHARP純正ジョイスティックを買ったのだけど。X軸とY軸が0〜255の値を返すアナログスティックだったので、快適になるどころか拷問レベルのプレイ感覚を味わって。…「知らないまま買っちゃったのかよ?」と笑われそうだけど、アナログなジョイスティックがこの世に存在するなんて、当時の自分は知らなかったのです。
てなわけで、「ジョイスティック」を使えば遊びやすくなるとは一概に言えない。ジョイスティックの種類によりますよ、と。
ということで、Unityが標準で用意してるバーチャルパッドは使えない。自分で、デジタルな十字キー相当を実装する必要がある。そのためには、タッチパネル上のどのへんを押されたか、情報を取得できないと話にならない。
タッチ情報を取得するなら、Unity の場合、 _Input.GetTouch てのが使える模様。
- Input.touchCount に、押された点の数が入ってくるから、それが0より大きければ、タッチされてることが分かる。
- タッチされてるなら、Input.GetTouch(n).phase を見て、指が触れた瞬間か、指を動かしてるのか、指が離されたのかを調べる。
であれば、PC + Unity Editor でアプリを動かした際、このタッチ情報を、マウス情報で代替・エミュレートしてくれるのだろうな。
と思いきや、さにあらず。Unity上では、マウス情報は、あくまでマウス情報。タッチ情報は、あくまでタッチ情報。別々になったまま。つまり、PC + Unity Editor しか持ってない状況では、タッチパネル操作を取得・エミュレートする手段が無い。要するに、このままではAndroidアプリが作れない。
そこで、 _Unity Remote というAndroidアプリが関係してくる。らしい。
- このアプリを、PCとUSB接続したAndroid機にインストールして実行する。
- Android機のタッチパネル情報や傾きセンサ情報を、Unity Remote が、USB経由で、PC側に送ってくれる。
- PC上の Unity Editor が、それら情報を使って画面をレンダリング。
- PC上でレンダリングされた画像が、USB経由で、Android機(の Unity Remote)に送られて、Android機で表示される。
と、ここまでは調べたのだけど。
◎ タッチパネルで十字キー+ABボタンは無理じゃないかな。 :
実際に、どんなボタン配置にしようかなと考え始めたところで、詰まってしまった。どう考えても、イライラムカムカしてくる、クソなバーチャルパッドしかイメージできない…。
てなわけで、諦めました。画面をタップするだけで遊べるゲームじゃないとあかんよなと。あるいは、リアルタイムゲームは綺麗さっぱり諦めるとか。タッチパネルでそういうのは無理。
- ←、→、ジャンプ、ショットの、4つのボタンが必要。たったの4つ。しかし、どんな配置にするか。
- 左右に移動するだけなら、画面の左端と右端のどちらかがタップされたかで判別できそう。しかし、そこにジャンプとショットが追加されると…。
- ショットとジャンプはトリガーだから、タッチした瞬間だけ取得できれば、処理はできる。でも、2種類のボタンを、手触りで確認できないタッチパネル操作で用意するのは、アウトな仕様だよなと。
- 横移動には傾きセンサを使うとか? しかし、傾きセンサはアバウトな入力になるので、イライラするはず。アレはアナログスティックと同類。しかも、傾きセンサや加速度センサを使うと、画面の見え方が変わってしまう。プレイに必要な視覚情報が正確に伝達できなくなるので、当然、シビアな操作も無理になる。
てなわけで、諦めました。画面をタップするだけで遊べるゲームじゃないとあかんよなと。あるいは、リアルタイムゲームは綺麗さっぱり諦めるとか。タッチパネルでそういうのは無理。
この記事へのツッコミ
[ ツッコミを読む(1) | ツッコむ ]
以上です。
あまりに身につまされて思わずコメントしてしまいました。
自分もいくつかアセットストアから入手したもの、あるいは自作のもの、
色々試してみましたがストレスなく操作・・・とはいきませんでした。