password22
@password22

Почему некорректно работает OverlapSphere?

Здравствуйте. Пытаюсь сейчас сделать так, чтобы у самого ближайшего врага материал становился красным цветом, а когда он не в радиусе, чтобы он обратно становился зеленым. Я не понял как это сделать

  1. Как сделать объект обратно другим цветом? Его ведь больше нет в массиве и доступ я к нему получить не могу

  2. И главная проблема, почему последний ближайший так и остается типо ближайшим? То есть, я подхожу к нему, выводится что он рядом. Затем отхожу и все равно выводится что он рядом. Хотя и в массиве 0 объектов, и он не в радиусе.



public LayerMask layerMask; //enemies

    private Transform nearestEnemy; //ближайший из всех враг
    private float radius = 5f;


    public void OnDrawGizmos()
    {
        Gizmos.color = Color.red;
        Gizmos.DrawWireSphere(transform.position, radius);
    }

    public void FixedUpdate()
    {
        Collider[] hitColliders = Physics.OverlapSphere(transform.position, radius, layerMask);

        float _maxDistance = Mathf.Infinity;

        foreach (Collider collider in hitColliders)
        { 
            float distance = Vector3.Distance(transform.position, collider.transform.position);
            if (distance < _maxDistance)
            {
                _maxDistance = distance;
                nearestEnemy = collider.transform;
            }
        }
        if (nearestEnemy != null)
        {
            nearestEnemy.GetComponent<MeshRenderer>().material.color = Color.yellow; //если объект в радиусе
            Debug.Log("Nearest Enemy: " + nearestEnemy + "; Distance: " + _maxDistance);
        }
        else Debug.Log("There is no enemy in the given radius");

    }


Буду рад любой помощи, ссылке на статью и просто подсказке. Спасибо
  • Вопрос задан
  • 14 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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