敌人生命和子弹力量统一3d c#
本文关键字:3d 力量 生命 子弹 敌人 | 更新日期: 2023-09-27 18:36:47
我是Unity的新手。我已经成功地使玩家可以向敌人发射子弹取决于当前波,而我使敌人拥有的地方是自己的生命取决于当前波乘以一定的价值。如果敌人生命值为0,则敌人死亡。但是,问题是:例如,场景中有 2 个敌人,敌人生命值为 5,玩家开始射击第一个敌人,直到敌人生命值减少到 2,当玩家开始射击第二个敌人时,敌人的生命不再是 5,而是 2,直到 2 个立方体中的一个死亡并且敌人生命重置为 5。
如何解决这个问题?
这是项目符号脚本:
public class BulletManager : MonoBehaviour
{
private ScoreManager scoreManager;
private PlayerController playerController;
private EnemyManager enemyManager;
public int bulletPower;
private void Start()
{
scoreManager = GameObject.Find("Game Manager").GetComponent<ScoreManager>();
playerController = GameObject.Find("Character").GetComponent<PlayerController>();
enemyManager = GameObject.Find("Game Manager").GetComponent<EnemyManager>();
bulletPower = playerController.currentWave;
}
private void OnTriggerEnter(Collider col)
{
if (col.gameObject.tag == "Enemy")
{
enemyManager.enemyLife -= bulletPower;
if (enemyManager.enemyLife <= 0)
{
scoreManager.Points += (2 * playerController.currentWave);
enemyManager.enemyLife = playerController.currentWave * 5;
Destroy(col.gameObject);
}
}
}
}
这是敌人的脚本:
public class EnemyManager : MonoBehaviour
{
private ScoreManager scoreManager;
private SoundManager soundManager;
private PlayerController playerController;
public int enemyLife;
private void Start()
{
scoreManager = GameObject.Find("Game Manager").GetComponent<ScoreManager>();
soundManager = GameObject.Find("Game Manager").GetComponent<SoundManager>();
playerController = GameObject.Find("Character").GetComponent<PlayerController>();
enemyLife = playerController.currentWave * 5;
}
private void Update()
{
if (playerController.life <= 0)
{
Invoke("Restart", 1);
}
}
private void OnTriggerEnter(Collider col)
{
if (col.gameObject.tag == "Bullet")
{
soundManager.PlaySound("Enemy Dead");
Destroy(col.gameObject);
}
else if (col.gameObject.tag == "Destroyer")
{
playerController.life--;
}
}
private void Restart()
{
scoreManager.SendToHighScore();
Application.LoadLevel(0);
}
}
问题是你所有的敌人都使用敌人经理类来管理他们的生命值。你的代码所做的是计算所有敌人的命中量,然后摧毁最后一个被击中的敌人。我的建议是添加一个 EnemyStats 类来管理特定于每个敌人的属性(敌人的名称、他们可以造成的伤害量、武器图形、音效、天空极限)。我不想马上给你答案(或者至少是一个基本的答案),因为这是一个很好的学习机会,但这里有一个基本的脚本,应该做你需要的,你需要对你的BulletManager脚本所做的更改。
敌人统计.cs(附加到敌人游戏对象)
public class EnemyStats : MonoBehaviour
{
public int currentHealth;
public int maxHealth;
public float increasePerWave;
public int bulletPower;
// use a negative value for healing
public void ReduceHealth(int damage)
{
currentHealth -= damage;
}
public bool IsDead()
{
return currentHealth <= 0;
}
public int GetDamage()
{
return bulletPower;
}
/// Restores enemy to their max health for the current wave. Call this after creating an spawning.
public void RestoreHealth(int wave)
{
currentHealth = (int)(maxHealth * increasePerWave * (wave + 1));
}
}
项目符号管理器更新
private void OnTriggerEnter(Collider col)
{
if (col.gameObject.tag == "Enemy")
{
EnemyStats stats = col.GetComponent<EnemyStats>();
if (stats)
{
stats.ReduceHealth(bulletPower);
if (stats.IsDead())
{
scoreManager.Points += (2 * playerController.currentWave);
Destroy(col.gameObject);
}
}
}
}