Я новичок в Unity и создал небольшую космическую стрелялку в 2D.
Когда игрок стреляет в противника с помощью болта, вражеский объект уничтожается, и игрок получает 1 очко.
Когда игрок собирает бонусы, он может выстрелить 2 болта одновременно. Если эти 2 удара попали в противника, игрок получает 2 очка вместо 1 очка, к сожалению. Метод OnTriggerEnter в прилагаемом скрипте «DestroyByContact» противника вызывается дважды.
Как я могу игнорировать OnTriggerEnter, если игровой объект разрушается? Может быть, кто-то может мне помочь.
Я добавил код для метода OnTriggerEnter ниже.
private void OnTriggerEnter(Collider other)
{
switch (gameObject.tag)
{
case "Player":
{
if (other.CompareTag("Asteroid"))
{
if (playerController.HasShield())
{
Destroy(other.gameObject); // Asteroid
Instantiate(asteroidExplosion, other.transform.position, other.transform.rotation);
playerController.RemoveShield();
}
else
{
Destroy(other.gameObject); // Asteroid
Destroy(gameObject); // Player
Instantiate(playerExplosion, other.transform.position, other.transform.rotation);
gameController.GameOver();
}
}
if (other.CompareTag("Enemy"))
{
if (playerController.HasShield())
{
Destroy(other.gameObject); // Enemy
Instantiate(enemyExplosion, other.transform.position, other.transform.rotation);
playerController.RemoveShield();
}
else
{
Destroy(other.gameObject); // Enemy
Destroy(gameObject); // Player
Instantiate(playerExplosion, other.transform.position, other.transform.rotation);
gameController.GameOver();
}
}
if (other.CompareTag("BoltEnemy"))
{
if (playerController.HasShield())
{
Destroy(other.gameObject); // BoltEnemy
playerController.RemoveShield();
}
else
{
Destroy(other.gameObject); // BoltEnemy
Destroy(gameObject); // Player
Instantiate(playerExplosion, other.transform.position, other.transform.rotation);
gameController.GameOver();
}
}
if (other.CompareTag("Boss"))
{
// if player ship hits the boss, player gets destroyed, no matter if he has a shield left or not
if (playerController.HasShield())
{
playerController.RemoveShield();
}
Destroy(gameObject); // Player
Instantiate(playerExplosion, other.transform.position, other.transform.rotation);
gameController.GameOver();
}
if (other.CompareTag("PowerUpBolt"))
{
Destroy(other.gameObject); // PowerUpBolt
audioPowerUp.Play();
playerController.IncreaseShotSpawns();
}
if (other.CompareTag("PowerUpHealth"))
{
Destroy(other.gameObject); // PowerUpHealth
audioPowerUp.Play();
if (!playerController.HasShield())
{
playerController.AddShield();
}
}
}
break;
case "Asteroid":
{
if (other.CompareTag("BoltPlayer"))
{
Destroy(other.gameObject); // BoltPlayer
Destroy(gameObject); // Asteroid
Instantiate(asteroidExplosion, other.transform.position, other.transform.rotation);
gameController.AddScore(scoreValueAsteroid);
}
}
break;
case "Enemy":
{
if (other.CompareTag("BoltPlayer"))
{
Destroy(other.gameObject); // BoltPlayer
Destroy(gameObject); // Enemy
Instantiate(enemyExplosion, other.transform.position, other.transform.rotation);
gameController.AddScore(scoreValueEnemy);
gameController.SpawnPowerUp(other.transform);
}
}
break;
case "Boss":
{
if (other.CompareTag("BoltPlayer"))
{
Destroy(other.gameObject); // BoltPlayer
bossController.GotHit();
if (bossController.IsDefeated())
{
Destroy(gameObject); // Boss
Instantiate(playerExplosion, other.transform.position, other.transform.rotation);
gameController.Success();
}
}
}
break;
}
}