我已经为我的游戏中的所有载具实现了一个接口IVehicle
,并且希望能够引用不附加gameObject
且附加了脚本的gameObject
属性。这可能吗?
类似的东西:
IVehicle vehicle = GameObject.FindObjectOfType(typeof(IVehicle));
GameObject vehicleGO = vehicle.gameObject;
答案 0 :(得分:2)
是的,有一个非常简单的解决方案。放置
GameObject gameObject { get ; }
作为界面的一部分-所有MonoBehaviours都实现了它,不需要任何额外的步骤。我将它添加到Unity中几乎所有的界面中,它不花任何钱,而且很有帮助
答案 1 :(得分:2)
有可能,并且不需要是一个额外的变量。值得注意的是,您无法像问题中那样使用FindObjectOfType
在场景中检索接口。您只能将FindObjectOfType
与MonoBehaviour
一起使用。
获取您的界面:
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;