Unity3d with vuforia showing 2d image when targed is detected

拥有回忆 提交于 2019-12-13 04:47:30

问题


I have a question about the way how to show simple 2d image on top of detected marker. I have followed some tutorial to show 3d model and it works fine. there is no problem with 3d. The problem starts when I want to add normal 2d object->sprite . When I add simple sprite I can't add texture and when I insert UI image it's added together with canvas and it is not showed when target is detected. The original image on editor is placed then so far that it's difficult to find it. I would be grateful if somebody can highlight me the right direction.

I need to make this image touch sensitive like a button. Clicking into it must show new scene ( I have it but under GUI.Button). The best way is to replace original marker but I can also make new sprite bigger to hide marker under it.


回答1:


To help understand the answer, here's a quick rundown on how Vuforia handles marker detection. If you take a look at the DefaultTrackableEventHandler script that's attached to the ImageTarget prefab, you'll see that there are events that fire when the when the tracking system finds or loses an Image.

These are OnTrackingFound (line 67) & OnTrackingLost (line 88) in DefaultTrackableEventHandler.cs

If you want to show a Sprite when tracking, all you need to do is put the Image Target prefab (or any other) and make the Sprite a child of the prefab. The enabling and disabling should happen automatically.

However, in case you want to do something more, here's some edited code.

DefaultTrackableEventHandler.cs

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

Add the below lines to 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;

And the below to 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;



Next, your question about detecting clicks on this Sprite. Unity's Monobehaviour fires events for a lot of mouse events, such as OnMouseUp, OnMouseDown etc.

Link to Monobehaviour on Unity's API docs
What you will need is an event called OnMouseUpAsButton

Create a new script called HandleClicks.cs and add the below code to it. Attach this script as a component to the spriteGameObject that you assigned for the above.

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

}


来源:https://stackoverflow.com/questions/27953393/unity3d-with-vuforia-showing-2d-image-when-targed-is-detected

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!