Не реализуется Destroy.Object в unity

Идея состояла в том, что префабы генерируются рандомно из папки значений, доходят до второй точки, происходит итерация с игроком, там они уходят на выход, и исчезают. Но дестрой не происходит, а также объекты идут раньше, чем прошлый выйдет со второй позиции. Как можно это изменить?

Скрипт контролера "НПС"

using UnityEngine;
using System.Collections;

public class CustomerController : MonoBehaviour
{
    private Transform targetPoint;
    private Transform exitPoint;
    public float moveSpeed = 2f;
    private bool interacted = false;
    private bool isMoving = true;
    private Renderer customerRenderer;
    public Material glowMaterial;
    private Material originalMaterial;

    public delegate void CustomerExitHandler();
    public event CustomerExitHandler OnCustomerExit;

    private void Start()
    {
        customerRenderer = GetComponent<Renderer>();
        originalMaterial = customerRenderer.material;
        Glow(true);
        Debug.Log("Customer started.");
    }

    private void Update()
    {
        if (isMoving && targetPoint != null)
        {
            MoveTowardsTarget(targetPoint);
        }
    }

    public void SetTarget(Transform target, Transform exit)
    {
        targetPoint = target;
        exitPoint = exit;
        Debug.Log("Target and Exit points set. Target: " + target.position + ", Exit: " + exit.position);
    }

    private void MoveTowardsTarget(Transform target)
    {
        Vector3 direction = (target.position - transform.position).normalized;
        transform.position += direction * moveSpeed * Time.deltaTime;

        if (Vector3.Distance(transform.position, target.position) < 0.1f)
        {
            isMoving = false;
            if (target == targetPoint)
            {
                Debug.Log("Reached target point");
                // Ожидание взаимодействия
            }
            else if (target == exitPoint)
            {
                Debug.Log("Reached exit point, destroying object.");
                OnCustomerExit?.Invoke();
                Destroy(gameObject);
            }
        }
    }

    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player") && !interacted)
        {
            interacted = true;
            isMoving = false;
            StartCoroutine(InteractAndLeave());
        }
    }

    public void HandleInteraction()
    {
        if (!interacted)
        {
            interacted = true;
            isMoving = false;
            StartCoroutine(InteractAndLeave());
        }
    }

    private IEnumerator InteractAndLeave()
    {
        Glow(false);
        Debug.Log("Привет - Привет");

        while (!Input.GetButtonDown("Interact"))
        {
            yield return null;
        }

        Debug.Log("Диалог закончился");
        isMoving = true;
        targetPoint = exitPoint;
    }

    private void Glow(bool state)
    {
        if (customerRenderer == null)
        {
            Debug.LogError("Renderer component is not set.");
            return;
        }

        customerRenderer.material = state ? glowMaterial : originalMaterial;
    }

    private void OnDestroy()
    {
        Debug.Log("Object destroyed.");
        OnCustomerExit?.Invoke();
    }
}

Скрипт менеджера объектов который в моменте после создания назначение префабам 2 точки

using UnityEngine;

public class ObjectManager : MonoBehaviour
{
    public static ObjectManager Instance;

    public Transform targetPoint;
    public Transform exitPoint;

    private void Awake()
    {
        if (Instance == null)
        {
            Instance = this;
        }
        else
        {
            Destroy(gameObject);
        }
    }
}

Скрипт на всякий случай самого спаунера

using UnityEngine;
using System.Collections;

public class CustomerSpawner : MonoBehaviour
{
    public GameObject[] customerPrefabs; // Массив префабов
    public Transform spawnPoint; // Точка спауна
    public float spawnInterval = 5f; // Интервал спауна

    private void Start()
    {
        StartCoroutine(SpawnCustomers());
    }

    private IEnumerator SpawnCustomers()
    {
        while (true)
        {
            SpawnCustomer();
            yield return new WaitForSeconds(spawnInterval);
        }
    }

    private void SpawnCustomer()
    {
        int randomIndex = Random.Range(0, customerPrefabs.Length);
        GameObject customer = Instantiate(customerPrefabs[randomIndex], spawnPoint.position, spawnPoint.rotation);
        CustomerController customerController = customer.GetComponent<CustomerController>();
        customerController.SetTarget(ObjectManager.Instance.targetPoint, ObjectManager.Instance.exitPoint);
        customerController.OnCustomerExit += HandleCustomerExit;
    }

    private void HandleCustomerExit()
    {
        Debug.Log("Customer exited the target zone.");
    }
}

Ответы (0 шт):