一:Unity中AR开发环境配置
1. 安卓开发环境配置
(1):创建一个工程,点击File—BuildSettings,选中Android平台,如果没有下载安卓开发包的话,需要先下载安卓开发包,可以直接点击此页面的链接下载,如下图所示:
(2):如果点击没有跳转,则去官网下载,先去官网下载Unity版本的页面,找到你所需要的版本,然后点击Release notes按钮
然后点击AndroidTargetSupport下载即可。
(3):下载之后,安装到和此版本同一个目录下即可。然后重启Unity,此时,再点击File—BuildSettings,选中Android平台。
(4):SDK、JDK的安装
Unity2019之前的版本需要单独去下载SDK、JDK,并安装指定。(并不推荐此方法,此方法步骤繁琐,还极有可能出错)
Unity2019以后的版本可以直接在安装Unity的时候添加安装jdk和sdk模块。(2019之前的版本可能也可以,只是我这边之测试了2019的)
PS:进行到这一步之后,就可以进行打包测试了,如果打包成功,apk文件能正常安装运行,则证明安卓环境配置成功;否则,安卓环境配置失败。
(5):常见报错的原因
出现这个报错,可能的原因有:
①:有中文路径。
②:项目名、公司名、包名问设置
③:sdk设置错误
2.Vuforia 开发环境相关设置
(1):Vuforia插件包导入
点击Windows——PackageManager,安装Vuforia插件包。(2017.2以后的版本都将Vuforia插件集成到了Unity包里,之前的版本需要单独下载)
(2):打开PlayerSettings面板,在other setting里,往下找到android TV Compatibility取消对它的勾选。
(3):选择XR setting勾上 Virtual Reality Supported选项,如下图
二.密钥与识别图
1. 申请密钥
(1)去Vuforia官网(https://developer.vuforia.com)申请注册一个账号,然后登录,打开导航栏的Develop页面,然后点击GetDevelopmentKey按钮。
(2)点击之后,进入如下页面,创建工程,然后点击确定申请密钥:
(3)点击之后,就会出现如下页面,下图红框中的就是你申请的密钥。
(4)将申请到的密钥添加到刚刚配置好AR开发环境的Unity工程中:如下图所示步骤:
现将场景自带的Camera删除掉,然后右键VuforiaEngine–ARCamera创建一个ARCamera,然后点击ARCamera将密钥添加进去。
(5)接下来将之前申请的密钥粘贴到下图红框处即可
2. 上传识别图
(1)回到Vuforia官网,按如下步骤,打开如下页面,创建一个识别图数据库
(2)打开刚刚创建的数据库,上传你想要设置的识别图
(3)识别图上传成功后,我们就能在刚刚创建的Database中看到这张图片了,如果没看到,则证明上传失败。后续项目中要修改识别图的话,都需要在这进行修改,然后重新下载。
(4)将所有需要识别图上传成功后,生成识别图的特征点数据包,点击右侧Download Database按钮,下载Unity数据包(注意平台选择UnityEditor)
常见问题总结:
(1)扫描识别图不出现模型问题原因:ARCamera中你使用的识别图Databases没有被激活。
激活方法:选中ARCamera,打开添加密钥的页面,找到你使用的Databases,选中并激活。
(2)识别图除了影响识别效率,还影响着Imagetarget下物体的显示效果,比如图片识别特征点3颗星或以上,但显示的物体还是会不停的小幅度抖动。出现这种情况的原因可能是:
① 特征点分布不均匀,可能左下角大量特征点挤在一起,右上角的特征点确零散的分布。
② 显示的物体离识别图的中心太远,如果物体能正好在识别图特征点分布较多教均匀的位置,且贴近识别图,那么可以很好的解决抖动。
三.AR项目开发常用知识点
1.扫描识别图出现模型
(1)方法一
方法一是Vuforia默认的方法,如对生成模型无特殊需求,用此种方法足矣。
步骤如下:
①:将我们上一步下载的识别图数据集导入到我们第一步已经配置好环境的Unity项目中。
②:在Hierarchy层右键VuforiaEngine—Image创建一个ImageTarget。
③:将需要生成的模型放置在②中所创建的ImageTarget下,作为其的子物体,然后调整到一个你认为合适的位置和角度即可;
PS:模型不要隐藏,保持显示状态即可。做到这一步就可以进行打包测试了。
扫描识别图,出现模型,则代表AR开发环境搭建成功,可以进行下一步开发。
(2)方法二
方法二就是在默认的方法上,将模型生成的方法换成你自己想要的生成方法。
具体步骤如下:
①:点击hierarchy面板上的ImageTarget,然后找到其上的Default Trackable Event Handler脚本,然后复制一个,重新命名一下,然后将重新命名的替换掉默认挂载的Default Trackable Event Handler。
②:双击打开我们复制重命名的那个脚本,然后找到该脚本里的OnTrackingFound和OnTrackingLost两个方法。
OnTrackingFound:当找到了识别图片时,就会执行这个方法里面的方法。
OnTrackingLost:当丢失了识别图片时,则会执行这个方法里面的方法。
③:将这两个方法里面默认的生成方法替换成我们自己想要的生成方法即可,
如下图所示:
2.模型交互
(1)手指在屏幕上滑动 实现模型的跟随旋转
只需要将下面所示脚本挂载在,需要实现此功能的模型上即可。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class M_Rotate : MonoBehaviour
{
//速度
float xSpeed = 150f;
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
//如果触摸了屏幕
if (Input.GetMouseButton(0))
{
//判断是几个手指触摸
if (Input.touchCount == 1)
{
//第一个触摸到手指头 phase状态 Moved滑动
if (Input.GetTouch(0).phase == TouchPhase.Moved)
{
//根据你旋转的 模型物体 是要围绕哪一个轴旋转 Vector3.up是围绕Y旋转
transform.Rotate(Vector3.up * Input.GetAxis("Mouse X") * xSpeed * Time.deltaTime);
transform.Rotate(Vector3.right * Input.GetAxis("Mouse Y") * xSpeed * Time.deltaTime);
}
}
}
}
}
(2)两根手指在屏幕上缩放从而控制模型的缩放
只需要将下面所示脚本挂载在,需要实现此功能的模型上即可。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class M_Scale : MonoBehaviour
{
Vector2 oldPos1;
Vector2 oldPos2;
private void OnEnable()
{
}
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void