描画する、更新する、などのために参照を維持しなければなりません。関する限り、オブジェクトが失われるということです;彼らはそれにアクセスすることはできず、再びそれを見ることはなく、それはメモリに常駐してます。その後、いくつかの時間が経った後に、ガベージコレクタが実行され、どこからも参照されていないメモリ内容は削除されます。これは、舞台裏でメモリの各ブロックへの参照数とそのトラックを維持しているため行うことが可能でです。C++よりも遅い理由の一つです。自動メモリ管理を理解するについてお読みください。割り当てられたメモリを避ける方法オブジェクトが作成されるたびにメモリが割り当てられます。非常に多くのコードでは、あなたはそれを知らなくてもオブジェクトを作成しています。オブジェクトを作成します。)は遅く、パフォーマンスが問題である状況では使用すべきではありません。クラスと構造体の違い:クラスはオブジェクトであり、レファレンスとして振る舞う。オブジェクトへのレファレンスを受け取ります。レファレンスされるようになります。クラスはデータであり、そのように振る舞います。ヒープに割り当てられることはなく、決してガベージが収集されることはありません。長い間近くにいるオブジェクトはクラスでなければなりません。短命であるオブジェクトは構造体でなければなりません。それがクラスなら、すべてがもっと遅くなるでしょう。これはゲームにおいて“支障”を引き起こすことがありえます。自動メモリ管理を理解するページが説明するように、インスタンス化とデストロイを囲んで、一般的なパフォーマンスでヒッチを回避する方法は他にもあります。何かが起こっていないとき手動でガベージコレクタをトリガーとし、または非常に多くの場合、未使用のメモリの大きなバックログを蓄積させないようにトリガーにします。アップロードする必要があります。同様に支障を引き起こす可能性があり、オブジェクトプーリングとゲームを続ける代わりのレベルの負荷を発生します。パペット(人形)の無限の箱を持っている「パペットマスター(人形使い)」を想像してみてください。キャラクターが表示されるスクリプトを呼び出すたびに、その人形の新しいコピーを箱から取り出し、ステージが終わるたびに、その現在のコピーを捨てます。オブジェクトプーリングは、ショーが始まる前にすべての人形を箱から出して、見えるべきでないときには舞台裏のテーブルの上ににすべての人形を置いておくのと同じようなものです。オブジェクトプーリングが遅くなってしまうのか1つの問題は、プールの作成は他の目的で使うヒープメモリの量を減らしてしまうことです。あなたが作成したばかりのプールの上にメモリを割り当てる続けると、より頻繁にガベージコレクションをトリガーする可能性があります。それだけでなく、すべてのコレクションは遅くなります。収集に要する時間は生きているオブジェクトの数が増加するにしたがって増大するためです。これらの問題を念頭に置き、あなたが大きすぎるプールを割り当てた場合、またはそれらをアクティブに維持している場合、明らかにパフォーマンスが悪くなることがあります。多くの種類のオブジェクトは、オブジェクトをプールするのに役に立ちません。ゲームは、かなりの時間を持続し、または大量に出現する敵のためにスペルエフェクトを含んでいるが、ゲームが進むにつれて徐々にキルされていきます。このような場合では、パフォーマンスの利点をオーバーヘッドが大幅に上回るのでオブジェクトプールは使用すべきではありません。実装ここでは、単純な発射のための単純にスクリプトを並べて比較してます。ひとつはインスタンスを使用し、ひとつはオブジェクトプーリングを使用。}もちろん、大型で複雑なゲームのためにすべてのあなたのプレハブのために働く一般的な解決策を確認したくなるでしょう。Party!スクリプトとゲームプレイ方法で与えられる“数百人の回転、ダイナミックな点灯、一度の画面上で集められたコイン”の例はどのようにスクリプトコードを書くか、セクションを実証するために使用されます。コンポーネントやカスタムシェーダーは貧弱なモバイルハードウェアに負担をかけずに素晴らしい効果を作成するために使用できます。横スクロールのゲームの文脈で生かすことを想像してみてください。コインは動的にポイントライトに照らされています。私たちはゲームをより印象的にするために光きらめくコインをキャプチャしたい。強力なハードウェアを持っていた場合、この問題への標準的なアプローチを使用することができます。すべてのコインオブジェクトを確認し、それぞれの頂点を照らしオブジェクトに陰影をつけ、前方または後方を照らし、その後、画像効果としてトップに輝きを追加し、キラキラと反射したコインが周辺に光を出力させます。モバイルのハードウェアは多くのオブジェクトに窒息されるでしょう。グローエフェクトを適用するにはまったく問題外です。我々は何をしますか?スプライトパーティクルシステムのアニメーションあなたは、そのすべてが同じように移動し、プレーヤーによって慎重に検査できない多数のオブジェクトを表示する場合、あなたは時間がなくてもパーティクルシステムを使用してそれらを大量に描画することができるかもしれません。何百もの発射体や爆発スプライトパッカーと呼ばれる無料のエディター拡張機能があり、アニメーションスプライトパーティクルシステムの作成が容易になります。テクスチャにあなたのオブジェクトのフレームをレンダリングし、次にパーティクルシステムにアニメーションスプライトシートとして使用することができます。私たちは回転するコインでそれを使用例として使用しています。実装のレファレンススプライトパッカーに含まれているプロジェクトは、まさにこの問題に対する解決策を示す例です。密接に制御スクリプトとテクスチャの両方に接続されている特殊なシェーダー。ファイルはどのような機能が必要でどのように実装され、使用されたプロセスがどのようにシステムに動作するか、これを説明する例を含んでいます。これはそのファイルです:問題は次のように定義さます。単純なアプローチは、コインをレンダリングするために粒子を使用しようとする代わりに、コインプレハブのコピーをまとめてインスタンス化することです。これは私たちが克服しなければならない多くの課題を引き合わせてくれます。粒子はそれらを持っていないため視野角が問題です。軸を中心に回転することを想定しています。私たちはスプライトパッカーを使ってパックされたアニメーションのテクスチャのコインが回転するイリュージョンを作成。これは新しい問題を引き合わせる:すべて同じ早さで同じ方向に回転するコインの単調さ私たちは自分自身の回転とライフタイムを追跡し、これを修正するために、スクリプト内で粒子の寿命に回転を“与える”。粒子がそれらを持っていないため法線が問題であり、リアルタイムのライティングを必要とします。スプライトパッカーによって生成された各アニメーションフレームにおいてコインの面のための単一の法線ベクトルを生成します。ライティングを行います。色として粒子に結果を適用します。コインの面とシェーダーで別々にコインの縁を処理します。のを使用することはできず、彼らはすでにアニメーションに使用されてます。テクスチャマップを使用してください。私たちは別のテクスチャを導入しようとせず、より多くのテクスチャを読み込み、より多くのテクスチャメモリを使う。つをそれと交換してください。つのチャンネルを組み合わせ、欠落しているチャンネルを再構築するためにシェーダーを使用します。私たちは光きらめくコインを輝かせたいとします。モバイルデバイス用としてはポストプロセスはあまりにも高価です。バージョンを与えます。対応するコインの色が光り輝く時のみグローカラー(夜行色)にします。レートキラーを埋める。グローをフレームごとにリセット。粒子がよく衝突することはない。組み込まれた粒子衝突を使用してもらえますか?代わりに、単にスクリプトに衝突を書きました。以上の問題を抱えている。このスクリプトは、多くのことを行い、そして遅くなる!パフォーマンスは、アクティブなコインの数に比例します。光を、モバイルデバイス上で本当に速く動作させることです。さらなる最適化させるもの:個別にすべてのコインのためのライティングを計算する代わりに、世界を塊に分割し、すべての塊内のすべての回転フレームのための照明条件を算出します。指標としてコイン位置とコインの回転をルックアップテーブルとして使用します。位置の双線形補間を使用して忠実度を増やします。まれに更新するルックアップテーブル、または、完全に静的なルックアップテーブルこのために光プローブを使用しますか?スクリプト内の照明を計算する代わりに、通常にマップされた粒子を使う?法線のフレームアニメーションをベイクするために“ディスプレイ法線”シェーダーを使用してください。ライトの数を制限します。遅いスクリプト問題を修正しました。この例の最終目標または“話の教訓”は、あなたのゲームが本当に必要とするものがある場合、あなたは従来の手段でそれを達成しようとするとそれが遅れの原因となりますが、それは不可能であることを意味するものではありません。それはあなたがはるかに高速に実行される独自のシステム上に、いくつかの仕事を配置する必要があることを意味します。数千のオブジェクトを管理するための技術これらは動的オブジェクトの数百または数千に関与している状況で適用される特定のスクリプトの最適化です。あなたのゲーム内のすべてのスクリプトにこれらの技術を適用することは恐ろしい考えです:これらは、実行時に大量のオブジェクトまたは大量のデータを扱う大規模なスクリプト用のツールや設計ガイドラインとして予約する必要があります。O(N2)の操作を最小限に抑えるコンピューターサイエンスでは、O(n)で示される操作の順序は、動作はそれが適用されるオブジェクトの数が増加して評価されなければならない回数(n)が増加する方法を指す。基本的なソートアルゴリズムを検討してみる。ある数を、最小から最大に(昇順)それらをソートしたい。}重要な部分は、ここで二つのループがあり、一つは他方の内側(のループ)があるということです。}それでは、アルゴリズムの最悪のケースを与えると仮定します:入力された数字をソートしますが、逆の順でされています。