【Unity】NGUIでマスクによる切り抜き

  • 投稿日:
  • by
  • カテゴリ:
NGUIを使って表示しているものを
クリッピングマスクで動的に切り抜く方法についてのメモ。

例えば、画面全体を黒いUISpriteで覆っていて
その一部を丸くくり抜いて奥が見えるようにする場合。

まず黒いUISpriteは普通に配置。Transformは Z = 0 にする。
次にマスク用GameObjectを配置してTransformは Z = -1 にする。
マスク用GameObjectにUITextureコンポーネントをアタッチする。
UITextureのShaderとして"Unlit/Depth Cutout"を設定する。
UITextureのTextureとしてアルファチャンネル付きの画像を設定するとその形でマスクできる。

Z値でマスク対象が決まるので
Z=0以上のNGUI表示物はすべてマスク対象になる。
Z=-2に設定したNGUI表示物はマスクされない。
Xcode5.1にアップデートしたところ、
Unityで'Build And Run' をしてもXcodeプロジェクトが立ち上がらなくなり下記のエラーが出た。

"UnityException: Launching iOS project via Xcode4 failed. Check editor log for details"

解決策は下記の手順。

1)下記のファイルをテキストエディタで開く
Unity.app/Contents/BuildTargetTools/iPhonePlayer/Unity4XC.xcplugin/Contents/Info.plist

2)下記の行を見つける
<key>DVTPlugInCompatibilityUUIDs</key>
<array>
<string>63FC1C47-140D-42B0-BB4D-A10B2D225574</string>
<string>37B30044-3B14-46BA-ABAA-F01000C27B63</string>
</array>

3)<array></array>内に下記を追記する
<string>A2E4D43F-41F4-4FB9-BB94-7177011C9AED</string>

4)保存して、Xcode再起動



参考ページ:

【Unity】UUIDの生成と保存

  • 投稿日:
  • by
  • カテゴリ:
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のバックアップ対象になるはず。

【Unity】iOS Proとアンチエイリアス

  • 投稿日:
  • by
  • カテゴリ:
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】ジャイロでスマホの傾き取得

  • 投稿日:
  • by
  • カテゴリ:
放置ブログにたまに投稿してみる。
最近は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 はシェイクジェスチャーとかの用途向き。
常に重力加速がかかってるからそれを元に傾きを求められなくはないけど
余計な動きが加わると値が荒ぶりそう。
最寄りのカフェを地図上ですばやく見つけられるアプリをリリースしました。

・6100件以上のカフェ/喫茶店を収録。(次回の更新で7566件に増えます)
・犬同伴で利用できる「ドッグカフェ」も180件収録。
・fousquareに登録されたカフェを表示して、チェックインできます。

あったら便利そうだから作ろうかなーと思ったまま数年経ち、
最近になって似たようなアプリがいくつか出ててそれなりに需要ありそうなので
負けじとリリースしてみました。

たった85円です。ぜひ買ってください!お願いします。

Macを買ってくるところから始めて制作期間2週間くらい。
Titanium Studioを使って開発しました。

TwiPla - イベント告知・出欠管理サイト
この手のサイト、海外には結構ありますが、日本語のがあればいいなと思い作ってみました。
かなりシンプルな作りです。要望があれば改良していきます。
ATNDでいいじゃん、と言われそうですが、まぁ気軽に使ってもらえればと思っています。

普段Flashばかり使ってて、こういうサイト作るのは初めてなんだけど
なかなか面白いね。今回はCakePHPを使いました。