关于识别照片的选择:
有棱有角,,无光泽的卡片最好,较硬的卡片不会有歪曲和褶皱的地方,可以更好的聚焦。
图片要包含细节,较高的对比度,最好没有重复的图像,例如街道,运动场的等。
注意:上传到网上的图片有%8的宽度被称为功能排斥缓冲区,,也就是说,这部分的内容不会被识别。
轮廓越多,棱角越分明,图片识别杜越好,进行图像识别的时候,光照也很重要,漫反射灯光,与光照适度明亮的情况,识别度是最好的。
关于识别的函数:
首先,当你想令摄像头检测到识别的照片,会出现一些你想要出现的图像的时候,需要在AR camera自带的脚本中修改功能,比如,我想要当摄像头追踪到某一张特定图片的时候,将艾希的人物模型显示出来应该这样重写代码:
protected virtual void OnTrackingFound()//在追踪到卡片的时候进行的操作
{
GameObject AX = GameObject.Instantiate(AiXiprefab);//首先将艾希的预制体实例化
AX.transform.position = this.transform.position;//然后将艾希的位置固定于卡片的位置
AX.transform.parent = this.transform;//将卡片设置成艾希预制体的父本,因为AR的追踪函数都是针对其父本的子物体而言的
}
然后当所识别的图像丢失的时候,销毁模型
protected virtual void OnTrackingLost()
{
Destroy(GameObject.Find("AiXi(Clone)"));
//切换识别图片的功能
}
实现AR长按屏幕,销毁模型的功能
新建脚本
void Update()
{
if (Input.GetMouseButton(0))//作用就是当单击寒冰,让寒冰自动消失
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//向手指点击的位置发射一条射线
RaycastHit hitInfo = new RaycastHit();//接收返回的信息,射线触碰到谁就返回谁的信息??
Debug.Log("点击事件");
Debug.Log(Physics.Raycast(ray, out hitInfo,10000));
if (Physics.Raycast(ray, out hitInfo))//若发射的射线与屏幕中的任意碰撞器发生碰撞,则返回碰撞器的详细信息
{
Debug.Log("判断事件");
if (Input.touchCount == 1)
{
Debug.Log("触摸事件");
Touch touch = Input.GetTouch(0);//获取到点击屏幕的事件
if (touch.phase == TouchPhase.Began)
{
newTouch = true;
touchTime = Time.time;
}
else if (touch.phase == TouchPhase.Stationary)//说明现在的点击状态是点击之后静止也就是长按
{
if (newTouch == true && Time.time - touchTime > 1F)
{
newTouch = false;
Destroy(hitInfo.collider.gameObject);//销毁所触碰到的物体
}
}
else
{
newTouch = false;
}
}
}
}
}
}
将此脚本挂在ARcamera上,切记切记,把MainCamera删除。
设置人物模型的大小的时候,如果我们把ARcamera 自带的Default Trackable EventHandler (Script)删掉,或者修改之后,InageTarget的大小可能会影响到我们动态生成的人物模型的大小。