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>();