【发布时间】:2015-01-09 05:38:38
【问题描述】:
我是 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);
}
}
【问题讨论】:
-
是否每个敌人都附加了自己的脚本,或者敌人管理器脚本是否附加在其他东西上?我要做的是在敌人身上附加一个脚本来保存变量的剩余生命。
-
每个敌人只附加了一个 EnemyManager 脚本,并且在名为 GameManager 的空对象中。那么,您的建议是创建一个脚本来保存敌人的生命并将其附加到敌人身上?
-
你应该给每个敌人一个脚本来管理它的生命值和所有与生命值相关的东西,比如死亡。健康管理不应该是 GameManager 的一部分,因为名为“GameManager”的类应该只管理游戏部分,如得分、重置、保存、加载等。此外,GameObject.Find() 是一个非常慢的操作,应该是尽可能避免。