是否可以从接口获取对gameObject的引用?

时间:2018-06-27 04:34:06

标签: c# unity3d

我已经为我的游戏中的所有载具实现了一个接口IVehicle,并且希望能够引用不附加gameObject且附加了脚本的gameObject属性。这可能吗?

类似的东西:

IVehicle vehicle = GameObject.FindObjectOfType(typeof(IVehicle));
GameObject vehicleGO = vehicle.gameObject;

2 个答案:

答案 0 :(得分:2)

是的,有一个非常简单的解决方案。放置

GameObject gameObject { get ; } 

作为界面的一部分-所有MonoBehaviours都实现了它,不需要任何额外的步骤。我将它添加到Unity中几乎所有的界面中,它不花任何钱,而且很有帮助

答案 1 :(得分:2)

有可能,并且不需要是一个额外的变量。值得注意的是,您无法像问题中那样使用FindObjectOfType在场景中检索接口。您只能将FindObjectOfTypeMonoBehaviour一起使用。

获取您的界面:

using System.Linq;

IVehicle[] vehicles = FindObjectsOfType<MonoBehaviour>().OfType<IVehicle>().ToArray();

投射到MonoBehaviour,现在您可以访问与其链接的GameObject

for (int i = 0; i < vehicles.Length; i++)
    GameObject vehicleGO = ((MonoBehaviour)vehicles[i]).gameObject;

此外,如果您知道实现该接口的脚本名称,则无需强制转换为MonoBehaviour。您可以将其强制转换为该脚本。假设将实现IVehicle接口的脚本命名为Car,您将可以执行以下操作:

GameObject vehicleGO = ((Car)vehicles[i]).gameObject;
相关问题