我有一个继承自Monobehaviour的基类。在层次结构中找到它时,如何将我的monobehaviour投射到基类?
GameManager : MonoBehaviour {
public MonoBaseClass MyThing;
void Awake() {
MyThing = GameObject.Find("Child") as MonoBaseClass;
}
}
MonoBaseClass : MonoBehaviour {
public void BaseClassMethod() {}
}
答案 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)
Find
和FindObjectOfType
的问题是:它们非常慢,您将从整个场景中获得第一个点击。
如果您要查找的组件位于Gameobject上,而Gameobject是当前GameObject的子项(看起来似乎如此),则可以使用:
MyThing = GetComponentInChildren<MonoBaseClass>();
https://docs.unity3d.com/ScriptReference/Component.GetComponentInChildren.html
当然,无论如何这仍然只能获得第一击。要更多地使用数组GetComponentsInChildren<T>()