微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有重力的对象在 Image Target 渲染之前连续下落

如何解决具有重力的对象在 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;
    }
}

您不需要在 ImageTargetTrackableBehavior 中注册它,因为 StartDefaultTrackableEventHandler 方法已经为您完成了这项工作。您需要做的就是将此脚本放到您的 ImageTarget 上,然后在检查器中设置玩家(或任何具有重力的对象)刚体。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。