一体で、カメラに表示されず、ゲームの実行中にレンダリングされないゲームオブジェクトがシーンにあるとします。
これらのゲームオブジェクトは、ゲームの実行中にコンピューター/モバイルリソースを消費しますか?
このような使用法の詳細はどこにありますか?
一体で、カメラに表示されず、ゲームの実行中にレンダリングされないゲームオブジェクトがシーンにあるとします。
これらのゲームオブジェクトは、ゲームの実行中にコンピューター/モバイルリソースを消費しますか?
このような使用法の詳細はどこにありますか?
回答:
あなたが欲しいのはUnityが持っているメモリプロファイラーです。ここ:http : //docs.unity3d.com/Manual/ProfilerMemory.html
しかし、あなたの仮定はほとんど正しいです。gameObjectがカメラに表示されない場合、ゲームオブジェクトは描画されず、使用するリソースは少なくなりますが、それでも消費する必要があります。すべてのテクスチャ、モデルスクリプトなどを含め、gameObjectは引き続きメモリに存在します。また、UpdateメソッドとFixedUpdateメソッド(およびここで説明するその他のさまざまなメソッド)を通じてCPU時間を消費します。
ただし、通常、主な速度低下は描画です。オブジェクトがカメラの錐台(境界)の外にあることを確認するために少量のCPU時間が使用されますが、描画は行われません。
Frustrum Culling、または隠れた表面の除去についても知っておくべきだと思います。http://en.wikipedia.org/wiki/Hidden_surface_determination
これは、ゲームを最適化するための重要なビットです。オブジェクトが特定のフレーム(つまり可視)で錐台の内部にない場合でも、一部の描画呼び出し(シェーダー)が起動され、パフォーマンスが低下するためです。
短い答えは「はい」です。ゲームで使用する準備ができているものはすべてメモリを消費しています。
考慮すべきもう1つのことは、フレームレートのコストです。
5つの個別のテクスチャを持つ5つのオブジェクトは、個別に描画され、その間の状態変更が必要です。使用されていないテクスチャをアンロードすることで、メモリを節約できる場合があります。
個別のテクスチャすべてを単一のアトラステクスチャにロードすることにより、メモリのフットプリントが固定され、個々のテクスチャをアンロードできなくなります。作成したら、アトラスを一度バインドするだけで、すべてのオブジェクトを描画できます。
別の例は、単純な頂点とインデックスバッファーです。多くのポイントが表示と非表示を頻繁に切り替える場合は、「古くなった」ポイントを頂点バッファーに残し、新しいインデックスバッファーのみをアップロードする方が高速です。
他の多くの場合、初期のメモリコストの増加が多くの状態変化よりも好ましい場合があります。
カメラを回転させても、そのオブジェクトを確認するためにカメラが回転して戻らない場合を除いて、これらのオブジェクトを破壊することは絶対にありません。」– Katu
例としてサイドスクローラーを使用すると、右にしか移動できない場合(マップは左にスクロールするだけです)、画面の左側からスクロールオフしたオブジェクトは、再び使用することがないため、完全にアンロードできます。さらに、オブジェクトが右からスクロールして表示される直前に、オブジェクトのコンテンツをディマンドロードできます。
多くの回答は、主に質問のグラフィックスの側面を考慮しています。
実際には、それらはさまざまなリソースを消費し、オブジェクトの描画と比較してそれらがどれほど高価になるかは固定されていません。コンポーネントが描画よりも高価な操作を行うことを示唆するいくつかの回答ほど珍しいことではありませんが、使用するリソースの数を最小限に抑えることができます。また、GameObjectは少量のメモリを使用するため、コンポーネントも使用することに注意してください。コンポーネントは、かなりのメモリを占有していることも行っている可能性があります。
オフスクリーンコンポーネントの影響を最小限に抑える最も簡単な方法は、OnBecameVisibleおよびOnBecameInvisibleコールバックに基づくシステムです。
void OnBecameVisible()
{
myComplexComponent.enabled = true;
}
void OnBecameInvisble()
{
myComplexComponent.enabled = false;
}
もちろん、画面外のオブジェクトがゲームに影響を与えたい場合がたくさんあるので、それは非常に限られた有用性です。ただし、この種のパターンを拡張して、最も高価な計算の影響を最小限に抑えることができるきめの細かいシステムを実現できます。オブジェクトが画面外にあるときに、スクリプトをたどるパスの品質などの単純なものでも、長期的には大きな節約になります。
それを存続させ、その位置やその他のプロパティを更新するにはメモリが必要です。
ただし、表示されないため、コンピュータ/モバイルグラフィックリソースは消費しません。
プログラム内にあるものはすべてリソースを消費します。あなたはプログラムが単に希望と夢に基づいて実行されているとは思わないでしょう?
問題は、ゲームオブジェクトがどれだけのリソースを消費するかであるはずです。そのためには、これはかなり確かな答えだと思います:http : //answers.unity3d.com/questions/280455/how-much-memory-a-gameobject- consume.html
要するに、彼らは自分で取るに足りない資源を消費しています。しかし、ゲームに座って何もしないでゲームオブジェクトの束が必要なのはなぜですか?結局のところ、実際にそれらのゲームオブジェクトを「実行」させるのは、あらゆる種類のオーバーヘッドを引き起こすものであり、必要なリソースの量はケースバイケースで非常に多くなります。