在C#unity中使用多态性或接口
在我的unity C#游戏中,我有两个类,一个是在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
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对象视为相同。你想在某个时候扩展到多人游戏吗?但也许可以把它们加入一个“团队”或“力量”来区分敌人和朋友。播放器不需要是一个特定的类,而是一个指向您所控制的“人”的静态指针。提供的链接仅涉及部分原因。有时使用接口,有时使用继承,但请记住,它们的处理方式不同。