2016-09-04 5 views
1

問題はこれです:私は自分のコードに状態を持っています。私はそれらを地域に分け、いくつかの条件でそれらを有効または無効にしたいと思う。このコードは、LateUpdateというループ関数のUnity関数内にあります。ブーリアンや列挙型を使用する代わりに、プロセッサ時間を節約するためにこれを実行したいと思います。 できますか?もしそうなら、どうですか? 追加します。 info:これを実行時に無効にする必要があります。このスクリプトは、gifを再生する画像シーケンスプレーヤーです。ウォームアップパートとループパートがあります。私はboolと書くことができますが、私はプロセッサー時間を節約する必要があると言いました。これはモバイルゲームになるためです。c#状態でコード領域を無効にする

いくつかのコード:あなたのような

void LateUpdate() 
{ 
    if (warmUp) 
    { 
     currentImageIndex = Mathf.RoundToInt(Time.time * frameRate); 
     currentImageIndex = currentImageIndex % spriteSheet.Length; 
     spriteRenderer.sprite = spriteSheet[currentImageIndex]; 
     warmUp = false; 
    } 
    if (updateEnabled && !warmUp) 
    { 
     switch (playMode) 
     { 
      case PlayMode.order: 
       currentImageIndex = Mathf.RoundToInt(Time.time * frameRate); 
       currentImageIndex = currentImageIndex % spriteSheet.Length; 
       spriteRenderer.sprite = spriteSheet[currentImageIndex]; 
       break; 
      case PlayMode.random: 
       updateEnabled = false; 
       StartCoroutine(RandomizedPlay()); 
       break; 
     } 
    } 

} 
+0

'if'ブロック内にリージョンを置くのは間違っていますが、必要に応じて変数を設定したり解除したりするだけです。 '_doSection1'が' false'なら単純な 'if(_doSection1){...}'には実質的に0のオーバーヘッドがあります。 –

+0

デザイン上の欠陥のように聞こえます。リージョンはコンパイラー文であるため、実行時には設定できません。しかし、単純な 'if'やループ文を使わないのはなぜですか? Cosniderはいくつかのコードを示します。 – HimBromBeere

+0

私は地域atmを使用しません:Dは方法を知らない... もし私が – agiro

答えて

0

シンプルifチェックは、現在すでに行っているが、常に関数内で実行する必要はありません、実行時にコードを無効にする正しい方法です。

the unity profiler on the mobile deviceの使用方法を学ぶ必要があります。減速の原因(ある場合)は、ifの文自体ではありません。

私は、これらのチェックのそれぞれがプロファイラ中のCPU時間の0.00%を上回らない可能性が非常に高いと言います。

+0

情報ありがとうございます。私はいつもnoobの方法であると思っていましたが、最初は先進的なものがあります。D 編集:コードの束がその目的を果たした後に再び実行されることは決してありません。だからそれは削除することさえできる。 – agiro

関連する問題