Unity / C#查找对象并获取组件

时间:2014-02-26 17:29:48

标签: c# unity3d gameobject

这应该很简单:

GameObject myCube = GameObject.Find("Cubey").GetComponent<GameObject>();

启动错误CS0309:类型UnityEngine.GameObject必须可转换为UnityEngine.Component,以便在泛型类型或方法中将其用作参数T UnityEngine.GameObject.GetComponent()

通常Unity显示的错误很有用,但这只是令人困惑。立方体不是GameObjects吗?任何指针都会受到赞赏(没有任何双关语)。

2 个答案:

答案 0 :(得分:9)

GameObject不是一个组件。 GameObject附加了一堆Component

您可以取消GetComponent来电,只使用Find("Cubey")

的结果
GameObject myCube = GameObject.Find("Cubey");

答案 1 :(得分:3)

一个容易犯的错误,实际上是太多次了。)

我会这样解释:

GameObject是一种类型。 GameObject类型只能与GameObjects或从GameObject继承的东西相关联。

这意味着:GameObject变量只能指向GameObjects和GameObject的子类。下面的代码指向一个类型 GameObject的组件。

GameObject.Find("Cubey").GetComponent<GameObject>();

代码说“Find Cubey并指向附加到Cubey的GameObject”。

我猜如上所述,您正在寻找的组件不属于GameObject类型。

如果您希望变量GameObject myCube指向Cubey,您可以这样做:

GameObject myCube;

void Start(){
    // Lets say you have a script attached called Cubey.cs, this solution takes a bit of time to compute. 
    myCube = GameObject.FindObjectOfType<Cubey>();
}

// This is a usually a better approach, You need to attach cubey through the inspector for this to work.
public GameObject myCube; 

希望能帮助任何人来这个帖子遇到同样的问题。