【发布时间】:2019-09-14 00:56:46
【问题描述】:
我正在创建 AR 应用程序,其中有 10 个图像目标(一次只能识别 1 个)。我想保持 3D 对象即使在目标图像丢失后也能保留,并在再次找到图像目标(相同/或不同目标)后更新 3D 模型...
我已经做了很多事情,例如父更改,协程,调用,但似乎没有一个工作..
提前致谢!
【问题讨论】:
标签: c# unity3d augmented-reality vuforia
我正在创建 AR 应用程序,其中有 10 个图像目标(一次只能识别 1 个)。我想保持 3D 对象即使在目标图像丢失后也能保留,并在再次找到图像目标(相同/或不同目标)后更新 3D 模型...
我已经做了很多事情,例如父更改,协程,调用,但似乎没有一个工作..
提前致谢!
【问题讨论】:
标签: c# unity3d augmented-reality vuforia
您可以在目标丢失时防止对象消失。只需将 (EDIT) OnTrackingLost 方法中的 DefaultTrackableEventHandler 更改为什么都不做。
如果您丢失模型的速度足够快,这将导致您的模型挂在屏幕中间。你慢慢地远离目标,模型到达边缘,可能是在屏幕外时跟踪丢失了。
编辑:
void OnTrackingFound(){
TrackerObject[] trackers = FindObjectsOfType<TrackerObject>()
foreach(var t in trackers){ t.SetOff();}
this.gameObject.GetComponent<TrackerObject>().SetOn();
}
那么你就有了这个附加到所有 ImageTarget 的 TrackerObject 组件。它有 SetOn/Off 方法来执行它所说的操作。
您可以通过存储信息而不是每次都查找它们来改进代码。
【讨论】:
当Vuforia Target存在时,你可以获取检测到的对象的位置和方向,然后你可以将相同的对象实例化为:
GameObject generatedObj = Instantiate(mTrackableBehaviour.gameObject, new Vector3(0,-4.0f,18), Quaternion.identity);
generatedObj.transform.localScale = new Vector3(1,1,1); // change its local scale in x y z format
generatedObj.AddComponent<Translate>();
这样做之后,从场景中禁用 ImageTarget 并在您希望它依赖于 Marker 时再次启用它。 但这有一个限制,即 世界坐标体验不会被体验,会像 https://www.youtube.com/watch?v=iHhMCdh3k7U
【讨论】:
检查您是否没有在 ARCamera 对象的 Vuforia 引擎配置中启用“跟踪设备姿势”选项,此选项会导致对象保留在屏幕中。
禁用“跟踪设备姿势”即可解决问题。
Unity 2018.3.6 与 Vuforia 7
【讨论】: