小功能丨Vuforia动态修改识别目标和3D物体

版权声明:欢迎转载,转载请注明出处 https://blog.csdn.net/weixin_38239050/article/details/86230076

概要:

本章目标为不设置ImageTarget,Unity完成动态识别识别图。

实现方法:

1、Vuforia官网上传识别目标,下载unitypackage并导入Unity

2、导入Vuforia SDK,并将ARCamera放置到场景,激活要识别的Datasets。由于激活了Datasets,这时,尽管没有放置ImageTarget,运行游戏,仍可看到Vuforia自动创建了多个带有ImageTargetBehaviour的New Game Object

3、创建空物体TargetManager,添加TargetCreator脚本,代码如下

using System.Collections.Generic;
using UnityEngine;
using Vuforia;

public class TargetCreator : MonoBehaviour
{
    //每张识别图对应现实的3D物体
    public GameObject[] targetPrefabs;

    public void ConfigTrackable(string targetKey)
    {
        if (targetPrefabs == null && targetKey == null) return;

        //获取场景中所有的识别图   
        //GetTrackableBehaviours:Returns all currently instantiated TrackableBehaviours except Words
        IEnumerable<TrackableBehaviour> trackables = TrackerManager.Instance.GetStateManager().GetTrackableBehaviours();
        foreach (TrackableBehaviour behaviour in trackables)
        {
            if (behaviour.TrackableName == targetKey)
            {
                behaviour.gameObject.name = "ImageTarget"; //修改NewGameObject名称为ImageTarget
                behaviour.gameObject.AddComponent<DefaultTrackableEventHandler>(); //添加事件处理脚本
                behaviour.gameObject.AddComponent<TurnOffBehaviour>(); //添加禁用渲染工具脚本

                foreach (GameObject prefab in targetPrefabs)
                {
                    if (prefab.name.Equals(targetKey))
                    {
                        GameObject obj = GameObject.Instantiate(prefab);
                        obj.transform.parent = behaviour.transform;
                        return;
                    }
                }
            }
        }
    }

}

代码解析:

1)、由behaviour.TrackableName == targetKey可以看出,我们在调用ConfigTrackable(string targetKey)方法时,要传入的是识别图的名称

2)、由prefab.name.Equals(targetKey)可以看出,我们预制体的名称,要=Vuforia上传的识别图的名称

4、创建Button和InputField,如下图所示

扫描二维码关注公众号,回复: 4860944 查看本文章

5、创建脚本Skode_Identification,挂载到TargetManager,代码如下。将输入框的text赋值到inputText,Button绑定Skode_Iden方法

using UnityEngine;
using UnityEngine.UI;

public class Skode_Identification : MonoBehaviour {

    public Text inputText;
    public void Skode_Iden()
    {
        GetComponent<TargetCreator>().ConfigTrackable(inputText.text);
    }
}

6、测试(在PC端进行,要有摄像头)

运行游戏,输入某识别图的名称,点击Button,将摄像头对准要识别的图片

在Hierarchy面板找到显示出来的模型,此时该模型比例或许不是预期想要的大小,调整模型位置角度等,记下其Transform各数据,进行下一步的Vuforia DefaultTrackableEventHandler—OnTrackingFound等功能修改,接下来步骤由玩家根据自己要求自行修改

7、Enjoy

技术拓展:

本章是在Unity端直接实现,由Unity的该方法,在特殊情况下,也可进行Unity与安卓的互调。

调用参考链接:互调

猜你喜欢

转载自blog.csdn.net/weixin_38239050/article/details/86230076
今日推荐