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

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

---
###メモリ
Q1: Unity 2017.2.0バージョンを使用しています。PCエディターで、ProfilerにGfxDriverが増加していることが示されています。調査した結果、Canvasにある一つのゲームオブジェクトが原因であります。このゲームオブジェクトのコンポーネントは次のとおりです。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/5fd5a43c-4c45-10ac-3671-0c6f7971489c.png)
このゲームオブジェクトを閉めると、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のスプラッシュ画面イメージを直接提供できますから、この手順はスキップできます）

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

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