Почему компилятор выдает ошибку, когда я щелкаю правой кнопкой мыши НЕ на элементе пользовательского интерфейса - PullRequest
0 голосов
/ 24 января 2019

Мой компилятор выдает ошибку ArgumentOutOfRangeException в файле List.cs, когда я нажимаю на пустое место, но если я нажимаю на элементы пользовательского интерфейса, это не выдает ошибку. Но как это дает ошибку, если у меня есть чек

if (results != null)

Вот мой код:

public void Update()
{

    if (Input.GetKey(KeyCode.Mouse1))
    {
        eventData = new PointerEventData(eventSystem);
        eventData.position = Input.mousePosition;

        List<RaycastResult> results = new List<RaycastResult>();

        _raycaster.Raycast(eventData, results);

        if (results != null)
        {
            if (results[0].gameObject.tag == "ItemIcon")
            {
                if(currentMenu != null)
                {
                    Destroy(currentMenu);
                }
                currentMenu = Instantiate(SplitMenu, transform);
            }
        }
    }
} 

Ответы [ 4 ]

0 голосов
/ 24 января 2019

Вы можете просто проверить все результаты ..

// Для каждого возвращаемого результата выведите имя GameObject на холсте, попавшем под луч

        foreach (RaycastResult result in results)
        {
            Debug.Log("Hit " + result.gameObject.name);
        }

и позже проверьте ваше состояние, чтобы выйти

0 голосов
/ 24 января 2019

Лучший вариант: нам нужно использовать results.Count != 0 вместо null.

0 голосов
/ 24 января 2019
1.    List<RaycastResult> results = new List<RaycastResult>();

     _raycaster.Raycast(eventData, results);

2.    if (results != null)
    {
3.        if (results[0].gameObject.tag == "ItemIcon")

Строка 1 инициализирует results, поэтому проверка в строке 3 никогда не будет ложной. То, что результаты инициализированы, не означает, что в них есть какие-либо записи, поэтому строка 3 выдаст ошибку, если результатов нет.

Как уже отмечали другие, строка 2 должна быть:

if(results.Any())

.Any() лучше, чем .Count > 0, поскольку подразумевает намерение «что-то есть в списке», а не «количество больше 0».

0 голосов
/ 24 января 2019

Мое лучшее предположение, что вы проверяете эти результаты! = Null, но вы не проверяете, есть ли в результатах какие-либо элементы. Поэтому использование результатов [0] для пустого массива приводит к появлению исключительной ситуации ArgumentOutOfRangeException.

Добавление && results.Any() к проверке if должно разрешить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...