絵文字のUGUI処理
今回の主な話題:絵文字のUGUI処理、CreatefromMemoryの使用戦略、Resource.Loadがロードされたときのメモリ変動、Animatorのサンプリング。
メモリ管理
Q1:Unity 5.5.2を使用しています。下の画像は、Redmi 2でテストした8つの特殊効果リソースを示しています。ピーク値は46MBで、その後22.6MBに低下します。このメモリ変動の原因は何ですか?Rendering Batchesが原因ですか?
問題主が提供する例によると、UWAがテストをしました。この問題はUnity 5.5.2のAndroid実機で確かに再現しました。Redmi 2で四つの粒子特殊効果をロードしますと、ロードする前のメモリは:
ロードする中のメモリは:
ロードする後のメモリは:
確かに、Unityのメモリが急速に上昇し、その後下降する「ジッター」現象があります。
これに対して、同じようにRedmi 2で、Unity 5.6.2バージョンの実機テストを実施しました。
ロードする前のメモリは:
ロードする中のメモリは:
ロードする後のメモリは:
まだ、メモリには少量のジッターがありますが、そのジッター範囲は大幅に縮小されています。ですから、R&Dチームに、 同じフレームにあるResources.Loadの読み込み回数で制御するか、Unityの上位バージョンにアップグレードすることをお勧めします。
UGUI
Q2:UGUIの入力フィールドを使用しています。ユーザーが携帯でシステムに付属の絵文字を入力すると、問題が発生し、Input Field枠に異常を引き起こします。たとえば、一つの疑問符があって、削除できません。何かプレーヤーが入力した絵文字を濾過できる方法がありませんか?または絵文字を他の文字に変える方法ありませんか?私は今、正規表現を使用して絵文字表現のユニコードエンコーディングに一致させていますが、このようにすると、カバレッジが不完全な状況はまだあります。
①
現在の解決策は、コンポーネントをInput Fieldに掛けて、類似のコードを使って絵文字を濾過することです。ただし、すべての絵文字はまだテストしていません。すべての絵文字を濾過できるわけではありませんが、エラー報告はされません。
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)アニメーションウィンドウで直接表示できます。
2)APIを利用します:AnimationUtility.GetAllCurvesまたはAnimationUtility.GetEditorCurveを使用して、各ノードの各属性AnimationCurveを取得して、各AnimationCurve.keysにある各keyframeのvalueを取得します。
UWAブログには、アニメーションサンプリング、GPUスキニング(中国語注意)、アニメーションファイルの精度を抑えるに関する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
Author And Source
この問題について(絵文字のUGUI処理), 我々は、より多くの情報をここで見つけました https://qiita.com/UWATechnology/items/65deb78dd0cf1909d702著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .