我有一个人类的脚本
脚本中获取了挂载该脚本对象身上的组件
写一个学生类继承人类
挂载学生类的对象也就不会挂载人类的脚本,无法获取组件返回null
那我需要获取组件,又需要继承人类,怎么做能行
是不是哪里写错了,比如忘了把GameObject拖到新脚本里,正常是没问题的
可以在学生类中重写人类的脚本,在重写的脚本中调用人类的脚本,从而获取组件。比如哈
public class Student : Human
{
public override void GetComponents()
{
base.GetComponents();
// 获取组件
}
}
学生类获取组件返回null,这个和你继承人类脚本没关系。
1,获取组件最简单的方法就是public GameObject Obj;
2,然后把你想要获取的组件拖上去。
若是你想在子类中获得父类已经获取的组件应这么写
public class Human : MonoBehaviour {
protected AudioSource au;
protected virtual void Start ()
{
au = GetComponent<AudioSource>();
}
}
public class Student : Human {
protected override void Start ()
{
base.Start ();//Student 类获得了Human 类的au。
}
}
在 Unity 中,如果你需要在继承脚本的对象中访问组件,可以在继承脚本的 Start 方法或 Awake 方法中通过 GetComponent 方法获取组件。例如:
public class Student : Human
{
private MyComponent myComponent;
private void Start()
{
myComponent = GetComponent<MyComponent>();
}
}
注意,如果被挂载的学生类对象上没有挂载该组件,GetComponent 方法将返回 null。因此,请在使用获取到的组件之前进行非空检查。
在学生类的脚本中重写 Start 方法或 Awake 方法,在这两个方法里面调用 base.Start 或 base.Awake 方法,这样可以让学生类继承人类的脚本,并在自己的脚本里面进行组件的获取操作。
继承可以使学生类能够继承人类的所有方法和属性,但是不能继承人类的挂载组件。可以在学生类的脚本中重新获取组件,或者使用人类脚本中已获取的组件并在学生类中通过引用访问。例如:
public class Human : MonoBehaviour {
public Transform transform;
private void Start() {
transform = GetComponent<Transform>();
}
}
public class Student : Human {
private void Start() {
// Use the transform component from the Human class
transform.position = new Vector3(0, 0, 0);
}
}