我正在尝试使用Unity&创建一个AR应用程序Vuforia。我有一个3D模型,需要在检测到地平面时产生。但这只需要发生一次。 Vuforia工作的方式是,当检测到新的飞机时,它会继续产生物体。所以我需要做的是只检测一次平面或只生成一次对象。由于我是Unity新手,我需要帮助这样做。很棒,如果有人能告诉我我需要做些什么来实现这一点。
答案 0 :(得分:6)
Vuforia已更新。现在没有DeploymentStageOnce脚本。为了在我们触摸时停止复制,我们必须关闭内容定位行为中的重复阶段(脚本)当我们单击Plane Finder时检查Inspector。
答案 1 :(得分:3)
在您的应用中,您应该在某个地方设置Plane Finder
对象,默认情况下设置以下属性为
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
,如下所示:
答案 2 :(得分:1)
答案 3 :(得分:1)
我为此苦苦挣扎了很久,总之我们必须在点击后禁用 AnchorInputListenerBehaviour 。
我在PlaneFinder上附加了一个新脚本,其代码如下:
<!-- language-all: c# -->
public void OnInteractiveHitTest(HitTestResult result)
{
var listenerBehaviour = GetComponent<AnchorInputListenerBehaviour>();
if (listenerBehaviour != null)
{
listenerBehaviour.enabled = false;
}
}
我在“平面查找器行为”中添加了事件
仅此而已,我希望它会有用。
答案 4 :(得分:0)
请尝试访问vuforia网站以解决此问题
答案 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函数类似于下图)
我希望对您有帮助