Unity中GameObject的Script组件如何继承父类并调用Start方法?
RTS游戏Unit继承与Start方法调用问题解答
1. 仅添加Building组件时,是否继承Unit的全部内容?
是的,只要Building类在代码中正确继承了Unit类(比如C#中public class Building : Unit),它会继承Unit中所有非private的成员——包括字段、属性、方法、生命周期函数等。但如果Building自己重写了Start方法却没有主动调用父类逻辑,父类Unit的Start代码不会自动执行,这就是你遇到的Building没被加入选择列表的原因,并非继承关系本身有问题。
2. 让Building调用父类Unit的Start方法的两种情况
情况一:Building没有重写Start方法
如果Building类里没有自己的Start方法,Unity会自动调用父类Unit的Start方法,不需要额外操作,Building会正常被加入选择列表。
情况二:Building需要自定义Start逻辑(重写了Start)
如果Building必须有自己的初始化逻辑,需要在重写的Start方法中手动调用父类的Start,具体代码如下:
首先是父类Unit的代码(注意确保Start方法不是private,建议设为protected以便子类访问):
public class Unit : MonoBehaviour { protected void Start() { UnitSelections.Instance.unitList.Add(this); } }
然后是Building类的代码,通过base.Start()调用父类的Start逻辑:
public class Building : Unit { protected new void Start() { // 先调用父类Start,保证Unit的加入列表逻辑优先执行 base.Start(); // 这里写Building自己的初始化代码 Debug.Log("Building完成自定义初始化"); } }
注意:如果父类的Start是private修饰,子类无法调用
base.Start(),所以一定要把Unit的Start设为protected或者public。
内容的提问来源于stack exchange,提问作者StephGC
相关产品推荐
相关产品推荐

