本文记录《Unity与EasyAR实战教程》的操作过程,供以后查阅。
在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).
下载完成后解压出来.
a) 在Project面板中右键空白处选择Import Package, 再选Custom Package, 然后选择解压出来的Unity Package.
b) 导入unity-chan模型
首先点击 Window→Asset Store. 然后在里面搜索unity-chan, 点击Import. 好像要求登录. 照做即可.
后面会弹出导入对话框, 我把所有的素材都导入了.
首先是在 Unity 编辑器中进行的操作:
把Prefab拖进去, 这个Prefab就会运行了, 运行是为了初始化EasyAR.
然后在Hierarchy视图中点一下刚拖进来的EasyAR_startup, 将开发中心提供的许可证秘钥粘贴到Key变量中.↓
下载并导入 Unity-chan 模型之后,在 UnityChan / Prefabs 文件夹下可以找到 unitychan 预设,然后,直接把这个预设添加到场景中即可。
如果在电脑上运行, 直接点击播放按钮即可.
如果想在安卓上运行, 在File→Build Settings里面将平台选为Android, 然后会提醒下载文件, 按照说明做即可.
注意EasyAR SDK配置教程里面"Graphics API(Android/iOS)"这一段, 一定要照做!
由于原教程的素材网站已无法访问, 所以我就自己制作了几个. 链接
还要设置图片的 TextureType (设置为UI类型):
然后添加两个按钮, 左按钮和右按钮. 参照蛮牛网上的UI课程学习即可.
如果没有学习上面的课程, 就直接创建两个Button然后点下图中的圆圈选择图像, 再点Set Native Size设置大小.
我写了其自带文档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
再按照原文所说的, 添加旋转的脚本.
参见原文: Unity × EasyAR 实战教程-第4章:导出并安装 第一部分
(此时我在查找 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是控制脸部表情的, 经测试 没有效果, 不知道是不是我误删了什么东西.
主要按照原教程做, 这里纠正原文的两个错误:
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)注释了, 不知道效果与原文的是否一致. 懒得看了.
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!.