@Bruh_Bruh

Как реализовать удаление одного из множества одинаковых объектов?

Здравствуйте, делаю шутер. Мне нужно реализовать убийство объекта, для меня это не проблема, но только когда он один. а так у меня их 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;
        }
    }
  • Вопрос задан
  • 198 просмотров
Пригласить эксперта
Ответы на вопрос 1
@ReWire_92
Зачем ты делаешь Destroy в классе Shooting, если в классе Enemy у тебя уже есть функция Die, которая уничтожает геймобджект?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы