numalog

ぬまおうの活動日誌

Archive for 5月, 2013

Androidアプリ開発tips 開発環境整備について

without comments

自分が経験したり、開発をしていて思ったことを述べていきます。

  • 開発、デバッグは基本的に実機がおすすめ

エミュレーターだと速度面で不安が出たり、また現実のデバイスとPCモニタ越しでは、UIの受ける印象が違います。
他にもエミュレーターだとPlayStoreなど一部プリセットアプリが入っていなかったり、
現実のデバイスが持っている、物理的ハードウェアの影響、テストが難しかったりします。(bluetooth、wifi、3G回線でのテストなど)

安タブレットでもいいので、とにかく実機を使うべきです。

Androidは同じバージョンでも、端末やメーカーによって挙動が変わるので、エミュレーターで動いたからと言って実機で動くとは限りません
あくまで実機で持っていないバージョンでの、軽い動作検証程度で使うべきです。

たとえばエミュレーターでありがちな見落としで、manifestにconfigChangesを設定していないせいで、実機だとローテーションしてしまいonCreateやり直し、そのせいで予期せぬ挙動になってしまう
とかがあり得ます。このようにエミュレーターだとすぐにおきなくても、実機でならすぐに起きて気づける現象もあります

  • どうしてもエミュレーターを使いたいときは,HAXMを使う。

IntelCPU限定ですが、HAXMというのをインストールするとエミュレーターの速度が劇的に改善します。
必ず、自分のPCで使えるかを試してみるべきです。   http://note.chiebukuro.yahoo.co.jp/detail/n134146
HAXM有効かについて、よくまとまっている記事ですのでおすすめです。

これ以外にもVirtualBoxで動かす という手段もあるそうなのですが、自分は試したことがありません。

  • コンソール(コマンドプロンプト)からadbを使う

Windowsでしたら、ぜひadbへパスを通しましょう。
通し方は、
http://www.techmaru.net/wordpress/20100516/androidsdk/
がよくまとまっていておすすめです。

adb install (apkファイルをusb経由でインストール) や、adb connect(ipを指定して、ネットワーク越しにandroidに接続できる)、adb device(接続ができているデバイス一覧の取得)や、logcatを拾ったり・・・
と開発に便利なことがいろいろとできます。

  • 出来ればwindowsでの開発は避ける

なぜかというと、Windowsではandroidの実機1台ごとに、いちいちメーカ製ドライバを入れなくてはいけないので、複数端末で検証するとき非常にめんどくさいです。
MacやLinuxでは必要なく、基本的にただつなげるだけで、全デバイスが認識されます。

また特にandroidだけの話ではなく、文字コードやwindowsの特殊なファイルパス、gitなど便利なソフトが大体windows対象ではない、ターミナルの使い勝手 etc…などの理由で、
基本的にプログラミング開発環境はMacやLinuxなど、Unix系を使用することをお勧めします。

と言っておきながら自分はwindowsだけど…


Written by numa

5月 4th, 2013 at 12:52 am

Posted in プログラミング

Tagged with

Unity tips #3 OnTrigger、OnCollision関数について

without comments

同様に過去記事からサルベージ。

実は、 OnTrigger、OnCollision関数が適応されるかどうかは条件があります。
これを知らないでやると、なぜか接触を感知しなかったり、かとおもえば突然動いたりなど不具合が出まくるので注意。

Collision detection occurs and messages are sent upon collision
Static Collider Rigidbody Collider Kinematic
Rigidbody Collider
Static
Trigger Collider
Rigidbody
Trigger Collider
Kinematic Rigidbody
Trigger Collider
Static Collider Y
Rigidbody Collider Y Y Y
Kinematic Rigidbody Collider Y
Static Trigger Collider
Rigidbody Trigger Collider
Kinematic Rigidbody Trigger Collider
Trigger messages are sent upon collision
Static Collider Rigidbody Collider Kinematic
Rigidbody Collider
Static
Trigger Collider
Rigidbody
Trigger Collider
Kinematic Rigidbody
Trigger Collider
Static Collider Y Y
Rigidbody Collider Y Y Y
Kinematic Rigidbody Collider Y Y Y
Static Trigger Collider Y Y Y Y
Rigidbody Trigger Collider Y Y Y Y Y Y
Kinematic Rigidbody Trigger Collider Y Y Y Y Y Y

この表でYとついているところが判定が行われる組み合わせで、それ以外のところでは正しく行われません。
当たり判定を行わせるオブジェクト同士が空白の部分の組み合わせになっていると、不可解な挙動をします。
両方Kinematic&Rigidbodyを与えると上手くいきます。


Written by numa

5月 3rd, 2013 at 4:38 am

Posted in プログラミング

Tagged with

Unity tips #2 カメラスクリプトの書き方

without comments

前回に引き続いて、過去の記事から、需要がありそうなのをサルベージして張ります。

追尾型 カメラスクリプトの書き方

基本的なところをざっと。 括弧の中は仮の変数名。

  • Player位置からカメラへ向うベクトル(vectorToCamera)を求める。

this.transform.position-Player.transform.position と計算

注意点で、カメラとプレイヤーのx,z座標が同じとき、 vectorToCamera が零ベクトルになってしまうので正常に動かない可能性があります。
すこしでもx,z座標がずれてれば正しく動くはずなので、カメラとプレイヤーの初期x,z座標はずらす必要があります。
もしくは、プレイヤーとカメラのx,z座標が同じときは、適当な数字にずらすようにスクリプトで書いてあげればよいでしょう。

  • 目標カメラXZ位置(wantedPosition)として、Player.transform.position + xzVectorToCamera*distanceと計算

distanceはどれぐらいの距離を保ちPlayerの後を追尾するか。
カメラのY位置は個別に指定したほうがよい。よってvectorToCameraのy成分を0にしてNormalizeしたものをxzVectorToCameraとする。

  • 目標カメラY位置(wantedPosition.y)は個別に、Player.transform.position.y + yHeightとする。

yHeightで カメラの高さを設定。

  • wantedPositionをそのままtransform.positionにいれるとカメラの動きが俊敏すぎてガクガクしてしまう。

これを防ぐために Vector3.LerpやMathf.Lerpを使い、現在のtransform.positionと補間をおこなうと滑らかな動きになる。

例)
transform.position = Vector3.Lerp(transform.position,wantedPosition,damping*Time.deltaTime)
変数dampingで追従移動の滑らかさを指定する

位置の決定はこれでよいものの、これではカメラは追従するだけでプレイヤーの方を向かないので、そこについての処理を書く。

  • プレイヤーの方を見るようなカメラの回転を計算する(targetRotation)。

Quaternion.LookRotation(-vectorToPlayer)とやれば簡単

  • 例によって、これをtransform.rotationにいれるだけだとガクガクなので、

transform.rotation = Quaternion.Slerp(transform.rotation,targetRotation,rotationDamping*Time.deltaTime)

と補間をして滑らかに回転させる。

これが自分が使っているカメラの基本挙動。
これに加えてy成分を地形に沿わせて上下させたり、
Playerの移動をカメラと相対的な動きにさせると、結構時のオカリナっぽい挙動になります。


Written by numa

5月 3rd, 2013 at 4:32 am

Posted in プログラミング

Tagged with