0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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


メモリ

Q1: Unity 2017.2.0バージョンを使用しています。PCエディターで、ProfilerにGfxDriverが増加していることが示されています。調査した結果、Canvasにある一つのゲームオブジェクトが原因であります。このゲームオブジェクトのコンポーネントは次のとおりです。
1.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のスプラッシュ画面イメージを直接提供できますから、この手順はスキップできます)

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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?