GfxDriveメモリリークに注意しろ

今回の主な話題:UGUI Android 「前髪」スクリーンの適応、UWA GOT Monoテスト スタック、Unityで作成したメッシュの頂点カラーをクリアする方法、MeshBakerの適用性。


メモリ

Q1: Unity 2017.2.0バージョンを使用しています。PCエディターで、ProfilerにGfxDriverが増加していることが示されています。調査した結果、Canvasにある一つのゲームオブジェクトが原因であります。このゲームオブジェクトのコンポーネントは次のとおりです。

このゲームオブジェクトを閉めると、GfxDriverはすぐに増加を停止します。この方法でアニメーションを作成するとメモリリークが発生し、このバージョンのUnityに問題があると思っています。だからこのゲームオブジェクトを空きシーンに入れましたが、GfxDriverは増加していませんでした。ここまで、問題をさらにトラブルシューティングする方法がわかりません。

これはUnity2017のUGUIのバグです。Unity2017.1のEditorバージョンでもReleaseバージョンでもこのリークが発生します。

Releaseバージョンは2017.2以降に修復されますが、Editorバージョンは2017.4.1まで修復されません。

実機バージョンに対して、現在のバージョンでは心配する必要がありません。メモリが大きすぎるためにEditorバージョンが常にクラッシュすることが心配な場合は、2017.4.1以降にアップグレードしてみてください。


UI制作

Q2:誰かがUGUI Android前髪スクリーン(Honor 10など)の適応を行った人はいますか?何かシェアできる経験はありますか?

簡単な解決策を挙げます。iPhone Xを例とすれば。

1)launch imageを準備して、iPhone Xの両側にあるデフォルトの黒い辺をオフにします。(Unity 2017以降、xのスプラッシュ画面イメージを直接提供できますから、この手順はスキップできます)

cp -R "../yourPorject/Assets/ArtResources/SplashScreen/iphonex_h.png" "./Unity-iPhone/Images.xcassets/LaunchImage.launchimage/iphonex_h.png"
cp -R "../yourPorject/Assets/ArtResources/SplashScreen/iphonex_v.png" "./Unity-iPhone/Images.xcassets/LaunchImage.launchimage/iphonex_v.png"
cp -R "../yourPorject/Assets/ArtResources/SplashScreen/Contents.json" "./Unity-iPhone/Images.xcassets/LaunchImage.launchimage/Contents.json"

2)UGUI Rootの下に、すべてのUIの祖先レイヤーとして、desktopの概念があります。水平方向と垂直方向の両方をstretchに設定し、Topを88に、Bottomを-88に設定します。 (88は最小間隔、132は公式に推奨される安全間隔です)。2番目のステップは他のUIユーザーに対して透過的であり、意味のないUI画像が両側に表示されるため、UIの作成にはほとんど影響しません。全体的な改造プロセスは非常に短いので、試してみることをお勧めします。

PS:iPhoneXのバーは考慮されていません。

 

一つ簡単な解決策があります。それは、上部インターフェースに対して水平と垂直方向に自動的に伸びるRectTransformを配置することです。それがiPhoneXであることを検出したら、インターフェースコードを開き、Left Top RightBottomを自動的に44に設定します。この解決策は雨松で見ましたが、非常に簡単な方法です。もちろん、場所によっては微調整が必​​要な場合もあります。


アセット

Q3:Unityで作成したメッシュはなぜ頂点カラーが付けてありますか?どうすればつけていないメッシュを作成できますか?またはどうすればUnityに頂点カラーを消去できますか?

以下の方法はもう試しました。

1)mesh.color = null、mesh.colors32 = null。役に立ちません。

2)再びに一つ頂点カラーを付けていないMeshをnewします。役に立ちません。

3)objに変換してUnityに入れてみると、意外に頂点カラーはまだ付けています。ただし、objをMaxに入れてみると付けていませんでした。FBXに転換してプロジェクトに入れると、再びに付けました。

いくつか調べたところ、問題が見つかりました。Use Direct3D 11オプションをオフにして、Unityを再起動したら解決できます。Use Direct3D 11をオフにした後、メッシュを再作成し、この時点に頂点カラーはもう付けていません。Objファイルと頂点カラーのないFBXファイルを直接にプレビューすると、頂点カラーもありません。スイッチの位置:Edit>Project Settings>Player>Other Settings>Use Direct3D 11(PC)


Monoメモリ

Q4:MeshBakerを使用して動的にモデルをバッチ処理します。動的にモデルをバッチ続き時に大量のGCが生成されます。追加するほど、生成されるGCは多くなり、サイズは4MBになる可能性があります。これはどんな状況ですか?MeshBakerは動的モデルのバッチ処理には適していませんか?

そうです。Mesh Bakerプラグインは、上位層でメッシュデータを大量にバッチします。その間、多数のVertex Arrayを生成する必要はあり、大量のMonoメモリの割り当てを引き起こします。複雑なMMO、ARPGなどのMeshバッチ処理を大量に行う必要のあるプロジェクトに、一般的にMeshBakerプラグインはお勧めしません。

静的オブジェクトの場合、実際にはStatic Batchingを介して直接実行できます。通常、Mesh Bakerは、あるチームがゲームの実行時に動的にBatch Skinned Meshを行います。これは、数が多い場合はお勧めしません。


GOT

Q5:今日からGOTを使って始めました。Monoをデバッグすると、戦闘が始まったばかり時によくフリーズし、OverviewもAssetsもこのようにはならないです。この原因は何ですか?フリーズしたときに一部のアセットはロードされているはずだけど、これと関係ありますか?

これは、現時点でMonoメモリが超大量に割り当てられていることを示しており、UWA GOTは、これらの割り当てのMonoメモリ情報を記録するために多くの計算が必要です。さらに、アセットをロードする時にlogの出力も伴う場合、遅い程度を厳重化させる可能性もありますので、先にlog出力を閉じようとすることをお勧めします。


UWA公式サイト:https://jp.uwa4d.com

UWA公式ブログ:https://blog.jp.uwa4d.com

UWA公式Q&Aコミュニティ(中国語注意):https://answer.uwa4d.com