如何解决具有重力的对象在 Image Target 渲染之前连续下落
我正在尝试将一些内容渲染到图像目标上,其中一个对象具有带有重力的 Rigidbody
。有重力的物体在场景一开始就开始下落,但是图像目标还没有被识别,所以一直下落。
我在网上看到一些代码建议实施 ITrackableEventHandler
,但 Vuforia 网站上的 guide 不再起作用。
Vuforia 建议的代码如下:
using UnityEngine;
using Vuforia;
using System.Collections;
public class MyPrefabInstantiator : MonoBehavIoUr,ITrackableEventHandler {
private TrackableBehavIoUr mTrackableBehavIoUr;
public Transform myModelPrefab;
// Use this for initialization
void Start ()
{
mTrackableBehavIoUr = GetComponent<TrackableBehavIoUr>();
if (mTrackableBehavIoUr) {
mTrackableBehavIoUr.RegisterTrackableEventHandler(this);
}
}
// Update is called once per frame
void Update ()
{
}
public void OnTrackableStateChanged(
TrackableBehavIoUr.Status prevIoUsstatus,TrackableBehavIoUr.Status newStatus)
{
if (newStatus == TrackableBehavIoUr.Status.DETECTED ||
newStatus == TrackableBehavIoUr.Status.TRACKED ||
newStatus == TrackableBehavIoUr.Status.EXTENDED_TRACKED)
{
OnTrackingFound();
}
}
private void OnTrackingFound()
{
if (myModelPrefab != null)
{
Transform myModelTrf = GameObject.Instantiate(myModelPrefab) as Transform;
myModelTrf.parent = mTrackableBehavIoUr.transform;
myModelTrf.localPosition = new Vector3(0f,0f,0f);
myModelTrf.localRotation = Quaternion.identity;
myModelTrf.localScale = new Vector3(0.0005f,0.0005f,0.0005f);
myModelTrf.gameObject.active = true;
}
}
}
解决方法
Vuforia 已经通过 ITrackableEventHandler
类为您实现了 DefaultTrackableEventHandler
您可以使用如下脚本启用和禁用重力:
using UnityEngine;
public class EnablePlayerGravity : DefaultTrackableEventHandler
{
public Rigidbody player;
override protected void OnTrackingLost()
{
player.useGravity = false;
}
override protected void OnTrackingFound()
{
player.useGravity = true;
}
}
您不需要在 ImageTarget
的 TrackableBehavior
中注册它,因为 Start
的 DefaultTrackableEventHandler
方法已经为您完成了这项工作。您需要做的就是将此脚本放到您的 ImageTarget
上,然后在检查器中设置玩家(或任何具有重力的对象)刚体。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。