カメラビューの外側にあるゲームオブジェクトは、Unityのコンピューター/モバイルリソースを消費しますか?


11

一体で、カメラに表示されず、ゲームの実行中にレンダリングされないゲームオブジェクトがシーンにあるとします。

これらのゲームオブジェクトは、ゲームの実行中にコンピューター/モバイルリソースを消費しますか?

このような使用法の詳細はどこにありますか?

回答:


13

あなたが欲しいのはUnityが持っているメモリプロファイラーです。ここ:http : //docs.unity3d.com/Manual/ProfilerMemory.html

しかし、あなたの仮定はほとんど正しいです。gameObjectがカメラに表示されない場合、ゲームオブジェクトは描画されず、使用するリソースは少なくなりますが、それでも消費する必要があります。すべてのテクスチャ、モデルスクリプトなどを含め、gameObjectは引き続きメモリに存在します。また、UpdateメソッドとFixedUpdateメソッド(およびここで説明するその他のさまざまなメソッド)を通じてCPU時間を消費します。

ただし、通常、主な速度低下は描画です。オブジェクトがカメラの錐台(境界)の外にあることを確認するために少量のCPU時間が使用されますが、描画は行われません。


5

Frustrum Culling、または隠れた表面の除去についても知っておくべきだと思います。http//en.wikipedia.org/wiki/Hidden_​​surface_determination

これは、ゲームを最適化するための重要なビットです。オブジェクトが特定のフレーム(つまり可視)で錐台の内部にない場合でも、一部の描画呼び出し(シェーダー)が起動され、パフォーマンスが低下するためです。


2
@ Gissipi_453、これらのラインに沿って調査しながら、クアッドツリーとオクトツリー(空間データの並べ替え)も調査します
Jon

3

短い答えは「はい」です。ゲームで使用する準備ができているものはすべてメモリを消費しています。

考慮すべきもう1つのことは、フレームレートのコストです。

5つの個別のテクスチャを持つ5つのオブジェクトは、個別に描画され、その間の状態変更が必要です。使用されていないテクスチャをアンロードすることで、メモリを節約できる場合があります。

個別のテクスチャすべてを単一のアトラステクスチャにロードすることにより、メモリのフットプリントが固定され、個々のテクスチャをアンロードできなくなります。作成したら、アトラスを一度バインドするだけで、すべてのオブジェクトを描画できます。

別の例は、単純な頂点とインデックスバッファーです。多くのポイントが表示と非表示を頻繁に切り替える場合は、「古くなった」ポイントを頂点バッファーに残し、新しいインデックスバッファーのみをアップロードする方が高速です。

他の多くの場合、初期のメモリコストの増加が多くの状態変化よりも好ましい場合があります。

カメラを回転させても、そのオブジェクトを確認するためにカメラが回転して戻らない場合を除いて、これらのオブジェクトを破壊することは絶対にありません。」– Katu

例としてサイドスクローラーを使用すると、右にしか移動できない場合(マップは左にスクロールするだけです)、画面の左側からスクロールオフしたオブジェクトは、再び使用することがないため、完全にアンロードできます。さらに、オブジェクトが右からスクロールして表示される直前に、オブジェクトのコンテンツをディマンドロードできます。


1

多くの回答は、主に質問のグラフィックスの側面を考慮しています。

実際には、それらはさまざまなリソースを消費し、オブジェクトの描画と比較してそれらがどれほど高価になるかは固定されていません。コンポーネントが描画よりも高価な操作を行うことを示唆するいくつかの回答ほど珍しいことではありませんが、使用するリソースの数を最小限に抑えることができます。また、GameObjectは少量のメモリを使用するため、コンポーネントも使用することに注意してください。コンポーネントは、かなりのメモリを占有していることも行っている可能性があります。

オフスクリーンコンポーネントの影響を最小限に抑える最も簡単な方法は、OnBecameVisibleおよびOnBecameInvisibleコールバックに基づくシステムです。

void OnBecameVisible()
{
    myComplexComponent.enabled = true;
}
void OnBecameInvisble()
{
    myComplexComponent.enabled = false;
}

もちろん、画面外のオブジェクトがゲームに影響を与えたい場合がたくさんあるので、それは非常に限られた有用性です。ただし、この種のパターンを拡張して、最も高価な計算の影響を最小限に抑えることができるきめの細かいシステムを実現できます。オブジェクトが画面外にあるときに、スクリプトをたどるパスの品質などの単純なものでも、長期的には大きな節約になります。


1

それを存続させ、その位置やその他のプロパティを更新するにはメモリが必要です。

ただし、表示されないため、コンピュータ/モバイルグラフィックリソースは消費しません。

つまり、メモリリソースは消費しますが、可視のゲームオブジェクトのようにグラフィックリソースは消費しません。


どうもありがとう。これは私が探していた非常に直接的な答えです。
Gissipi_453

0

プログラム内にあるものはすべてリソースを消費します。あなたはプログラムが単に希望と夢に基づいて実行されているとは思わないでしょう?

問題は、ゲームオブジェクトがどれだけのリソースを消費するかであるはずです。そのためには、これはかなり確かな答えだと思います:http : //answers.unity3d.com/questions/280455/how-much-memory-a-gameobject- consume.html

要するに、彼らは自分で取るに足りない資源を消費しています。しかし、ゲームに座って何もしないでゲームオブジェクトの束が必要なのはなぜですか?結局のところ、実際にそれらのゲームオブジェクトを「実行」させるのは、あらゆる種類のオーバーヘッドを引き起こすものであり、必要なリソースの量はケースバイケースで非常に多くなります。


どうもありがとうございました。それで、ゲームの実行中にカメラから見えなくなったオブジェクトを破壊する必要がありますか?
Gissipi_453 2015年

1
この答えはあなたの質問に実際に答えようとするものではなく、単に間違っていると思います。カメラを回転させても、そのオブジェクトを確認するためにカメラが回転して戻らない場合を除いて、これらのオブジェクトを破壊することは絶対にありません。ゲームの世界が存在し、AIの動き、ライトが環境に影響を与えます。
カトゥ2015年

@Katu、それもポイントです。ありがとう。オブジェクトをまったくレンダリングする必要がない限り、私はそれを破棄すべきではありません。
Gissipi_453 2015年

@Katu私は質問に答えました。「ゲームの実行中に、これらのゲームオブジェクト(カメラからは見えないシーン内のオブジェクト)はコンピューター/モバイルリソースを消費しますか?」その答えは、「はい。プログラム内にあるものはすべてリソースを消費します」です。次に、シーン内の空のゲームオブジェクトの影響とリソースコストについて説明しました。
trueを返す

2
@ Gissipi_453あなたの質問に答えるために、それはシーン内のゲームオブジェクトが実際に何をしているか、それらが作成/削除される頻度、およびその他の考慮事項に完全に依存します。いつ最適化するかを知ること自体がスキルですが、大体の目安は、気になることがあるまでそれを気にしないことです。追加のゲームオブジェクトのオーバーヘッドはほとんどないので、心配しないでください。場合によっては、オブジェクトを頻繁に追加または削除する場合、オブジェクトプーリングは救命に役立ち、他のインスタンスでは他のトリックを実行できます。それはすべて、問題があるかどうか、そして何が問題なのかによって異なります。
trueを返す
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.