2016-05-17 56 views
-1

下面是在Brick或Tile中獲取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是那麼好,所以我不知道它是否會工作,但只是'{return t.GetComponent (); 「工作? –

+0

否,'.GetComponent'只檢索從當前遊戲對象附加的'Component'派生的類 – maksymiuk

回答

3

GetComponent<Interface>()因爲統一4.6(release notes

我測試了統一5.3.4f1下面的代碼只是爲了確保它不會刪除已支持。 (從此之前我已經有一段時間了)。

所以:

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

Ew。不是更有效率 - 足以值得使其無法閱讀。 –

+0

誰不可讀? – maksymiuk