在C#unity中使用多态性或接口

在C#unity中使用多态性或接口,c#,unity3d,interface,polymorphism,C#,Unity3d,Interface,Polymorphism,在我的unity C#游戏中,我有两个类,一个是PlayerHealth,另一个是EnemyHealth,它们的功能相同,但这两个字段是反向的CurrentHapinesPower和currentSadnesPower。 我不知道是否应该使用多态性原则、继承或接口 这些是课程: public class PlayerHealth : MonoBehaviour { #region Public Instances public GameObject Player; pub

在我的unity C#游戏中,我有两个类,一个是
PlayerHealth
,另一个是
EnemyHealth
,它们的功能相同,但这两个字段是反向的
CurrentHapinesPower
currentSadnesPower
。 我不知道是否应该使用多态性原则、继承或接口

这些是课程:

public class PlayerHealth : MonoBehaviour
{
    #region Public Instances
    public GameObject Player;
    public GameObject Pl_DeathParticle;

    public TextMeshProUGUI NumOfHappyPower;
    public TextMeshProUGUI NumOfSadPower;
    #endregion

    #region HapAndSad System Variables
    public int playerHappinessPower;
    [HideInInspector] public int currentHappinessPower; <--
    [HideInInspector] public int currentSadnesPower;    <--These two
    #endregion

    #region HapAndSad States
    private bool isSad = false;
    #endregion

    void Start()
    {
        currentHappinessPower = playerHappinessPower; // in the enemy class is currentSadnessPower
        NumOfSadPower.enabled = false; // here in the enemy class is true
    }

    void Update()
    {
        HapAndSadPowerSystem();
        StartCoroutine(CheckThePlayerSadState());
    }

    void HapAndSadPowerSystem()
    {
        if (currentHappinessPower > 0) //enemy class: currentSadnessPower
        {
            NumOfHappyPower.text = currentHappinessPower.ToString(); //also here is changed
        }

        else if (currentHappinessPower == 0) // here also is currentSadnessPower
        {
            NumOfHappyPower.enabled = false;
            NumOfSadPower.enabled = true;

        }

        else if (currentHappinessPower < 0 && currentSadnesPower == 0) //and here
        {
            isSad = true;  // enemy class is false                                                                  
            currentSadnesPower = currentHappinessPower * -1; //Make the rest of the soubstraction positive / also here its inverted
            NumOfHappyPower.enabled = false; //true in the enemy class
            NumOfSadPower.enabled = true; // false
            NumOfSadPower.text = currentSadnesPower.ToString();
        }

        else if (currentSadnesPower > 0)
        {
            NumOfSadPower.text = currentSadnesPower.ToString();
        }
    }

    IEnumerator CheckThePlayerSadState()
    {
        if (isSad == true) //here is false
        {
            yield return new WaitForSeconds(2f);
            GameObject PlayerDeath_particle_prefab = Instantiate(Pl_DeathParticle, Player.transform.position, Quaternion.identity);

            Destroy(PlayerDeath_particle_prefab.gameObject, 1f);
            Destroy(Player.gameObject);
        }
    }
}
公共级玩家健康:单一行为
{
#区域公共实例
公共游戏对象玩家;
公共游戏对象Pl_死亡粒子;
公共文本:Prougui NumOfHappyPower;
公共文本:Prougui NumOfSadPower;
#端区
#区域HapAndSad系统变量
公共int playerHappinessPower;
[HideInInstitct]公共int currentHappinessPower;0)
{
numosadpower.text=currentSadnesPower.ToString();
}
}
IEnumerator检查页面的数据状态()
{
if(isSad==true)//这里是false
{
产生返回新的WaitForSeconds(2f);
GameObject PlayerDeath\u particle\u Prefact=实例化(Pl\u Death particle,Player.transform.position,Quaternion.identity);
销毁(玩家死亡粒子预制游戏对象,1f);
销毁(玩家。游戏对象);
}
}
}
这是敌人阶级:

