本文记录《Unity与EasyAR实战教程》的操作过程,供以后查阅。
1 使用Easy AR.
1.1 获取Lisence Key[许可证**]
在EasyAR上注册账号并进入开发中心 ↓
a) 添加SDK License key:
类型选"EasyAR SDK Basic : 免费,无水印", 应用名称任意, PackageName(包名)需要与在Unity 3D导出时一致, 我写成了com.ken.testapp. 我做的是安卓应用, Bundle ID是苹果用的, 所以Bundle ID不填写
b) 下载Easy AR SDK
进入SDK下载页面. 点击EasyAR SDK 2.2.0 Basic for Unity3D (unitypackage).
下载完成后解压出来.
1.2 导入SDK和其它素材
a) 在Project面板中右键空白处选择Import Package, 再选Custom Package, 然后选择解压出来的Unity Package.
b) 导入unity-chan模型
首先点击 Window→Asset Store. 然后在里面搜索unity-chan, 点击Import. 好像要求登录. 照做即可.
后面会弹出导入对话框, 我把所有的素材都导入了.
1.3 配置EasyAR
首先是在 Unity 编辑器中进行的操作:
- 将 Assets / EasyAR / Prefabs 文件夹内的 EasyAR_Startup 拖拽到 Hierarchy 视图中
- 删除场景中自带的 Main Camera( EasyAR_Startup 中包含了一个具有 Camera 功能的子对象—— RenderCamera )
把Prefab拖进去, 这个Prefab就会运行了, 运行是为了初始化EasyAR.
然后在Hierarchy视图中点一下刚拖进来的EasyAR_startup, 将开发中心提供的许可证秘钥粘贴到Key变量中.↓
1.4 使用模型
下载并导入 Unity-chan 模型之后,在 UnityChan / Prefabs 文件夹下可以找到 unitychan 预设,然后,直接把这个预设添加到场景中即可。
1.5 运行项目
如果在电脑上运行, 直接点击播放按钮即可.
如果想在安卓上运行, 在File→Build Settings里面将平台选为Android, 然后会提醒下载文件, 按照说明做即可.
注意EasyAR SDK配置教程里面"Graphics API(Android/iOS)"这一段, 一定要照做!
2 使用UGUI改进项目
2.1 设置屏幕比例
2.2 在场景中添加按钮
由于原教程的素材网站已无法访问, 所以我就自己制作了几个. 链接
还要设置图片的 TextureType (设置为UI类型):
- 选中图片,查看 Inspector 视图(会显示 ImportSettings )
- 将 TextureType 设置为 Sprite (2D and UI)
- 点击下方的 Apply 按钮,使设置生效
然后添加两个按钮, 左按钮和右按钮. 参照蛮牛网上的UI课程学习即可.
如果没有学习上面的课程, 就直接创建两个Button然后点下图中的圆圈选择图像, 再点Set Native Size设置大小.
3 使用Lean Touch
我写了其自带文档ReadMe的翻译, 欢迎查看:https://blog.csdn.net/u010099177/article/details/83110702.
a) 下载导入
打开Unity的Asset Store, 搜索Lean Touch, 导入项目中即可.
b) 添加到项目中
点击GameObject→Lean→Touch, 或者在Hierarchy窗口中右击, 选择Lean→Touch.
现在, 您应该看到一个新的游戏对象叫做 "LeanTouch" , 并且 LeanTouch 处于选中状态。
当您进入播放模式时, 此组件将自动将所有鼠标和触摸输入转换为易于使用的格式。
请记住, 使用Lean Touch的脚本只有在场景中有一个 LeanTouch 组件处于活动状态时才起作用, 因此请确保向每个场景添加一个 (或将其设置成 加载时禁止销毁)。(参考链接: DontDestroyOnLoad使用方法)
c) 为Unity Chan模型绑定两个Lean Touch脚本(位移和缩放), 并将Required Fingers设置为2
再按照原文所说的, 添加旋转的脚本.
4 导出并安装
参见原文: Unity × EasyAR 实战教程-第4章:导出并安装 第一部分
5 增加App主菜单界面
(此时我在查找 Animator 的相关知识)
经研究发现, Unity Chan模型Idle Changer脚本负责显示屏幕右上角的两个按钮, 这两个按钮可以播放上一个和下一个动画. 播放动画是通过调用Animator.Setbool("Next"或"Back", true)来实现的. 动画播放完后, 程序会抓紧将"Next"或"Back"设置为False. 这个前后顺序是在AnimationController里面定义的.
if (animator.GetBool("Back")) {
if (animator.GetCurrentAnimatorStateInfo(0).fullPathHash != info.fullPathHash) {
animator.SetBool("Back", false);
info = animator.GetCurrentAnimatorStateInfo(0);
}
}
Unity Chan模型的Face Update是控制脸部表情的, 经测试 没有效果, 不知道是不是我误删了什么东西.
6 与EasyAR联合起来
主要按照原教程做, 这里纠正原文的两个错误:
1) EasyImageTargetBehaviour的脚本应该是这样的, 原文有误(应该是版本问题). 其实直接默认的ImageTargetBehavior就行. 原因是当GameObjectActiveControl打开时, 默认行为就是目标出现则模型启用, 目标消失则模型禁用. 官方文档的图片放到下面了.
public class EasyImageTargetBehaviour : ImageTargetBehaviour {
protected override void Awake() {
base.Awake();
GameObjectActiveControl = false;
TargetFound += OnTargetFound;
TargetLost += OnTargetLost;
}
protected override void Start() {
base.Start();
gameObject.SetActive(false);
}
void OnTargetFound(TargetAbstractBehaviour behaviour) {
gameObject.SetActive(true);
}
void OnTargetLost(TargetAbstractBehaviour behaviour) {
gameObject.SetActive(false);
}
}
2) 材质要选择EasyAR→RealityPlane, 原文博主可能用的是旧版EasyAR
关于后面的脱卡教程, 我直接在OnTargetLost方法中将gameObject.setActive(False)注释了, 不知道效果与原文的是否一致. 懒得看了.
7 总结一下配置EasyAR可能遇到的各种问题.
1) File→Build Setting→Player Settings
2) 脚本的配置
Path所写的文件名应该是StreamingAssets目录下的文件,(这是在Storage设置为Assets的情况下)
Name任意, Size里面的x和y必须非0. GameObjectActiveControl就是是不是自动显示隐藏, 如果代码里没有相关的逻辑就勾上, 有就去掉.
3) 被检测图像的处理
首先要在StreamingAssets目录下放, 供ImageTargetBehavior脚本调用, 识别用. 另一个图片的位置任意, 也不要在Inspector下改选项. 创建Material的位置也是任意, 文件名也任意, 这个是用来显示的. 材质的Shader必须要选EasyAR/RealityPane!.