UIActivityのローカライゼーション

Unityで、Social Connectorを使うと簡単に、UIActivityが呼び出せる。

uiactivity

しかし、表記が英語になってしまう。
info.plistにてLocalization native development regionjaなどに変えれば指定の言語で表記されるようになる。
ただ、Localization native development regionは基本言語なので、ローカライズさせるには

UIActivity

こちらの値を変えたほうがいいかも。
XCodeProjectUpdaterを使う場合には、自分でつけ足す必要がある。
キーはCFBundleLocalizations、値はJapanseではなくja

ちなみに、LINEへの投稿を増やしたい場合には、iOS9以降許可するスキームの設定が必要。
XcodeProjectUpdaterにてApplication Queries Schemesの値を追加してみたけど、うまく反映されていなかった。
みてみたらSetApplicationQueriesSchemesの処理が抜けているようなので(僕が消した??)、その処理も加えて無事LINEへの投稿もできるようになりました。

AssetBundle化したShaderが外れてしまう

あるシーンをアセットバンドル化した際に、そのシーンで使われているパーティクルが白くなってしまったので調べてみた。
調べてみるとアセットバンドル化した際に、uGUIなどのシェーダーが外れてしまうことがあるらしい。

参考)神様は有給消化中です。 | AssetBundle化したPrefabのシェーダー参照が壊れる現象

AssetBundleManagerのSimulate Modeだと再現できないけど、実際にAssetBundleを読み込んでみると再現できる。

上記のサイトを参考に、パーティクルのGameObjectに対して再度設定するコンポーネントを割り当てたら動いた。

using UnityEngine;
using System.Collections;

/// <summary>
/// アセットバンドル化したパーティクルなどのシェーダーが外れてしまうので
/// それを回避するためにAwakeにて当て込む。
/// </summary>
public class ParticleShaderReset : MonoBehaviour {
	/// <summary>
	/// シェーダー。
	/// </summary>
	[SerializeField]
	string shaderStr;

	/// <summary>
	/// Awake.
	/// </summary>
	void Awake() {
		ParticleSystem ps = this.GetComponent<ParticleSystem>();

		Shader s = Shader.Find(this.shaderStr);

		if (s != null)
			ps.GetComponent<Renderer>().sharedMaterial.shader = s;
		else
			Debug.LogWarning(this.shaderStr + " シェーダーが見つかりません。");
	}
}

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をいじるとループされます。

追記) 19.10.23
RawImage 使わなくても Sprite の Wrap Mode : Repeat と
Image.material.SetTextureOffset(“_MainTex”, v); でスクロールできる。
これなら Tiled でもいける。以前はこの設定がなかったのかも。

アセットバンドルの利用

アセットバンドルの扱い

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

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