代码之家  ›  专栏  ›  技术社区  ›  Anup G Prasad

使用Vuforia和Unity仅创建一次地平面检测对象

  •  6
  • Anup G Prasad  · 技术社区  · 8 年前

    我正在尝试使用Unity&创建AR应用程序;武福里亚。我有一个三维模型,需要在检测到地平面时生成。但这只需要发生一次。 Vuforia的工作方式是,当检测到新平面时,它会不断生成对象。所以我需要做的是要么只检测一次平面,要么只繁殖一次对象。因为我对团结还不熟悉,所以我需要帮助。如果有人能告诉我需要做什么来实现这一点,那就太好了。

    6 回复  |  直到 8 年前
        1
  •  8
  •   zyonneo    8 年前

    Vuforia已更新。现在没有DeploymentStageOnce脚本。为了在触摸时停止复制,我们必须关闭内容定位行为(脚本)中的复制阶段。单击平面查找器时,请检查检查器。 enter image description here

        2
  •  3
  •   Hristo    8 年前

    在你的应用程序中,你应该有 Plane Finder 对象的某个位置,默认情况下设置了以下属性
    enter image description here

    这个 平面探测器 对象附加了一个行为组件,该组件调用 Position Content 方法(如果找到平面)。该方法属于 Content Positioning Behaviour 并生成您的 Ground Plane Stage . 为了避免出现多个实例,应导入vuforia Deploy Stage Once 位于此处的脚本: https://library.vuforia.com/articles/Solution/ground-plane-guide.html 你应该改变 Plane Finder Behaviour 如下所示: enter image description here

        3
  •  2
  •   ppreetikaa Ani    7 年前

    我挣扎了很长时间,总之我们必须禁用它 AnchorInputListenerBehavior 击中后。

    1. 我在PlaneFinder上附加了一个新脚本,代码如下:

      <!-- language-all: c# -->
      public void OnInteractiveHitTest(HitTestResult result)
      {
          var listenerBehaviour = GetComponent<AnchorInputListenerBehaviour>();
          if (listenerBehaviour != null)
          {
              listenerBehaviour.enabled = false;
          }
       }
      
    2. 我添加了飞机探测器行为事件

    enter image description here

    就这些,我希望它会有用。

        4
  •  1
  •   Deepak    8 年前

    对于更新版本:

    enter image description here

    转到“高级”设置和“交互式命中测试”脚本->为脚本选择“关闭”选项。

        5
  •  1
  •   Mohammad Elsayed    7 年前

    大多数答案都是正确的,但有点过时,正确的方法是通过代码。

    例如,创建一个名为GameManager的游戏对象,并将GroundPlaneStage和要生成的对象的预置传递给附加到该游戏管理器的脚本,例如,将其称为GameManagerScript。并创建一个名为spawnObjects的小函数,该函数执行以下操作:

    public class SceneManagerScript : MonoBehaviour {
    
        public GameObject objPrefab;
        public GameObject ground;
        private int count = 0;
    
        public void spawnObject() {
            Instantiate(objPrefab, new Vector3(count, 0, 0), Quaternion.identity, ground.transform);
        count += 2; 
        }
    }
    

    然后转到PlaneFinder,特别是PlaneFinderBehavior。cs组件您将有OnInteractiveHitTest和OnAutomaticHitTest的回调,如果您需要OnAutomativeHitTest,请单击+并添加一个新回调(上面代码中的函数spawnObject,如下图所示)

    enter image description here

    1. 此外,当您通过预设实例化首选对象时,不要忘记编写适当的位置更新,以防止对象添加到相同的位置
    2. 另外,不要忘记将GroundPlaneStage作为对象的父对象,并意识到您在Instantiate()函数中添加的位置是相对于该父对象的(GroundPlaneStage,在上面的代码中用变量ground表示)
    3. 最后,不要忘记取消选中Plane Finder中“内容定位行为”组件中的复制阶段,如下图所示:

    enter image description here

    我希望这有帮助

        6
  •  0
  •   Codemaker2015    7 年前

    请尝试vuforia网站解决此问题

    Introduction to Ground Plane in Unity