如何检查列表中是否包含gameObject?

我需要通过比较圆柱和孔的变换位置来检查孔是空的还是空的。请注意,我不能简单地做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);
        }
    }

感谢您的帮助!

jasoncarbonfree 回答:如何检查列表中是否包含gameObject?

我不明白为什么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

本文链接:https://www.f2er.com/3129298.html

大家都在问