5.7 识别物体
物体识别需要将物体的3D信息导入到Unity。一组物体的3D信息包括3类文件:3D模型文件(.obj)、材质文件(.jpg或.png等图片文件)和材质库文件(.mtl),如图5-68所示。
图5-68
物体识别更多细节可以参看官方说明,网址为https://www.easyar.cn/doc/EasyAR%20SDK/Guides/EasyAR-3D-Object-Tracking.html。
(1)在Unity下新建“Models”目录(也可以是其他目录),将一组3D信息文件导入。这里导入的文件将用于在Unity的场景中显示并定位物体。
(2)在Unity下新建“StreamingAssets”目录,再次导入这一组3D信息文件。这里导入的文件是提供给EasyAR识别的。
(3)新建一个场景,删除原有的“Main Camera”,从目录“EasyAR/Prefabs/Composites”里将预制件“EasyAR_ObjectTracker-1”拖动添加到场景中,并将EasyAR的“SDK License Key”复制到“EasyARBehaviour”组件的“Key”属性中。
(4)将“EasyAR/Prefabs/Primitives”目录下的预制件“ObjectTarget”拖动添加到场景中,如图5-69所示。
图5-69
(5)将场景中的“ObjectTracker”游戏对象拖入“ObjectTarget”游戏对象的“ObjectTargetBehaviour”组件的“Loader”属性中为该属性赋值。
(6)将要识别的3D模型(.obj)的路径填写在“ObjectTargetBehaviour”组件的“Path”属性中,路径以“StreamingAssets”目录为根目录。
(7)设置“ObjectTargetBehaviour”组件的“Storage”属性为“Assets”,如图5-70所示。
图5-70
(8)将“Models”目录下的3D模型文件(.obj)拖到“ObjectTarget”游戏对象下,成为其子对象。
(9)修改3D模型文件的角度,设置“X”为90、“Z”为-180。这里如果没有设置角度,识别后的位置会偏移,如图5-71所示。
图5-71
(10)选中场景中的3D模型“hexagon”游戏对象,将“Models”目录下的材质文件(.jpg)拖到3D模型上,如图5-72所示。这时运行程序脚本,当识别出3D物体后,会将Unity场景中的3D模型套在显示的模型上面,如图5-73所示。
图5-72
图5-73
(11)为了更好理解,添加一个新的3D物体。在“hexagon”游戏对象上单击鼠标右键,选择“3D Object→Cube”选项,为“hexagon”游戏对象添加一个方块作为子对象。
(12)选中新添加的“Cube”游戏对象,修改其属性,使其在“hexagon”游戏对象旁边,稍微大一点,如图5-74所示。这时运行,当识别出3D物体以后,还会在旁边添加一个方块,如图5-75所示。
图5-74
图5-75
物体识别的类和图片识别的类使用方法基本一致,也可以识别多个、包括路径的设置等。其中也包括识别后播放视频。
在之前的项目上继续。
(13)将要播放的视频导入“StreamingAssets”目录,然后修改“VideoPlayerBehaviour”组件的属性。
(14)将要播放的视频的路径填写在“VideoPlayerBehaviour”组件的“Path”属性中,路径以“StreamingAssets”目录为根目录。
(15)将所有复选框都选中。
(16)设置“VideoPlayerBehaviour”组件的“Storage”属性为“Assets”。
重复5.6.1小节的步骤(16)~(26),将项目打包并安装到移动设备。运行后,视频会在3D模型表面播放,效果如图5-76所示。
图5-76