需要一个函数来返回多种类型的游戏对象,我可以调用方法
本文关键字:游戏 类型 种类 对象 方法 调用 我可以 返回 函数 一个 | 更新日期: 2023-09-27 17:49:21
我想让一个函数返回一个通用的游戏对象,然后我可以调用一个方法。这行不通。
我的游戏世界中有不同的对象。我想有一个函数,我可以调用它将返回在给定位置找到的对象。然后,检查找到了什么类型的对象。我的每个对象都有一个返回对象类型的GetObjectType方法。
我非常感谢你给我的任何帮助。谢谢你的关注。GameObject spotObjectLocation1;
spotObjectLocation1 = GetObjectAtLocation(player.transform.position
+ checkDirection);
// THIS IS WHAT I WANT TO DO THAT DOESN'T WORK
if (spotObjectLocation1.GetObjectType() == "box"){ }
GameObject GetObjectAtLocation(Vector3 location)
{
GameObject[] objects = GameObject.FindGameObjectsWithTag("boxes");
for (int i = 0; i < objects.Length; i++)
{
if (objects[i].transform.position.x == location.x
&& objects[i].transform.position.z == location.z)
{
return objects[i];
}
}
GameObject[] objects = GameObject.FindGameObjectsWithTag("blocks");
for (int i = 0; i < objects.Length; i++)
{
if (objects[i].transform.position.x == location.x
&& objects[i].transform.position.z == location.z)
{
return objects[i];
}
}
}
public class ObjectBox : MonoBehaviour {
public string GetObjectType()
{
return "box";
}
}
public class ObjectBlock : MonoBehaviour {
public string GetObjectType()
{
return "block";
}
}
到底是什么不起作用?
无论如何,使用适当的继承树和"as"操作符会更好。例如,让所有的box对象都继承自一个类box(如果有多个box对象):
public class Box : GameObject
{
...
}
public class ObjectBox : Box
{
...
}
然后你可以使用"as"操作符来确定GameObject是否是一个盒子:
GameObject spotObjectLocation1 = GetObjectAtLocation(player.transform.position + checkDirection);
Box b = spotObjectLocation1 as Box;
if (b != null)
...
同样,这种类型的代码有时用普通多态性处理会更好。想象一下,如果这个对象实际上是一个盒子,你会怎么处理它。对于其他类型的对象,您是否也想这样做?如果是这样,所有这些对象都继承自一个公共基类,该基类提供了派生类可能覆盖的虚拟或抽象方法。然后,客户端代码可以简单地通过基类调用这些方法,而不需要知道对象的实际类型。