Vuforia⭐二、动态修改识别目标和3D物体

发布于:2022-12-24 ⋅ 阅读:(335) ⋅ 点赞:(0)

在这里插入图片描述

目录

📢 本节的目标

🟥 动态识别的实现方法


📢 本节的目标

本章目标为不设置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,如下图所示

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等功能修改,接下来步骤由玩家根据自己要求自行修改

大家还有什么问题,欢迎在下方留言!


 

在这里插入图片描述


如果你有 技术的问题  项目开发

都可以加下方联系方式

和我聊一聊你的故事🧡