Unity开发避坑指南:C#中override和new用错,你的游戏逻辑可能全乱套
在Unity游戏开发中,C#的继承体系是构建复杂系统的基石。但当你面对override和new这两个看似简单的关键字时,稍有不慎就可能埋下难以追踪的Bug。想象这样的场景:你的武器系统在测试时表现完美,但在实际运行时,霰弹枪突然开始像步枪一样点射——这种诡异行为往往源于对方法重写和覆盖的误解。
1. 从武器系统案例看方法调用的本质差异
假设我们有一个基础武器类Weapon,其中定义了一个虚方法Fire():
public class Weapon {
public virtual void Fire() {
Debug.Log("Base weapon fire");
}
}
现在创建两个子类:Rifle和Shotgun。步枪采用override重写,霰弹枪使用new覆盖:
public class Rifle : Weapon {
public override void Fire() {
Debug.Log("Rifle single shot");
}
}
public class Shotgun : Weapon {
public new void Fire() {
Debug.Log("Shotgun spread shot");
}
}
关键差异出现在通过父类引用调用时:
List<Weapon> weapons = new List<Weapon> { new Rifle(),



被折叠的 条评论
为什么被折叠?



