ARFoundation项目学习记录(二)--基于图像检测的AR庆年应用开发(上)

前言:

给自己尝试一下PBl学习法好吧,哈哈,简单记录下学习过程

项目构思:

本项目计划以庆春节为主题,根据春节的习俗吃年夜饭,制作AR交互模型,通过本案例展示图像检测的部分功能。

项目设计:

当摄像头识别到准备好的年夜饭图片,如图所示,会显示一家人团圆吃年夜饭的模型,可以控制模型的放大与缩小。

项目实施:

在Unity中新建一个项目,命名为AR_Picture, 导入ARFoundation和ARCore XR Plugin,进行Android平台的开发环境配置(在ARFoundation的基本环境配置已经介绍过了)。

在Hierarachy窗口的空白处单击鼠标右键,在弹出的菜单中选择XR>AR Session Origin和XR>AR Session Origin。并删除场景中的Main Camera,如图所示。

然后我们需要可跟踪对象管理器ARTrackedImageManager和可跟踪对象ARTrackedImage用来检测与管理2D图形追踪。在Hierarachy窗口选择AR Session Origin,为其添加AR Tracked Image Manager组件,如图所示。

创建参考图像库,在project窗口空白处单击鼠标右键,create>XR>Reference Image Library,如图所示。

选择新建的参考图像库,在文末素材链接中,将素材包AR_Picture.unitypackage导入项目,在Inspector窗口点击 “Add Image”添加准备好的年夜饭的参考图片,如图所示。

补充一下,导入参考图像库的图片不能有中文和空格,因为unity不能读取路径中有中文或者空格的文件。

完成上述工作后,在Hierarchy。窗口选择ARSessionOrigin,把ReferenceImageLibrary挂载到AR Tracked Image Manager组件的Reference Library属性中 ,如图所示。

接下来为年夜饭模型添加控制缩放的脚本,新建一个C#脚本,命名为EnLarge,代码如下

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class EnLarge : MonoBehaviour {


    Vector2 oldPos1;

    Vector2 oldPos2;

    void Start () {

        

    }

    void Update () {

        if (Input.touchCount == 2)

        {

            if (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved)

            {

                Vector2 temPos1 = Input.GetTouch(0).position;

                Vector2 temPos2 = Input.GetTouch(1).position;


                if (isEnLarge(oldPos1, oldPos2, temPos1, temPos2))

                {

                    float oldScale = transform.localScale.x;

                    float newScalse = oldScale * 1.025f;


                    transform.localScale = new Vector3(newScalse,newScalse,newScalse);

                }

                else

                {

                    float oldScale = transform.localScale.x;

                    float newScalse = oldScale /1.025f;


                    transform.localScale = new Vector3(newScalse, newScalse, newScalse);

                }


                oldPos1 = temPos1;

                oldPos2 = temPos2;

            }

        }

    }


    //判断手势

    bool isEnLarge(Vector2 oP1,Vector2 oP2,Vector2 nP1,Vector2 nP2)

    {

        float length1 = Mathf.Sqrt((oP1.x - oP2.x) * (oP1.x - oP2.x)+(oP1.y - oP2.y) * (oP1.y - oP2.y));

        float length2 = Mathf.Sqrt((nP1.x - nP2.x) * (nP1.x - nP2.x) + (nP1.y - nP2.y) * (nP1.y - nP2.y));


        if (length1 < length2)

        {

            return true;

        }

        else

        {

            return false;

        }

    }

}

随后将Resource中的年夜饭模型拖拽到Hierarchy窗口,为其挂载该脚本,如图所示

在Project窗口中的Assets目录下创建一个名为Prefabs分文件夹用于保存Prefab,把刚刚挂载脚本的模型拖入文件夹中,选择Original Prefab,如图所示,这样模型的预制体就制作好了,场景中的模型已经不需要了,可以Delete删除。

最后再把预制体赋值给AR Session Origin对象ARTrackedImageManager组件的Tracked Image Prefab属性,设置Max Number Of Moving Image为1,即指定可追踪的最大图像数为1,如图所示。

项目测试:

打包成apk发布到手机运行,效果如下图所示:

存在疑问:

之前用过Vuforia,Vuforia可以调节识别图片和模型的相对大小和方向,在没运行之前都可以看到相对位置,ARFoundation怎么调节prefab预制体的大小和转向感觉都没效果,是跟模型导入的默认大小和朝向有关系嘛?

素材链接:

https://pan.baidu.com/s/11xi_oe7AfvYk4qaPxwRniw?pwd=n98n
提取码:n98n

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值