絵文字のUGUI処理

今回の主な話題：絵文字のUGUI処理、CreatefromMemoryの使用戦略、Resource.Loadがロードされたときのメモリ変動、Animatorのサンプリング。

---
###メモリ管理
Q1：Unity 5.5.2を使用しています。下の画像は、Redmi 2でテストした8つの特殊効果リソースを示しています。ピーク値は46MBで、その後22.6MBに低下します。このメモリ変動の原因は何ですか？Rendering Batchesが原因ですか？
![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/37af50dc-ba28-0fd8-b790-1f0eafda5fdb.jpeg)
![2副本.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/ddc9b577-b62f-b15e-45d7-04c72e7d2bb0.png)
>問題主が提供する例によると、UWAがテストをしました。この問題はUnity 5.5.2のAndroid実機で確かに再現しました。Redmi 2で四つの粒子特殊効果をロードしますと、ロードする前のメモリは：
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/c5f407b0-1ead-019e-781c-b787d685c8bd.png)
ロードする中のメモリは：
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/defef203-dc7d-1900-1dd7-9d5e5a598cb0.png)
ロードする後のメモリは：![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/6edf1a31-0e44-59c6-d501-2e0007456d69.png)
確かに、Unityのメモリが急速に上昇し、その後下降する「ジッター」現象があります。
これに対して、同じようにRedmi 2で、Unity 5.6.2バージョンの実機テストを実施しました。
ロードする前のメモリは：
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/8623ea88-d646-1c7e-14f8-4cf74932f3ac.png)
ロードする中のメモリは：
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/82052b4e-b9e4-1842-acb1-a5a9cf53898f.png)
ロードする後のメモリは：
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/7d576230-7d8b-5e4e-88bb-0506a2045bc8.png)
まだ、メモリには少量のジッターがありますが、そのジッター範囲は大幅に縮小されています。ですから、R＆Dチームに、 同じフレームにあるResources.Loadの読み込み回数で制御するか、Unityの上位バージョンにアップグレードすることをお勧めします。

---
###UGUI
Q2：UGUIの入力フィールドを使用しています。ユーザーが携帯でシステムに付属の絵文字を入力すると、問題が発生し、Input Field枠に異常を引き起こします。たとえば、一つの疑問符があって、削除できません。何かプレーヤーが入力した絵文字を濾過できる方法がありませんか？または絵文字を他の文字に変える方法ありませんか？私は今、正規表現を使用して絵文字表現のユニコードエンコーディングに一致させていますが、このようにすると、カバレッジが不完全な状況はまだあります。
①
>現在の解決策は、コンポーネントをInput Fieldに掛けて、類似のコードを使って絵文字を濾過することです。ただし、すべての絵文字はまだテストしていません。すべての絵文字を濾過できるわけではありませんが、エラー報告はされません。

>```ruby:
    public char ValidateInput(string text, int charIndex, char addedChar)
    {
    // 絵文字
    if (char.GetUnicodeCategory(addedChar) == UnicodeCategory.Surrogate)
    {
    return ‘\0’;
    }
    }
```
②
>UWAはUnity 5.5.5p2でこの問題を再現しました。しかし、Unity 5.6.2ではそのような問題はありません。アップグレードは実際にリスクをもたらす可能性があるため、あるアドバイスは正規表現を使うことです。この方法も一般的にインターネットで使用されている方法です。
二つ目は、Unity 5.5.5p2とUnity 5.6.2のUGUIコードの変更を比較し（主にInputField）、自分で修復してみます。UnityEngine.UI.dllも自分でコンパイルします。

---
###アニメーション
Q3：Unity 4.x Animatorはエディターでサンプリングを実行できますか？ たとえば、スキルアクションは30フレームです。各フレームのモデルの各ノードの座標回転とスケーリングを知りたいのですが、どうすればよいですか？
>1）アニメーションウィンドウで直接表示できます。
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/374ae240-14ab-25c3-c3d6-5437382fc23d.png)
2）APIを利用します：[AnimationUtility.GetAllCurvesまたはAnimationUtility.GetEditorCurve](https://docs.unity3d.com/460/Documentation/ScriptReference/AnimationUtility.html)を使用して、各ノードの各属性AnimationCurveを取得して、各AnimationCurve.keysにある各[keyframeのvalue](https://docs.unity3d.com/460/Documentation/ScriptReference/Keyframe.html)を取得します。
UWAブログには、アニメーションサンプリング、[GPUスキニング（中国語注意）](https://blog.uwa4d.com/archives/Sparkle_GPUSkinning.html)、[アニメーションファイルの精度を抑える](https://blog.jp.uwa4d.com/2019/11/05/unity%e5%8b%95%e7%94%bb%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e6%9c%80%e9%81%a9%e5%8c%96%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6/)に関する2つのブログがありました。サンプリングに関するコードが含まれています、ぜひ読んでください。

---
###アセット管理
Q4：異なるプロジェクトのAssetBundleは互いに読み取ることができますか？ 暗号化の方法はありますか？ Unityの異なるバージョンとAssetBundleの互換性はどの程度ですか？
>1）Unityのバージョンが対応している限り、AssetBundleはお互いを読み取ることができます。
2）暗号化は一般的なファイル暗号化と同じですが、LoadFromMemoryを介してロードする必要があります。インターネットには多く の方法がありますが、 Googleしてください。
3）Unity 5.xバージョンでは、プロジェクトの上位バージョンは、AssetBundleの下位バージョンの読み取りをサポートしています。AssetBundleでTypeTreeを開く限り（デフォルトは開っている）、理論上問題はありません。

---
###アセット管理
Q5：アセットをロードするためのCreatefromMemory APIに関して、UWAは効率が低いため推奨されていません。dllを更新する必要がありますから、このロード方式を使用していますが、何か他の方法ありませんか？誰もがこのAPIを使用していませんか？ または使用できる特別な状況はありますか？ このAPIの時間消費を最小限に抑える方法は？ 提案をお願いします、ありがとう！
>このAPIがコードのホットアップデートにのみ使用されば、確かにそれを使用する必要があります、納得できます。しなければLuaのような方式を使ってコードのホットアップデートをやります。
UWAは推奨していませんのは、Create / LoadFromMemory APIをリソースのロードに頻繁に使用することです。重要な構成ファイルまたはDLLコードの場合は、このAPIを使用してロードできます。

---
UWA Technologyは、モバイル/VRなど様々なゲーム開発者向け、**パフォーマンス分析**と**最適化ソリューション**及び**コンサルティングサービス**を提供している会社でございます。

UWA公式サイト：https://jp.uwa4d.com
UWA公式ブログ：https://blog.jp.uwa4d.com