首页 > 解决方案 > 在 Image Target 渲染之前,具有重力的物体会持续下落

问题描述

我正在尝试将一些内容渲染到图像目标上,并且其中一个对象具有Rigidbody重力。有重力的物体在场景一开始就开始下落,但是图像目标还没有被识别出来,所以它一直在下落。

我在网上看到一些代码建议实施ITrackableEventHandler,但 Vuforia 网站上的指南不再起作用。

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;
    }
  }
}

标签: c#unity3dvuforia

解决方案


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's注册这个,TrackableBehavior因为 's 的Start方法DefaultTrackableEventHandler已经为你做了。您需要做的就是将此脚本放到您的脚本上ImageTarget,然后在检查器中设置玩家(或任何具有重力的物体)的刚体。


推荐阅读