【发布时间】:2023-04-09 11:54:01
【问题描述】:
我正在尝试使用 Unity 和 Vuforia 创建 AR 应用。我有一个 3D 模型,需要在检测到地平面时生成。但这只需要发生一次。 Vuforia 的工作方式是,当检测到新平面时,它会继续生成对象。所以我需要做的是要么只检测一次平面,要么只生成一次对象。由于我是 Unity 的新手,因此我需要帮助。如果有人能告诉我我需要做些什么来实现这一目标,那就太好了。
【问题讨论】:
我正在尝试使用 Unity 和 Vuforia 创建 AR 应用。我有一个 3D 模型,需要在检测到地平面时生成。但这只需要发生一次。 Vuforia 的工作方式是,当检测到新平面时,它会继续生成对象。所以我需要做的是要么只检测一次平面,要么只生成一次对象。由于我是 Unity 的新手,因此我需要帮助。如果有人能告诉我我需要做些什么来实现这一目标,那就太好了。
【问题讨论】:
大多数答案都是正确的,但有点过时了,正确的方法是通过代码。
例如创建一个名为 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,如下图)
希望对你有帮助
【讨论】:
请尝试 vuforia 网站解决此问题
【讨论】:
我挣扎了很久,总之我们必须在命中后禁用 AnchorInputListenerBehaviour。
我在 PlaneFinder 上附加了一个新脚本,代码如下:
<!-- language-all: c# -->
public void OnInteractiveHitTest(HitTestResult result)
{
var listenerBehaviour = GetComponent<AnchorInputListenerBehaviour>();
if (listenerBehaviour != null)
{
listenerBehaviour.enabled = false;
}
}
我在 Plane Finder Behavior 上添加了事件
就这些了,希望对你有用。
【讨论】:
在您的应用中,您应该在某处有一个 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 更改为以下内容:
【讨论】: