目录
📢 本节的目标
本章目标为不设置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等功能修改,接下来步骤由玩家根据自己要求自行修改
大家还有什么问题,欢迎在下方留言!
如果你有 技术的问题 或 项目开发
都可以加下方联系方式
和我聊一聊你的故事🧡