我是团结的新手,我正在尝试在HelloARController脚本中创建一个简单的函数。在这个脚本中,我要做的是存储Andy对象放置在现实世界中的位置。我在Update()方法中使用此代码执行此操作:
storePos.Add(hit.Pose.position);
根据我自己的理解,hit.Pose.position是用户点击屏幕的3D定位,相对于现实世界空间(我假设。经过一些研究后我得出了这个结论。请随时纠正我! )。所以我所做的就是将这些坐标存储在List中。如果用户再次点击或点击相同坐标的某个地方,我只想生成一个画布。我这样做是通过使用for循环来比较命中位置和先前存储的位置,如下所示:
for (int i = 0; i < storePos.Count; i++)
{
if (hit.Pose.position == storePos[i])
{
etc...
}
}
在尝试这段代码时,它不起作用,我已经想到了为什么但是很难找到解决这个问题的原因。在继续解决这个问题的同时,我会感谢一些建议,答案或提示! :)
正如我在评论中所说,这使得您的代码无法正常工作。考虑将两个浮点值与==
进行比较由于浮点值的精度不起作用,将vector3s'与3个浮点数进行比较是不可能的。为了实现这一点,您可以为每个存储点定义一个半径,并检查新触摸是否在任何点的半径内,如下所示:
float distance = 0.0f;
for (int i = 0; i < storePos.Count; i++)
{
distance = (hit.Pose.position - storePos[i]).magnitude;
// 0.1 as radius
if (distance < 0.1f )
{
etc...
}
}
此外,如果你想实现像点击Andy对象并生成画布的东西,你可以像这样使用Raycasting
:
Touch touch;
if (!(Input.touchCount < 1 || (touch = Input.GetTouch(0)).phase != TouchPhase.Began))
{
Ray ray = Camera.main.ScreenPointToRay(touch.position);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100))
{
Debug.Log(hit.transform.gameObject+" Object is hit");
}
}