2016-05-17 90 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