Instance IDの定義
今回の主な話題:Instance IDの定義、モデルMesh Compression導入設置、Static BatchingがDrawCallへの影響。
アセット管理
Q1:公式ドキュメントでInstance IDへの定義は次のとおりです。
「The instance id of an object is always guaranteed to be unique.」
したがって、一つのSpriteアセット、ゲーム内のInstance IDは唯一はずですが、テスト中に妙な問題が起こしました。
これはプリントImageにあるSpriteのInstance IDですが、アセットファイルにこの画像を選択し、InspectorのDebugモードで表示されたInstance IDと一致しません。
後で、Imageに対応するSpriteのGUIDをプリントしました。.metaファイルのGUIDに対応しているため、Instance IDに一致性がない理由がわかりません。
私はそう理解しています。コードで取得したInstance IDと、Inspectorで確認された画像のInstance IDが属するオブジェクトはインスタンスではありません。つまり、Instance IDの唯一性は具体的なアセットではなく、オブジェクトインスタンスに対するものです。
たとえば、プロジェクト内のPrefabファイルのInstance IDと、シーン内のインスタンス化されたオブジェクトのInstance IDも異なります。
アセット管理
Q2: 3Dモデルをインポートすると、Mesh Compressionの設置は、最終的にどんな結果を導きますか?Unityのドキュメントを読んだで、それはメッシュのストレージの圧縮最適化にすぎないようです。直接的な利点は、パッケージ本体が小さくなることですが、一部のモデルが変形しやすくなることもあります。
では、問題は下記のようです。
1)ロード時には圧縮により遅くなりますか?または、圧縮完了後にMeshにロードして初期化する速度は早くなれますか?(パッケージが小さくなりましたから)
2)これを開くと実行中のパフォーマンス最適化に役立ちますか?
3)このスイッチは法線効果に影響しますか?
4)このオプションを開くことをお勧めしますか?
1)数値上の精密桁数のみが削減されるため、ロード速度の差は小さいはずです。さらに、メッシュ自体がそれほど大きくない場合、ロード速度は非常に高速ですから、ロードの違いを気にする必要はありません。
2)ドキュメントによると、Compressionをオンにするかどうかに関係なく、ロード後にメモリ占用が同じになりますから、実行時のパフォーマンスに違いはないはずです。
3)法線の部分が圧縮されるかどうかは本当に言いにくいので、具体的なプロジェクトと組み合わせて確認する必要があります。
4)このオプションを有効にするかどうかは、モデル自体によって異なります。アーティストさんが視覚的に許容できると感じる限り、Compressionをできるだけ高く選択すれば良いです。
レンダリング
Q3:UWA Blogで前の記事を読みましたが、一つ疑問があります。なぜStatic BatchingはDrawCallの数 に影響しませんか?
正確には、Unityバージョン5.0〜5.3で、Static BatchingはGraphics DriverにあるDraw Callの回数を影響しません。これは、これらのバージョンでは、Unityが4.xのようにindex bufferを動的にバッチ処理しないためです。この点は、UWA DAYでもう詳しく説明しました。
ただし、Unity 5.4バージョン以降、Draw Callバッチ操作は元に戻され、以前の4.xと同じであるため、現在Unity 5.5、5.6、および2017以降のバージョンを使用している場合は、Static Batching後にDraw Callは変わる可能性があります。
コード
Q4:サブクラスが親クラスのシリアル化されたフィールドがInspectorに表示されないようにする方法はありますか?注:親クラスフィールドはvirtulではありません。
PropertyAttributeは実現できはずです。考え方は大体次とおります。PropertyDrawerは、OnGUIの時にSerializedObjectのタイプを判断し、それが親クラスである場合にのみ本格的な描画を行います。
UWA公式サイト:https://jp.uwa4d.com
UWA公式ブログ:https://blog.jp.uwa4d.com
UWA公式Q&Aコミュニティ(中国語注意):https://answer.uwa4d.com