Unity無限ループによって引き起こされた完全スタックを見つける方法

今回の主な話題：Unity無限ループによって引き起こされた完全スタックを見つける方法、Unity AssetBundle単一パッケージサイズの設定方法、MaterialPropertyBlockでStencil関連パラメーターの変更、リニアワークフローでアクションファイルがシェーダーカラーの歪みをコントロールする問題、HwaweiスマホでDrawMeshInstancedIndirectが失効する問題。

---
###Script
ゲーム実行中に、ある特定の状況下でUnityが突然スタックし、タスクコントローラーのUnityプロセスのメモリが非常に高い値に急上昇し続けます。

現在のゲームプロジェクトはすでに非常に大きく、スクリプト（Lua+C#）が多いです。この状況が異常ログもないし、ブレークポイントも定位できなく、どちらに無限ループが起きたのもわかりません。この問題に長い時間悩んで、もうアイデアがありません。助けてください！

①
>
debug.sethook関数を使用してHookのHandlerを登録し、各行または各関数のコールをプリントすれば、無限ループの場所を確認できます。この方法でLuaの無限ループを見つけるために使用できます。C#の場合には、別の方法が必要です。

②
>
C#の無限​​ループの場合は、VSを使用してUnityデバッグをアタッチし、ゲーム全体を一時停止してから、メインスレッドに切り替えて、メインスレッドが現在実行されている文を確認できます。

---
###AssetBundle
Unity AssetBundle単一パッケージの適切なサイズはどれくらいですか？

①
>
以前のLZMA形式では、1MB未満にすることが推奨されていましたが、現在はそのような制限はありません。なぜなら、LoadFromFile+LZ4のローディングスピードはもう非常に早いためです。ですから、ファイルサイズについては、ホットアップデート方面から考えするほうがより推奨的で、出来る限りに大きな問題を引き起こさないようにすれば良いです。

②
>
前の人が言った通りです。ローディングスピードはもう問題ではありません。小さすぎたり大きすぎたりしないでください。個人的には、ほぼ1〜10 MBでいいと思います。私は集計に基づいて各パッケージを数MBに個人的に制御します。

---
###Material
ネイティブのSprite-default ShaderにStencilの関する設置を追加し、エディター状態でMaterialPropertyBlockを使用してStencilのCompとRefを変更しました。Inspectorパネルでこの値はもう変更されましたが、Frame Debuggerでこの値は変更前のままで、変更操作は有効になりませんでした。MaterialPropertyBlockを使用してStencilの関連パラメーターを変更することはできませんか？
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/e69d80cc-28d7-b0d9-70c8-5b3c4a918c2f.png)
![2-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/ff9d7129-0929-f362-8910-9ccb8d24e843.png)

>下記の情報を参照できます。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/2e9449bf-d690-ea7d-0260-095dc0542717.png)

---
###Rendering
リニアワークフローでアクションファイルがシェーダーカラーの歪みへのコントロールに関する問題です。
下図はシェーダーを直接設定する場合の色表現です。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/cfc9814a-3617-fdca-8d35-6a3a388c4b54.png)
下図はAnimatorアクションファイルを介してシェーダーを設定する場合の色表現です。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/900b253b-89a3-658d-9933-5c4768ecdabd.png)
なぜ違いですか？シェーダーは[HDR] Colorです。(バージョン：Unity 2019.4.9f)

>リニアワークフローでは、MaterialPropertyBlockに書き込まれたレンダリングカラーパラメータは、レンダリング中にGamma空間に変換され、2.2乗になります。
>
アニメーションを使用してマテリアルの色を変更することは、実際にはMaterialPropertyBlockでパラメータを配置することです。したがって、Kシェーダーを使用してアニメーションを設計する場合は、カラー値の0.4545乗を曲線に書き込む必要があります。

---
###Rendering
Unity 2018.4.24のDrawMeshInstancedIndirectがHuaweiスマホで失敗するのはなぜですか？TestinのHuaweiスマホを使用してDrawMeshInstancedIndirectインターフェイスをテストしましたが、試したすべてが失敗しましたが、他の電話では正常に使用できます。同じような問題に遭った人はいませんか？

①
>
詳細なログを貼り付けて確認してください。そしてHuaweiスマホのデバイス情報を貼り付けてください。最後に麒麟CPUを搭載したHuaweiマシンかどうかを確認してください。

②
>
ドライバーの問題により、OpenGL ES3.0のみのAdreno GPUを搭載したAndroidデバイスにGPUインスタンスのサポートが無効になっています。
>
*Graphics: GPU Instancing: Added support for Android with OpenGL ES 3.0 or newer. Note however that GPU instancing support is disabled for Android devices that have the Adreno GPU with only OpenGL ES 3.0, because of driver issues.*
>
SystemInfo.supportsInstancingを使用して、マシンがGPU Instancingをサポートするかどうかを確認できます。最も安全な方法は、OpenGL ES3.1以降をサポートすることです。

③
>
最後に、原因はHuawei MaliがSSBOをサポートしていないことが判明しました。

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

今なら、UWA GOTローカルツールが**15日間に無償試用**できます！！
よければ、ぜひ！

UWA公式サイト：https://jp.uwa4d.com
UWA GOT OnlineレポートDemo：https://jp.uwa4d.com/u/got/demo.html
UWA公式ブログ：https://blog.jp.uwa4d.com