不能投入monobehaviour基类

时间:2018-03-20 17:34:35

标签: unity3d

我有一个继承自Monobehaviour的基类。在层次结构中找到它时,如何将我的monobehaviour投射到基类?

GameManager : MonoBehaviour {

    public MonoBaseClass MyThing;

    void Awake() {
        MyThing = GameObject.Find("Child") as MonoBaseClass;
    }
}

MonoBaseClass : MonoBehaviour  {

    public void BaseClassMethod() {}

}

3 个答案:

答案 0 :(得分:2)

GameObject.Find返回一个GameObject,MonoBehaviour是GameObject的一个组件。这就是为什么你不能将GameObject强制转换为MonoBaseClass。

相反,您必须获取GameObject的引用,然后获取Component:

GameObject childGameObject = GameObject.Find("Child");
MyThing = childGameObject.GetComponent<MonoBaseClass>();

答案 1 :(得分:1)

您需要使用FindObjectOfType<MonoBaseClass>(),即:

void Awake() {
    MyThing = FindObjectOfType<MonoBaseClass>();
}

答案 2 :(得分:0)

FindFindObjectOfType的问题是:它们非常慢,您将从整个场景中获得第一个点击。

如果您要查找的组件位于Gameobject上,而Gameobject是当前GameObject的子项(看起来似乎如此),则可以使用:

MyThing = GetComponentInChildren<MonoBaseClass>();

https://docs.unity3d.com/ScriptReference/Component.GetComponentInChildren.html

当然,无论如何这仍然只能获得第一击。要更多地使用数组GetComponentsInChildren<T>()