C# ARCore存储锚点/可追踪位置并进行比较

C# ARCore存储锚点/可追踪位置并进行比较,c#,unity3d,arcore,C#,Unity3d,Arcore,我是unity新手,我正在尝试在HelloARController脚本中创建一个简单的函数。在这个脚本中,我要做的是存储安迪对象在现实世界中的位置。我在Update()方法中使用以下代码: 根据我自己的理解,hit.Pose.position是用户点击屏幕的位置相对于真实世界空间的3D定位(我假设。经过一些研究,我得出了这个结论。请随时纠正我!)。所以我所做的就是将这些坐标存储在一个列表中。如果用户再次点击相同坐标的某个位置,我只想生成一个画布。我使用for循环将命中位置与以前存储的位置进行比较

我是unity新手,我正在尝试在HelloARController脚本中创建一个简单的函数。在这个脚本中,我要做的是存储安迪对象在现实世界中的位置。我在Update()方法中使用以下代码:

根据我自己的理解,hit.Pose.position是用户点击屏幕的位置相对于真实世界空间的3D定位(我假设。经过一些研究,我得出了这个结论。请随时纠正我!)。所以我所做的就是将这些坐标存储在一个列表中。如果用户再次点击相同坐标的某个位置,我只想生成一个画布。我使用for循环将命中位置与以前存储的位置进行比较,如下所示:

for (int i = 0; i < storePos.Count; i++)
                    {
                        if (hit.Pose.position == storePos[i])
                        {
                            etc...
                        }
                    }
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...
         }
 }
        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");
            }

         }   
for(int i=0;i

当尝试这段代码时,它不起作用,我已经考虑了一些原因,但很难找到解决这个问题的方法。在继续解决这个问题的同时,我希望能得到一些建议、答案或提示!:)

正如我在评论中所说的,您的代码无法正常工作是完全有道理的。考虑到由于浮点值的精度,将两个浮点值与
==
进行比较不起作用,将矢量3'与3个浮点值进行比较是不可能的。为了实现这一点,您可以为每个存储点定义半径,并检查new touch是否位于任何点的半径内,如下所示:

for (int i = 0; i < storePos.Count; i++)
                    {
                        if (hit.Pose.position == storePos[i])
                        {
                            etc...
                        }
                    }
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...
         }
 }
        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");
            }

         }   

你正在比较2
Vector3
,希望它们是相同的,这几乎永远不会发生。因为触摸几乎不可能触摸到同一个位置。如果你想做到这一点,至少给每个点一个半径,如果命中.姿势.位置在这个半径内,等等。我实际上也在想同样的事情,但是在如何有效地实现某种半径方面遇到了困难。您提供的第一段代码非常有帮助!谢谢:)