1)iは、コールバックを使用するか 関数を呼び出す各クラス
の基準を使用してから手動で関数を呼び出す必要があり、直接高速であるが、これはまったく問題にはなりません。それはそれほど大きな違いはありません。
2)いくつかのスクリプトで有用ないくつかのパラメータがあるいくつかのパラメータを持つ4つのパラメータを渡しているので、ガベージコレクションがありますか? スクリプトメソッドを手動で呼び出すよりも? 4つのパラメータi のうち2つは参照型であり、2つは値型です。
いいえ、デリゲートにさらにパラメータを渡すと、メモリ割り当てはありません。メモリが割り当てられる唯一の時間は、onCutCB
変数を初期化するときです。たとえば、onCutCB = OnCut;
です。そのため、onCutCB
をStart
またはAwake
関数で一度初期化する必要があります。 onCutCB
が呼び出された場合、メモリの割り当ては行われません。
メモリが割り当てかそうでない場所を確認するために、次のコードのコメントを読む:
Action<GameObject, GameState, GameObject, Vector3> onCutCB;
void OnCut(GameObject survivalObj, GameState state, GameObject
destroyObj, Vector3 startPos = default(Vector3))
{
}
void Start()
{
//MEMORY IS ALLOCATION
onCutCB = OnCut;
}
void Update()
{
//NO MEMORY ALLOCATION HERE
onCutCB(objToUse, gameState, anotherObj, thePos);
}
私は、モバイルデバイス上で自分のゲームをプレイしたときもののminituesにゴマそれが正常に動作しますが、その後、いくつかの 私はオブジェクトを使用しています。 ゲームを再開するときに、私のシーンはロードされません。 インスタンス化されたgameobjectが必要だったので、プールしてください。
この問題は、ゲームが徐々に遅くなることとは関係がありません。 Update
関数からコルーチンをすべてのフレームで開始し、コルーチンが終了/停止しないか、実行時間を足した何かを何度もインスタンス化しています。
すべてスクリプトがないと、問題の原因を突き止めることができません。してくださいすべてのコードで質問を編集しないでください。自分で問題を見つけて修正してください。
プロファイラーを使用してください。Windowsのから
ゴー - >プロファイラその後、ディーププロファイラを有効にし、 "録音" をクリックし、[再生]ボタンをclicl。どのスクリプトがメモリを割り当てているか、そして各関数が完了するまでにどれくらいの時間がかかります。これらを見て修正してください。
Hereは、Profilerの使い方に関する完全なUnityチュートリアルです。
測定し、具体的なケースを決定します。とにかく、マイクロ最適化は99%のケースで悪いです。特に、OnGameOver関数は、1秒に1000回ではなく、1回だけ発生する可能性があります。 – walther
OnGameOverコールバックは毎分5回呼び出されていますが、実際には名前をOnGameOverに置き換えています。 – sagar
あなたのゲームは12秒続く?なぜあなたは毎分5回OnGameOverを呼びますか?とにかく、なぜこれを最適化しようとしているのですか?あなたはどんな問題に直面していますか?もしそうなら、マイクロ最適化の代わりにそれらに集中するほうがより有益でしょう。 – walther