【发布时间】:2020-11-01 15:36:26
【问题描述】:
在我的Unity C#游戏中,我有两个类,一个是PlayerHealth,另一个是EnemyHealth,它们具有相同的功能,但这两个字段是倒置的currentHapinessPower和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);
}
}
}
这里是敌人类:
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);
}
}
}
【问题讨论】:
-
接口是less performant,而不是使用抽象实现/多态。提供的链接仅涉及一些的原因。有时会使用接口,有时也会使用继承,但请记住它们的处理方式不同。
标签: c# unity3d interface polymorphism