Здравствуйте, делаю шутер. Мне нужно реализовать убийство объекта, для меня это не проблема, но только когда он один. а так у меня их 10. Я по ним стреляю и когда здоровье врага закончилось он должен умереть - удалиться, но как сделать удаление именно того, в кого стрелял, ведь они все с одинаковым тегом и т.д, так как они спавнятся из префаба? Пробовал реализовать эту тему, но выдает ошибку -
"Destroying assets is not permitted to avoid data loss.
If you really want to remove an asset use DestroyImmediate (theObject, true);
UnityEngine.Object:Destroy(Object)
Shooting:Update() (at Assets/Scripts/Shooting.cs:28)"
public class Shooting : MonoBehaviour
{
public Camera cam;
public float RayLength;
public Enemy enemy;
public GameObject EnemyBody;
public float damage = 25f;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetButton("Fire1"))
{
Shoot();
}
if (enemy.Health <= 0)
{
Destroy(EnemyBody);
}
}
void Shoot()
{
RaycastHit hit;
if (Physics.Raycast(cam.transform.position, cam.transform.forward, out hit, RayLength))
{
if (hit.rigidbody.CompareTag("Enemy") && hit.rigidbody != null)
{
enemy.TakeDamage(damage);
}
}
}
public class Enemy : MonoBehaviour
{
private Rigidbody rb;
public float Health;
public GameObject Player;
public EnemySpawn enemySpawn;
// Start is called before the first frame update
void Start()
{
rb = GetComponent<Rigidbody>();
Health = 100f;
Player = GameObject.FindGameObjectWithTag("Player");
}
// Update is called once per frame
void Update()
{
rb.transform.position = Vector3.MoveTowards(transform.position, Player.transform.position, 5f * Time.deltaTime);
}
public void TakeDamage(float amount)
{
Health -= amount;
if (Health <= 0)
{
Die();
}
}
void Die()
{
Destroy(gameObject);
}
public class EnemySpawn : MonoBehaviour
{
public GameObject Enemy;
public int enemyCount;
// Start is called before the first frame update
void Start()
{
StartCoroutine(da());
Enemy = GameObject.FindGameObjectWithTag("Enemy");
}
// Update is called once per frame
void Update()
{
}
public IEnumerator da()
{
while (enemyCount < 10)
{
Instantiate(Enemy, new Vector3(Random.Range(-100, 100), 1f, Random.Range(-100, 100)), Quaternion.identity);
yield return new WaitForSeconds(3f);
enemyCount += 1;
}
}