使用Vuforia& amp;创建仅使用地平面检测一次的对象。团结

时间:2018-02-06 05:20:55

标签: c# unity3d vuforia

我正在尝试使用Unity&创建一个AR应用程序Vuforia。我有一个3D模型,需要在检测到地平面时产生。但这只需要发生一次。 Vuforia工作的方式是,当检测到新的飞机时,它会继续产生物体。所以我需要做的是只检测一次平面或只生成一次对象。由于我是Unity新手,我需要帮助这样做。很棒,如果有人能告诉我我需要做些什么来实现这一点。

6 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

在您的应用中,您应该在某个地方设置Plane Finder对象,默认情况下设置以下属性为enter image description here

Plane Finder对象附加了一个Behavior组件,如果找到了一个平面,则会调用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

答案 2 :(得分:1)

对于更新版本:

enter image description here

转到“高级”设置和“ On Interactive Hit Test”脚本->为脚本选择“关闭”选项。

答案 3 :(得分:1)

我为此苦苦挣扎了很久,总之我们必须在点击后禁用 AnchorInputListenerBehaviour

  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 :(得分:0)

请尝试访问vuforia网站以解决此问题

Introduction to Ground Plane in Unity

答案 5 :(得分:0)

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

创建一个名为GameManager的游戏对象,然后将您要生成的对象的GroundPlaneStage和一个预制对象传递给该GameManager附带的脚本,例如将其命名为GameManagerScript.cs,并创建一个名为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专门针对PlaneFinderBehaviour.cs组件,您将具有OnInteractiveHitTest和OnAutomaticHitTest的回调,在这种情况下,您需要OnAutomativeHitTest,单击+并添加一个新的回调(上面代码中的spawnObject函数类似于下图)

enter image description here

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

enter image description here

我希望对您有帮助