【发布时间】:2012-11-28 20:35:46
【问题描述】:
我正在使用 C# 开发 Unity3d 游戏,在很多情况下,我们需要访问 GameObject 的特定成员(例如,int health)。我们使用如下代码来做到这一点:
GameObject obj;
if(obj.GetComponent<Player>() != null) {
obj.GetComponent<Player>().health--;
}
else if(obj.GetComponent<Robot>() != null) {
obj.GetComponent<Robot>().health--;
}
// more painful code
我想做的是让所有这样的类实现像IHealth 这样的接口,然后执行obj.GetComponent<IHealth>().health--;。不过,这可能吗?我环顾四周,似乎无法将接口用作类型参数。
【问题讨论】:
-
效果很好。你试过了吗?
-
@SLaks 不,接口只能有方法或属性,不能有字段。
-
您可能需要考虑捕获您在 if 块中使用的结果,这样您就不会为每个对象类型调用两次 GetComponent。
-
@Servy:是的;这些应该是属性。
-
如果 GameObject 是一个结构,而不是一个类,那么当你将它装箱到接口时,你会得到一个副本并改变副本,而不是实际的对象,所以它不会做你想做的事想。最重要的是,接口只能有方法或属性,不能有字段。