2016-05-17 22 views
-1

以下は、Topaz ObjectContainerをレンガまたはタイルで取得するためのコードです。コードよりも効率的なコードは何ですか?

public static ITopazObjectContainer GetTopazObjectContainer(Transform t) 
    { 
     ITopazObjectContainer i = (t.GetComponent<Tile>() as ITopazObjectContainer); 

     if (i == null) 
      i = (t.GetComponent<Brick>() as ITopazObjectContainer); 

     return i; 
    } 

コードより効率的なコードは何ですか?

+0

これは[codereview.se]にありませんか? – Arc676

+1

私はUnityがよく分からないので、動作するかどうかわかりませんが、 '{t.GetComponent ();を返します。 } '仕事? –

+0

いいえ、 '.GetComponent'は、現在のゲームオブジェクトに添付された' Component'から派生したクラスだけを取得します – maksymiuk

答えて

3

GetComponent<Interface>()は、私はちょうどそれが除去されていないことを確認するユニティ5.3.4f1に以下のコードをテストしたユニティ4.6(release notes

からサポートされています。 (これまで私がそれをしてからしばらく経ちました)。

ので:

public static ITopazObjectContainer GetTopazObjectContainer(Transform t) 
{ 
    return t.GetComponent<ITopazObjectContainer>(); 
} 
良い

まだあなたは複数回それを呼び出す必要がある場合、その参照をキャッシュすることであろう。あなたのコードの残りの部分がどのように設計されているかはわかりません。

1
return (t.GetComponent<Tile>() as ITopazObjectContainer) ?? (t.GetComponent<Brick>() as ITopazObjectContainer); 
+1

さて、変数 – maksymiuk

+1

をキャッシュするために余分なメモリを使用していません。効率的ではありません。読めないほどの価値があります。誰のために –

+0

が読めないのですか? – maksymiuk

関連する問題