У меня есть список движущихся врагов, и, хотя я смог заставить их удерживать отдельные HP-очки, которые правильно реагируют на урон от пуль, я хотел, чтобы объект-объект прекратил свое движение при достижении 0 HP - но мне удалось только остановите все перечисленные объекты.
HP хранится в простом классе EnemyHP, который содержит только целое число publi c.
Вот часть класса EnemyController:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class EnemyController : MonoBehaviour
{
private Transform enemyHolder;
public float speed;
public GameObject shot;
public GameObject enemy;
public GameObject enemy2;
public Text winText;
int secCount;
float timer = 0;
public float fireRate = 0.997f;
public int enemyCount;
void Start()
{
enemyCount = 0;
secCount = 0;
enemyHolder = GetComponent<Transform>();
winText.enabled = false;
InvokeRepeating("MoveEnemy", 0f, 0.016f);
}
private List<GameObject> allSpawns = new List<GameObject>();
void MoveEnemy()
{
float xPosition = Random.Range(-11f, 11f);
int enemyType = Random.Range(0, 8);
secCount = Random.Range(2, 4);
timer += Time.deltaTime;
if (timer >= secCount && enemyCount < 25)
{
if (enemyType > 0)
{
GameObject spawned = Instantiate(enemy, new Vector3(xPosition, 6, 0), Quaternion.identity);
allSpawns.Add(spawned);
}
else
{
GameObject spawned = Instantiate(enemy2, new Vector3(xPosition, 6, 0), Quaternion.identity);
allSpawns.Add(spawned);
}
enemyCount++;
timer = timer - secCount;
}
foreach (GameObject thisEnemy in allSpawns)
{
//I expected this part to work
EnemyHP hpComponent = thisEnemy.GetComponent<EnemyHP>();
if (hpComponent.health > 0)
{
if (thisEnemy != null)
{
thisEnemy.transform.position += new Vector3(0, -1 * speed * Time.deltaTime, 0);
}
}
} ...
Вот контроллер пули, который корректно воздействует на отдельные HP:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BulletController : MonoBehaviour
{
private Transform bullet;
public int power;
public float speed;
// Start is called before the first frame update
void Start()
{
bullet = GetComponent<Transform>();
}
void FixedUpdate()
{
bullet.position += transform.up * speed;
if (bullet.position.y >= 10)
Destroy(gameObject);
}
void OnTriggerEnter2D(Collider2D other)
{
if (other.CompareTag ("Enemy") || other.CompareTag("Enemy2"))
{
EnemyHP hpComponent = other.gameObject.GetComponent<EnemyHP>();
hpComponent.health = hpComponent.health - power;
Destroy(gameObject);
if (hpComponent.health < 1)
{
hpComponent.health = 0;
Destroy(other.gameObject, 1);
PlayerScore.playerScore++;
}
}
}
}
А это класс EnemyHP:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyHP : MonoBehaviour
{
public int health;
}
Как это исправить? Заранее спасибо.