Unity IAP (In App Purchase)

iap
Unity5.3からUnity IAPがBetaで実装されたので使ってみようかなと思ったのでメモ。
下準備は、Soomlaのときと同じ感じで準備して、実装自体はSoomlaよりも簡単。
そもそもSoomlaのように、アイテムの個数の管理を端末で行ったりしないのでその辺の処理が一切必要なくStoreとの連携だけなのでシンプルで扱いやすい。サンプルが入っているので、中身を見ればだいたいわかる。
ただ、上の画像のようにUnity Analyticsを無効にするとUnity IAPも揃って無効になってしまう。逆にいうと、Unity IAPを入れるとUnity AnalyticsもONとなるので、おそらく購入の際のログが保存されるんじゃないかな??
このログは自分のアカウントと紐付いているので、クライアント案件のお仕事だと購入や起動などのログのデータをこちらのアカウントで保存するのはまずい気がするので今回は使用を控えようかなと思った。
ログのデータ自体は移行できるっぽい(?)けどクライアントにそもそもUnityアカウントを用意してもらう必要があるし、Personalアカウントの場合は月25ドルかかるらしい。

参考)
TechBuzz Unity勉強会 #35 | Unity Cloud BuildとUnity Analytics

ムービーを外部へ保存して扱う

mp4などのムービーをHandheld.PlayFullScreenMovieなどで使うときは、Unity用の変換がされないようにStreamingAssetsフォルダに格納する必要がある。
StreamingAssetsに置くとUnity用の変換がされず、生のデータとして扱えるけどムービーなどの大きなファイルの場合書き出した本体ファイルが大きくなってしまう。
そこで、アセットバンドルの仕組みでムービーを外部に置きたいけど、アセットバンドル構築の際に

‘MovieTexture’ is not supported when building for ****.

と怒られてしまう。
Continue…

違う環境でMissing Prefabになるケース

Missing Prefabになるケースはいろいろあると思うけど、Blenderファイルを使っていると相手の環境にもBlenderが入っていないとダメですね。
Blenderを入れてもらって、Projectウィンドウの該当のBlenderファイルを右クリックしてReimportをすればOK!

uGUIでのテクスチャのループ

uGUI Loop

uGUIにてテクスチャをOffsetでリピートさせるには。

・ImageではなくRawImageを使う
・テクスチャのTexture TypeはSpriteではなく、Textureに設定
・テクスチャのWrap ModeをRepeatにする

あとはRawImageのUVRectのx, yをいじるとループされます。

アセットバンドルの利用

アセットバンドルの扱い

アセットバンドルを利用してみたのでメモ。
Unity5では4にくらべてだいぶ楽になったと聞きましたが、それでもなかなか大変ですね。
最終的にはAssetBundle Manager & Example ScenesというUnityから公式で出されたものを利用するのが良さそうです。
このライブラリは2015/09/11に出たのでまだ新しいですね。

まずは自力でやる場合。(Unity5以降)
Continue…

Google Play Marketにて100MB以上のアプリをストアにアップロード

iTunes Storeでは問題ないんですが、Google Play Marketにアプリを登録する際にアプリが100MB以上だとファイルを分割しないといけないらしい。
メインのapkファイルと、obbファイル(Opaque Binary Blob)というものに分ける必要がある。
obbファイルというのは暗号化されたディスクイメージみたいなものらしい。
詳しくはこちら
キノコの自省録 | Expansion Filesについて(1) – obb作成編

分割自体はUnityであればビルドセッティングのAndroidのPublishing Settingsから
split_app_binary
この「Split Application Binary」というのをチェックすれば自動で分けてかき出してくれるので便利。

作られたapkとobbをアップロードすればあとは自動でアプリをインストール時にobbファイルも追加で落としてくれて一件落着…なのですがどうもobbファイルのダウンロードに失敗したりディスク容量やネットワークの関係やユーザーのキャンセル操作で落とされないことがあるらしい…
その際の対処処理は自前で書かないといけなく、そのためのライブラリ「Google Play OBB Downloader」もUnityから提供されている。

これを使って実装をすると
Continue…

Standard Shaderのレンダリングモードの変更

standard_shader_rendering_mode

Standard Shaderにて、透過するときはRendering ModeをTransparentかFadeを選ぶことになる。
Transparentだと反射した部分だけ描画が残るのでFadeを使うんだけど、どうも不透明のときにレンダリング結果がおかしくなる。(画像中央)
なので、不透明の際と透明の際とでRendering Modeを切り替えようとおもって

this.renderer.material.SetFloat("_Mode", 2f);

などで切り替えてもどうも反映しない。
おかしいなと思って調べてみると

Material m;
m.SetFloat("_Mode", 2);
m.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
m.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
m.SetInt("_ZWrite", 0);
m.DisableKeyword("_ALPHATEST_ON");
m.EnableKeyword("_ALPHABLEND_ON");
m.DisableKeyword("_ALPHAPREMULTIPLY_ON");

という感じで色々なShaderの値の変更が必要らしい。
参考)
Unity | Answers | Standard material shader ignoring SetFloat property

こちらのサイトの下の方みたいに、拡張として用意しておくと便利。

Any Stateからアニメーションがループする

can_transition_to_self
MechanimでAny StateからTriggerでアニメーションを設定すると動きがループしてしまった。
パラメーター増やしてなにか工夫しないとな〜と思ってたんだけど調べてみたらトランジションのプロパティに「Can Transition To Self」というパラメータがあったのでこれを使えば解決できそうも。