You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 07:36:29