Как я могу проверить, содержится ли gameObject в списке? - PullRequest
0 голосов
/ 10 ноября 2019

Мне нужно проверить погоду, если отверстие заполнено или пусто, сравнивая положение трансформации цилиндров и отверстий. Обратите внимание, что я не могу просто сделать else if (cylpos != holpos), как мне нужно, чтобы это было так. Также кажется, что if (!fullHoles.Contains(hole)) не работает так, как я хочу.

        foreach (GameObject hole in Holes)
    {
        holpos = hole.transform.position;

        foreach (GameObject cylinder in Cylinders)
        {
            cylpos = cylinder.transform.position;

            if (cylpos == holpos)
            {
                fullHoles.Add(hole);
            }
        }
        if (!fullHoles.Contains(hole))
        {
            emptyHoles.Add(hole);
            Debug.Log(hole);
        }
    }

Спасибо за вашу помощь!

1 Ответ

1 голос
/ 10 ноября 2019

Я не понимаю, почему fullHoles.Contains не должен делать здесь трюк.

Но обратите внимание, что Vector3 == operator использует точность 0.00001 для равенства означает, что он делает то же самое, что и

if(Vector3.Distance(cylpos, holpos) < 0.00001f)

Я не знаю, как именно вы перемещаете соответствующие объекты, но очень маловероятно, что перемещенный GameObject будет точно соответствовать позиции с такой точностью во время выполнения.

Так что я могу только догадываться, что объекты не были добавлены в fullholes так, как вы ожидали.


Возможно, вам лучше использовать

[SerializeField] private float threshold = 0.1f;

...

if(Vector3.Distance(cylpos, holpos) < threshold)

и настройте threshold через инспектора в соответствии с вашими потребностями

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