2014年1月アーカイブ

Unityでは端末固有ID取得用に SystemInfo.deviceUniqueIdentifier がありますが
これはiOS7ではidentifierForVendor、iOS6などではMACアドレスのhashということでなんか微妙な感じ。
identifierForVendorは同じベンダーのアプリが1つでもインストールされていれば変化しないけど
そのベンダーのアプリ全部削除すると、再度インストールするときには変化する。
あと、iOS6.0のidentifierForVendorではバグがあるとか。

今回欲しいのは、不変の端末IDではなくインストールのたびに変わるユニークIDだったので
下記のように.NETの機能を使うと良いみたい。
System.Guid guid=System.Guid.NewGuid();
string 
_uuid=guid.ToString();
36バイトの文字列が生成されます。

初回起動時に生成した文字列をローカルに保存しておきたいわけですが
PlayerPrefsクラスを使います。
//セーブする時
PlayerPrefs.SetString("uuid",_uuid);
PlayerPrefs.Save();
//ロードする時
string _uuid=PlayerPrefs.GetString("uuid");

iOSの場合、PlayerPrefsは /Library/Preferences に保存されるそうなので
iTunesのバックアップ対象になるはず。
iPhoneでAntialiasing (PostEffect)を使いたい時
Unity Pro版だけでは効かず、iOS Proアドオンを買ったら反映された。

あと、AndroidでAnti Aliasing が効かないのはUnity 4.3.2のバグかな。
まだAndroid Proアドオンを買ってないからかもしれない。
追記:Android Proアドオン買ったら有効になりました。

カメラにPostEffect Scriptを付ける以外に
メニュー(Edit→Project Settings→Quality)のAnti Aliasing設定もあるけど
スマホには効かないっぽい。
放置ブログにたまに投稿してみる。
最近はUnityでスマホアプリを作ったりしてます。

で、デバイスを「どっちに傾けたか」知りたい時どうするのかなと調べてみると
ジャイロセンサーの Input.gyro.attitude を使うとか
加速度センサー Input.acceleration で済ませるとかあるみたいですが
結論としては Input.gyro.rotationRateUnbiased を使うのが良さげでした。

Input.gyro.rotationRateUnbiasedは、XYZ各軸の回転速度がVector3型で返ってきます。
デバイスを奥に倒すとXがマイナス、手前に傾けるとXがプラス、
左に向けるとYがマイナス、右に向けるとYがプラス、
時計周りにするとZがマイナス、反時計回りだとZがプラス、という感じです。
速度なので動かすのをやめると値は0に近づきます。

Input.gyro.attitude はデバイスの姿勢をクォータニオンで返すので、たとえば
デバイスの傾きと床オブジェクトの傾きが連動する玉転がしゲームとかの用途向き。
寝転んだ状態での操作をやろうとするには難しい。

Input.acceleration はシェイクジェスチャーとかの用途向き。
常に重力加速がかかってるからそれを元に傾きを求められなくはないけど
余計な動きが加わると値が荒ぶりそう。

アーカイブ