子ノード内のオブジェクトがリスポーンした際に位置がずれる問題について

皆様、こんにちは。

本日は自分のプロジェクトに必要な設定のテストを行っており、GTX1060のGPUを使用している際にデバッグ時のフレームレートが不安定になる現象がありました。

これは同じシーン内のオブジェクト(GameObject)が多すぎることに起因しており、オブジェクトの数を減らすとフレームレートは改善されます。

そこで、標準搭載のBasesSettingsノードを使用してパフォーマンス最適化の方法を試みることにしました。例えば

このような簡単な設定を行うことで、カメラがオブジェクトに近づいたときに生成し、カメラが離れたら削除するというパフォーマンス最適化を実現できます。

しかし同時に、リスポーン(復活)するオブジェクトが何らかの子ノードにある場合、そのオブジェクトは本来の生成位置でリスポーンされないことがわかりました。

位置がずれてしまいます。すべての子ノードにあるオブジェクトは、最初の生成位置でリスポーンできません。

具体例を挙げます:

image

AとBの生成位置はここです。こうすれば、消えても同じ位置でリスポーンします。

しかし、

image

Bを何らかの子ノードに配置した場合、プレイヤーが最初にこの場所に来ても、上記の画像のように表示されます。

しかし、このシーンを離れてから戻ってくる(つまり、削除してリスポーンする)と、Bの位置はここにはなりません。

一連の調査の結果、リスポーンするオブジェクトはおそらく親ノードの位置に移動されているようです。これは奇妙です。

例えば、親ノードを移動の基準として利用しているオブジェクトがある場合、それらはリスポーン後も親ノードの移動ポイント内に留まりません。

親ノード(左右移動)

子ノード(オブジェクトA)

オブジェクトAもまた、生成位置でリスポーンできません。リスポーン後も移動しなくなります。

カメラによるリスポーンでも、アクションによるリスポーンでも、オブジェクトを初期位置でリスポーンさせることができません。

これは不合理に思えます。これはバグでしょうか、それとも動作原理を正しく理解していないのでしょうか?

ご教示いただけますと幸いです。よろしくお願いいたします。

素晴らしい情報ですね、共有させていただきます。

回避策として、なぜそれらを子要素にする必要があるのでしょうか?整理のためでしょうか、それとも機能的な理由でしょうか?

仕組み上の考慮事項として、

例えば、移動しない固定オブジェクトがある場合、そのオブジェクト自体を配置するだけで済みます。

しかし、同じオブジェクトがいくつかあり、それぞれ異なる場所に移動させる必要がある場合、最も簡単な方法は、そのノードに移動用の空オブジェクトを追加し、固定オブジェクトをその子ノードに配置することです。これは非常に便利です。

ところが、復活位置が正しくないという問題でつまずいてしまいました :downcast_face_with_sweat:

「いいね!」 1