平面图像跟踪对图像有一定的要求,纹理细节丰富,纹理不是简单重复,长宽比不能太大。 官方提供了图像检测工具,将图像上传到指定地址,可以知道可识别度。
地址:https://www.easyar.cn/targetcode.html
平面图像跟踪主要是ImageTracker和ImageTarget这两个游戏对象,每个ImageTarget对应一个被跟踪的图像,场景中也可以同时出现多个ImageTracker。
新建一个场景,设置场景中的Main Camera的Clear Flags属性为Solid Color。
将EasyAR_ImageTracker-1预制件拖到场景中。
将ImgaeTarget预制件拖到场景中。
设置利用图片文件进行跟踪,设置Source Type属性为Image File,设置Path Type为StreamingAssets,设置Paht为“bus.jpg”,即跟踪图像相对路径,设置Scale属性为“0.2”。
注意,这里的Scale的大小是指图像在被跟踪的时候,在现实空间的宽度,单位为米。
在ImageTarget游戏对象下添加要显示的3D模型。
运行效果如下:
EasyAR还可以利用Data文件进行跟踪。点击菜单EasyAR–Image Target Data,在弹出窗口中,设置Generate From为Image。将要跟踪的图像拖到Image Path中。设置Name和Scale属性,然后点击Generate按钮。点击之后,默认会在项目的SteamingAssets目录下生成“.etd”文件。
设置Source Type属性为Target Data File,设置Path Type为StreamingAsset】,设置Paht为“birds.etd”,即跟踪数据文件相对路径。
在上面的例子中,修改Simultaneous Target Number值,将其从默认1改为2即可。
运行效果如下:
当视野中的图像数量小于等于跟踪数量的时候,则所有图像都会被跟踪。当视野中的图像数量大于跟踪数量的时候,最先被跟踪的图像会被跟踪。
EasyAR还可以使用多个Tracker进行跟踪
运行效果如下:
EasyAR也可以同时跟踪同一图像的多个副本
运行效果如下:
public ImageTrackerFrameFilter tracker;
public ImageTargetController targetController;
void Awake()
{
if (targetController)
{
targetController.TargetFound += () =>
{
Debug.LogFormat(...); //当图像被跟踪到
};
targetController.TargetLost += () =>
{
Debug.LogFormat(...); //当图像从视野消失
};
targetController.TargetLoad += (Target target, bool status) =>
{
Debug.LogFormat(...); //加载图像
};
targetController.TargetUnload += (Target target, bool status) =>
{
Debug.LogFormat(...); //卸载图像
};
}
}
public void SetTracker(bool status)
{
tracker.enabled = status; //设置是否跟踪
}
public void SetTarget(bool status)
{
if (status)
{
targetController.Tracker = tracker; //加载图像
}
else
{
targetController.Tracker = null; //卸载图像
}
}
视频版地址:
https://www.bilibili.com/video/BV1VZ4y147kj/