public class EnemyHealth : MonoBehaviour

    #region Public Instances
    public GameObject Enemy;
    public GameObject En_DeathParticle;

    public TextMeshProUGUI NumOfHappyPower;
    public TextMeshProUGUI NumOfSadPower;
    #endregion

    #region HapAndSad System Variables
    public int enemySadnesPower;
    [HideInInspector] public int currentHappinessPower;
    [HideInInspector] public int currentSadnesPower;
    #endregion

    #region HapAndSad States
    private bool isSad = true;
    #endregion

    void Start()
    {
        currentSadnesPower = enemySadnesPower;
        NumOfHappyPower.enabled = false;
    }

    void Update()
    {
        HapAndSadPowerSystem();
        StartCoroutine(CheckThePlayerSadState());
    }

    void HapAndSadPowerSystem()
    {
        if (currentSadnesPower > 0)
        {
            NumOfSadPower.text = currentSadnesPower.ToString();
        }

        else if (currentSadnesPower == 0)
        {
            NumOfHappyPower.enabled = true;
            NumOfSadPower.enabled = false;

        }

        else if (currentSadnesPower < 0 && currentHappinessPower == 0)
        {
            isSad = false;
            currentHappinessPower = currentSadnesPower * -1;
            NumOfHappyPower.enabled = true;
            NumOfSadPower.enabled = false;
            NumOfHappyPower.text = currentHappinessPower.ToString();
        }

        else if (currentHappinessPower > 0)
        {
            NumOfHappyPower.text = currentHappinessPower.ToString();
        }
    }

    IEnumerator CheckThePlayerSadState()
    {
        if (isSad == false)
        {
            yield return new WaitForSeconds(2f);
            GameObject PlayerDeath_particle_prefab = Instantiate(En_DeathParticle, Enemy.transform.position, Quaternion.identity);

            Destroy(PlayerDeath_particle_prefab.gameObject, 1f);
            Destroy(Enemy.gameObject);
        }
    }
}
公共类EnemyHealth:单一行为
#区域公共实例
公众游戏对象敌人;
公共游戏对象En_死亡粒子;
公共文本:Prougui NumOfHappyPower;
公共文本:Prougui NumOfSadPower;
#端区
#区域HapAndSad系统变量
公营企业内部权力;
[HideInInstit]公共幸福力量;
[HideInInstit]公共int currentSadnesPower;
#端区
#区域HapAndSad状态
private bool isSad=真;
#端区
void Start()
{
currentSadnesPower=敌人SadnesPower;
NumOfHappyPower.enabled=false;
}
无效更新()
{
hapandsad动力系统();
启动例行程序(检查playersadstate());
}
void hapandsad powersystem()
{
如果(currentSadnesPower>0)
{
numosadpower.text=currentSadnesPower.ToString();
}
else if(currentSadnesPower==0)
{
NumOfHappyPower.enabled=true;
NumOfSadPower.enabled=false;
}
else if(currentSadnesPower<0&&CurrentHappinesPower==0)
{
isSad=假;
CurrentHappinesPower=currentSadnesPower*-1;
NumOfHappyPower.enabled=true;
NumOfSadPower.enabled=false;
NumOfHappyPower.text=currentHappinessPower.ToString();
}
否则如果(CurrentHappinesPower>0)
{
NumOfHappyPower.text=currentHappinessPower.ToString();
}
}
IEnumerator检查页面的数据状态()
{
if(isSad==false)
{
产生返回新的WaitForSeconds(2f);
GameObject PlayerDeath_particle_Prefact=实例化(En_Death particle,敌方.transform.position,四元数.identity);
销毁(玩家死亡粒子预制游戏对象,1f);
摧毁(敌人。游戏对象);
}
}
}

这些脚本几乎相同。我会使用与玩家和敌人相同的脚本。并添加一个布尔值来区分玩家和敌人

编辑:
如果你想拼命使用继承或多态性,我建议你创建一个实体类,让玩家和敌人从中派生出来。

是的,但我应该使用继承或多态性吗?请你如何解释。继承和多态性是描述不同事物协同工作的术语。不是一个或另一个,而是一个或另一个。继承用于从基础获取数据和操作,多态性用于实现特定的子操作。IMHO,将环境中的所有person对象视为相同。你想在某个时候扩展到多人游戏吗?但也许可以把它们加入一个“团队”或“力量”来区分敌人和朋友。播放器不需要是一个特定的类,而是一个指向您所控制的“人”的静态指针。提供的链接仅涉及部分原因。有时使用接口,有时使用继承,但请记住,它们的处理方式不同。