MonoBehaviour 同样支持多态处理,可以通过基类派生的方式为不同的游戏对象提供不同的行为实现。

下面以武器逻辑系统为例,演示如何用多态来组织不同装备的效果逻辑。

public class EquipLogic : MonoBehaviour
                {
                    virtual public void execLogic()
                    {
                
                    }
                }
                
                
                /// <summary>
                /// @brief // add hp by 10% atk and add 150 atk
                /// </summary>
                public class EquipLogic1 : EquipLogic
                {
                
                
                    // Use this for initialization
                    void Start()
                    {
                
                        PlayerData.ins.addAtk(150);
                
                    }
                
                    // Update is called once per frame
                    void Update()
                    {
                
                    }
                
                    public override void execLogic()
                    {
                
                        //   PlayerController.ins.addHp(100);
                        PlayerController.ins.addHp((int)(PlayerData.ins.getAtk() * 0.1f));
                
                    }
                }
                
                
                
                
                /// <summary>
                /// @brief   add 80 atk
                /// </summary>
                public class EquipLogic2 : EquipLogic
                {
                    void Start()
                    {
                
                        PlayerData.ins.addAtk(80);
                
                
                    }
                
                }
                
                /// <summary>
                /// @brief //   add 20 atk
                /// </summary>
                public class EquipLogic3 : EquipLogic
                {
                
                    void Start()
                    {
                
                        PlayerData.ins.addAtk(20);
                
                    }
                
                
                }

虽然这几个类写在同一个文件里,但这并不影响 C# 的继承与多态规则,派生类依然可以正常覆写基类方法。

切换装备时,只需要先销毁当前挂载的 EquipLogic 组件,再把新的子类组件挂到玩家对象上即可。

     Destroy(PlayerData.ins.player.GetComponent<EquipLogic>());
                
                        PlayerData.ins.player.AddComponent<EquipLogic3>();