Задать вопрос
@Gera01
Unity, С# и больше ничего.

Как убрать из листа обьект который вышел из поля зрения (вопрос по raycast)?

Есть скрипт для зрения бота. Вопрос в том, что обьекты которые видит бот добавляются, но не убераются из этого списка. Как это можно сделать?

[SerializeField] 
    private float _seeRange;
    
    [SerializeField] 
    private int _deviationRayFromCenter;
    
    [SerializeField]
    private List<GameObject> _objectsThatISee;

    public List<GameObject> GetObjectThatISee()
    {
        return _objectsThatISee;
    }

    void Update()
    {
        for (float i = 0f; i < _deviationRayFromCenter;)
        {
            i += 0.1f;
            Debug.DrawRay(transform.position, transform.forward + Vector3.right * i, Color.magenta, _seeRange);
            Debug.DrawRay(transform.position, transform.forward + Vector3.left * i, Color.magenta, _seeRange);
            
            SeeRaycast(Vector3.left, i);
            SeeRaycast(Vector3.right, i);
        }
    }

    private void SeeRaycast(Vector3 addVector, float addToVector)
    {
        RaycastHit hit;
        if (Physics.Raycast(transform.position, transform.forward + addVector * addToVector, out hit, _seeRange))
        {
            foreach (GameObject _object in _objectsThatISee)
            {
                if (hit.collider.gameObject == _object)
                {
                    return;
                }
            }
            _objectsThatISee.Add(hit.collider.gameObject);
        }
    }
  • Вопрос задан
  • 55 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Gera01 Автор вопроса
Unity, С# и больше ничего.
Решением такой шткуки было обнуление списка при каждом вызове в начале, до пускания рейкастов.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@oleg_ods
У List есть метод Remove(), который как раз таки удаляет объекты из листа.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы