我正在使用 Unity3D 编码 C# 开发游戏。
由于我是从纯 OOP 环境来到 Unity,因此基于组件的方法对我来说毫无意义。因此,对于我们的武器系统,我使用继承树和对象层次结构的方法纯粹采用 OOP。我花在代码上添加新功能和东西的时间越多,我发现这种设计就越不灵活。所以现在我倾向于基于组件的设计。
我在这里发布了我的问题,询问如果我使用组合优于继承的方法是否足够好,正如Jamora 先生在这里所建议的那样。
他的解决方案听起来非常好。但是如果我有不止一种武器,那么就不足为奇了,实现相同的逻辑让我们说Reload
从IReloadable
public interface IReloadable
{
void Reload();
}
public interface IUpgradable
{
void Upgrade();
}
public interface IShooter
{
void Shoot();
}
public SMG : IShooter, IReloadable
{
void Shoot()
{
// shooting logic 1
}
void Reload()
{
// reloading logic 1
}
}
public AssaultRifle : IShooter, IReloadable, IUpgradable
{
void Shoot()
{
// shooting logic 2
}
void Upgrade()
{
// upgrade logic 1
}
void Reload()
{
// reloading logic 1 -- SAME LOGIC
}
}
如您所见,存在代码重复,我不喜欢这样。这可以避免吗?(以干净、灵活的方式)
总的来说,这(组合优于继承)是在 Unity 中制作武器系统的好方法吗?- 或者最好使用 Unity 的基于组件的方法,并制作一个Shooter
和Reloadable
组件(脚本)并将它们附加到我的武器游戏对象?
在此先感谢您的帮助。