虚拟按钮,让我们可以触摸现实中虚拟存在的按钮而触发事件,通俗来讲,就是让人感觉自己可以触摸虚拟物体一般,话不多说,咱就来试试。如何导入vuforia包就不在此说明了,因为下载的249.65 MB的例子包含了所以的特征。
把ARCamera,ImageTarget,teapot拖到Hierarchy,还有我这四个颜色名字,就是把Virtual Buttons的预设(就是Prefab格式)拖四遍拖入,放置到图片相应的位置,然后重命名下名字。
点击ARCamera的编辑界面,打勾是惯例,不要忘了,这样才能识别该图。
默认的水壶可以设置下默认的材质(不设置也可以,为了好看点= =#)
虚拟按钮部分注意红框部分的名字也要修改,官方给的代码是根据名字来判断你触摸了哪个按钮的
最后我们来设置最重要的部分了,就是ImageTarget部分,第一个红框部分肯定不能忘吧。完成后,设置Virtual Button Event Handler脚本,我也忘了是否导入默认就有这个脚本,如果没有的话找到拖入即可。这里不要忘记把其他材质拖入,最后一个材质是默认材质,就是手不触摸按钮后默认的材质,其他都会随触摸变换。
这里就不贴最后的效果图了,最后运行触摸的话准确度还是挺不错的,放在最后要着重提几点,如果自己的项目放置虚拟按钮,要注意以下几点:
●虚拟按钮大小应大约是目标识别图大小的10%
●最好把虚拟按钮“高亮”,比如识别图上明确显示按钮的位置,提示这是可触摸的,会有事件反馈
●使虚拟按钮和周围有明显的(例色彩)对比(比如一张白纸上放个按钮,很难识别按钮)
●按钮距离边界要有充足的空间,避免按了按钮后追踪不到识别图了
对于按钮位置计算,因为有http://blog.csdn.net/ggtaas/article/details/38523719博主写明(感谢ggtaas),我就不再次说明了。
记得编辑下自己按钮的位置坐标,xml格式的文件,例下图
ImageTarget上自定义好自己的按钮事件脚本
脚本代码例如下:
using UnityEngine; using System.Collections; public class CustomVirtualButtonEventHandler : MonoBehaviour , IVirtualButtonEventHandler { // Use this for initialization void Start () { VirtualButtonBehaviour[] vbs = GetComponentsInChildren<VirtualButtonBehaviour> (); for (int i = 0; i < vbs.Length; ++i) { vbs [i].RegisterEventHandler (this); } } public void update(){ } public void OnButtonPressed( VirtualButtonAbstractBehaviour vb ){ Debug.Log (vb.VirtualButtonName+ " pressed"); } public void OnButtonReleased( VirtualButtonAbstractBehaviour vb ){ Debug.Log(vb.VirtualButtonName+ " released" ); } }