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

Posted

技术标签:

【中文标题】Unity/C# 查找对象并获取组件【英文标题】:Unity/C# Find object and get component 【发布时间】:2014-02-26 17:29:48 【问题描述】:

这应该很容易:

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

刚刚出现错误 CS0309:类型 UnityEngine.GameObject 必须可转换为 UnityEngine.Component 才能将其用作泛型类型或方法 UnityEngine.GameObject.GetComponent() 中的参数 T

通常 Unity 显示的错误很有用,但这只是令人困惑。立方体不是游戏对象吗?任何指针都将不胜感激(没有双关语)。

【问题讨论】:

可能组件不是GameObjects - 您正在尝试将GetComponent&lt;T&gt; 的值分配给GameObject - 当然您想要GameComponentComponent(或其他Unity 中的等价物) 【参考方案1】:

GameObject 不是一个组件。 GameObject 附有一堆 Components。

您可以取消GetComponent 调用,只使用Find("Cubey") 的结果

GameObject myCube = GameObject.Find("Cubey");

【讨论】:

【参考方案2】:

一个简单的错误,去过那里......实际上太多次了:)

我会这样解释:

GameObject 是一种类型。 GameObject 类型只能与 GameObjects 或继承自 GameObject 的事物相关联。

这里的意思是:GameObject变量只能指向GameObjects和GameObject的子类。下面的代码指向一个 type GameObject 的组件。

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

代码显示“找到 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; 

希望对遇到同样问题的人有所帮助。

【讨论】:

以上是关于Unity/C# 查找对象并获取组件的主要内容,如果未能解决你的问题,请参考以下文章

Meteor - 如何在 MongoDB 集合中查找/获取对象并使用方法将其推送到另一个集合中?

unity/c#:来自另一个游戏对象的数据

Unity3d修炼之路:载入一个预制体,然后为该对象加入组件,然后查找对象,得到组件。

在字典中查找元素并检查对象的类型[重复]

form的jquery对象调用find方法找不到任何子元素

动态获取js对象的元素