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