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