Unity3d与vuforia在检测到目标时显示2d图像

时间:2015-01-14 22:10:14

标签: unity3d augmented-reality vuforia unity3d-gui

我对如何在检测到的标记上显示简单的2d图像有一个疑问。我已经按照一些教程来显示3D模型,它工作正常。 3d没有问题。 当我想添加普通的2d object-> sprite时,问题就出现了。当我添加简单的精灵时,我无法添加纹理,当我插入UI图像时,它与画布一起添加,当目标是 检测。到目前为止,编辑器上的原始图像被放置,以至于很难找到它。 如果有人能突出我正确的方向,我将不胜感激。

我需要让这个图像像按钮一样触摸敏感。单击它必须显示新场景(我有它但在GUI.Button下)。最好的方法是替换原始标记,但我也可以使新的精灵更大,以隐藏它下面的标记。

1 个答案:

答案 0 :(得分:4)

为了帮助理解答案,这里简要介绍了Vuforia如何处理标记检测。如果您查看附加到 ImageTarget预制件 DefaultTrackableEventHandler 脚本,您会看到有什么事情会在何时触发跟踪系统查找或丢失图像。

OnTrackingFound (第67行)& DefaultTrackableEventHandler.cs中的 OnTrackingLost (第88行)

如果你想在跟踪时显示一个精灵,你需要做的只是放置图像目标预制(或任何其他),并使精灵成为预制的一个孩子。启用和禁用应自动发生。

但是,如果您想要做更多其他事情,请参阅以下编辑过的代码。

<强> DefaultTrackableEventHandler.cs

//Assign this in the inspector. This is the GameObject that 
//has a SpriteRenderer and Collider2D component attached to it
public GameObject spriteGameObject ;

将以下行添加到 OnTrackingFound

    //Enable both the Sprite Renderer, and the Collider for the sprite
    //upon Tracking Found. Note that you can change the type of 
    //collider to be more specific (such as BoxCollider2D)
    spriteGameObject.GetComponent<SpriteRenderer>().enabled = true;
    spriteGameObject.GetComponent<Collider2D>().enabled = true;

    //EDIT 1
    //Have the sprite inherit the position and rotation of the Image
    spriteGameObject.transform.position = transform.position;
    spriteGameObject.transform.rotation = transform.rotation;

以下 OnTrackingLost

    //Disable both the Sprite Renderer, and the Collider for the sprite
    //upon Tracking Lost. 
    spriteGameObject.GetComponent<SpriteRenderer>().enabled = false;
    spriteGameObject.GetComponent<Collider2D>().enabled = false;



接下来,您有关检测此Sprite点击次数的问题。 Unity的Monobehaviour会针对很多鼠标事件发起事件,例如 OnMouseUp OnMouseDown 等。

Link to Monobehaviour on Unity's API docs
您需要的是一个名为 OnMouseUpAsButton

的事件

创建一个名为 HandleClicks.cs 的新脚本,并将以下代码添加到其中。将此脚本作为组件附加到您为上面指定的 spriteGameObject

public class HandleClicks : MonoBehaviour {

    //Event fired when a collider receives a mouse down
    //and mouse up event, like the interaction with a button
    void OnMouseUpAsButton () {
        //Do whatever you want to
        Application.LoadLevel("myOtherLevel");
    }

}