如何检查列表中是否包含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);
}
}

谢谢你的帮助!

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

最新更新