• Unity3D是一个跨平台的游戏引擎,它提供了3d游戏的大部分基础功能实现,比如物理碰撞、3d模型显示、光照等功能,简化了使用者开发游戏的过程,更能够节省非常多的成本,unity3d与别的游戏引擎最大的不同是,它的代码...

    Unity3D是一个跨平台的游戏引擎,它提供了3d游戏的大部分基础功能实现,比如物理碰撞、3d模型显示、光照等功能,简化了使用者开发游戏的过程,更能够节省非常多的成本,unity3d与别的游戏引擎最大的不同是,它的代码是跨平台的,也就是说,别的引擎一款游戏要写好几份代码,它上面只需写一份就能在所有系统上运行。

    unity是使用javascript 与c#进行游戏开发的,javascript 和c#都可以作为实现unity3d的脚本语言,但是关于那个脚本语言更适合来开发unity3d呢,js适合个人开发,C#适用于公司开发。U3D官方团队基于数据分析做出结论,U3D团队会把支持的重心转移到C#,也就是说文档和示例以及社区支持的重心都在C#,C#的文档会是最完善的,C#的代码实例会是最详细的,社区内用C#讨论的人数会是最多的。所以,选择C#开发是最适合的。

    对于学习unity3d,首先要掌握c#语言,然后才能按照路线开始正式学习

    1、Unity3D程序开发基础
    1)C#语法基础
    2)OOP(面向对象)
    3)网络通信
    4)内存管理
    从基础讲解C#语言,熟悉字段、属性、接口、委托、事件,掌握C#面向对象编程的核心思想。让学员掌握Unity3d各个方面的知识和基本使用方法,为后面深入的学习打下良好基础。
    2、Unity3D高级阶段
    1)Unity3D物体系统高级部分
    2)Untiy3D动画系统高级部分
    3)常规设计模式
    4)动画,跟随等相关插件学习
    5)第1,3人称项目讲解
    在原来的学习基础上,深入学习Unity3D物体系统、动画系统的高级部分,例如骨骼的绑定,动画角色的创建等。配合游戏案例进行深度讲解,让学生充分了解动画的制作过程。
    3、游戏跨平台发布
    1)IOS版发布
    2)安卓版发布
    3)网页版发布
    4)PC版发布

    展开全文
  • Unity3D实现简易的AR Demo AR(Augmented Reality),即增强现实技术,是一种实时地计算摄影机影像的位置及角度并加上处理相应图像的技术,这种技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动,实现真实...

    用Unity3D实现简易的AR Demo

    AR(Augmented Reality),即增强现实技术,是一种实时地计算摄影机影像的位置及角度并加上处理相应图像的技术,这种技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动,实现真实世界信息和虚拟世界信息“无缝”的集成。这种技术最早于1990年提出。随着现代电子产品运算性能的提升,增强现实的用途也越来越广,既可以用到医疗、军事模拟训练等严肃领域,也可以用来制作如miku AR等新颖有趣的应用软件。

    (宅在家也可以打开次元之门了( *︾▽︾)……..)

    miku AR效果展示

     

    本文将利用Unity3D游戏开发引擎及高通AR插件制作一个简易的技术Demo,并发布到Android系统的手机上进行运行测试。基于高通SDK的良好的封装和Unity3D引擎强大的功能支持,使得开发该Demo流程十分简单,大大降低了AR开发的入门门槛。

     

     

    **************************************************************************************************************************************************************

    准备工作:

    首先进行一些开发前的准备,我们需要准备好三个文件:

    • Qualcomm Vuforia 的SDK对应的Unity3D插件包

    这个就是高通AR的SDK了,首先登陆QualcommVuforia的官方网站(https://developer.vuforia.com/)并注册一个账号,按要求填入信息即可。


    注册完毕后登陆,点击Downloads下SDK标签里的Downloadfor Unity选项即可开始下载。此外我们看到,我们还可以直接用基于Android或IOS的SDK进行开发,但这里我们并不需要它们。


    • 待识别图片平面的二进制数据包(同样以Unity3D package的格式给出)

    我们只需要将需要识别的图片上传到高通的官网,随后网站会在云端对图片进行特征值的提取和数据的生成,下载该图片对应的数据文件即可。

    登陆账号后,选择Develop下的Target Manger选项卡。如果是第一次使用,应该首先新建数据库,单击Add Datebase按钮,填入数据库的名称并选择类型为Device,点击Create即可创建一个新的数据库。


    进入该数据库,并点击Add Target按钮,我们可以看到,我们可以添加多种类型的识别对象,简单的如平面的图片、文字等,复杂的还可以识别立方体、圆柱甚至一般的三维物体。在这里我们选择Single Image即可,上传对应的图片并填入其宽度,最后为其命名,单击Add即可添加成功。

    上传后可以看到图片相应的信息,这里的Rating代表图片的可识别质量,星级越高识别质量越好。


    最后,勾选图片前的复选框,单击Download Dataset按钮并选择UnityEditor平台,即可下载上传图片的特征信息数据集。

     

    • 主角3D模型及动画数据的Unity3Dpackage包

    这个就任意了,可以选用任意自己喜欢的人物模型来代替,在这里笔者使用的是Unity_Chan(Unity3D在日本的动漫化形象模型包),由于她对应的动作、声音较多,效果也比较好,为了保持下面操作的一致,建议读者第一次操作最好也选用这个。

    下载地址:http://unity-chan.com/

     

    完成以上三步后,你应该得到以下三个package文件:

     

    终于准备好了….下面我们就开始AR软件制作之旅。

     ************************************************************************************************************************************************************

     

    首先打开Unity3D软件(这里笔者选用的是Unity3D 5.1.0f3(32-bit)版本,Unity 5 64位版本与高通AR插件不兼容而报错,无法使用,低于4.6.7版本的Unity也无法使用),新建一个工程,并删除自带的摄像机与光源等物体,然后导入准备的3个package文件,保存为新的场景ar_demo.scene。

     

    Assets/Vuforia/Prefabs目录下的ARCameraImageTarget预制体拖入场景之中。

    ARCamera,即增强现实的虚拟摄像头,对应于移动设备的硬件镜头位置,通过画面中已经提取过特征值的图片的位置识别从而判断出镜头与图片之间的相对运动,进而调整ARCamera的位置,实现仿佛图片之上的虚拟人物也在镜头之中的假象,构造出一种虚拟的真实感。

    现在我们来看一下这个预制体的各项组件:

     


    Vuforia Behavior 是用来调整VR行为和相机配置的各项属性的组件。


    注意在App License Key一栏中要填入你在高通AR官网上的License Mangaer选项中获取到的密钥,其他选项如是否翻转镜头、同时最大追踪的物体数量、世界中心模式等可根据需要自己控制。

    Default Initialization Error脚本是用来处理初始化错误的内部脚本,不用理会。

    Database Load Behavior脚本用来控制读取刚才获取到的图片特征数据文件,在导入相应的package后,可以看到对应的load active选项,注意两者都要勾选,这样系统才可以读取到图片特征信息并进行识别


    Smart Terrian Track 脚本可以实现在比较复杂的平面上的图像识别,可以根据需要进行勾选。

    Web Cam Behaviour 脚本用来方便开发,通过它可以调用笔记本电脑上的摄像头来实时进行项目效果的检验,但是笔者发现当这个脚本运行时会导致Unity3D开启摄像头时崩溃,考虑到这只是一个工具脚本,将其注销掉即可,这并不会影响最终在实体机上面的运行效果。

    Keep Alive Behaviour 脚本是一个DontDestroy脚本,它可以实现ARCamera在多个场景之间的保持和生存,根据需要进行勾选。

    Video Texture Render脚本是用来渲染图像的内部脚本。

     

     

    ImageTarget,即代表待识别图片目标,它对应于你所要控制识别的那张图片的位置。

    其组件有:


    前两个都是基础组件,不加说明。

    Image Target Behaviour脚本用来加载图片数据,类型处可以选择predefined,即表示使用从官网上云处理而获取到的图片数据,在Date Set中选择图片对应的数据库名称,在ImageTarget中选择待识别图片目标的名称,并可以进行相关宽高的设置,其它选项如智能地形追踪、扩展追踪等可以根据需要勾选。


    Turn Off Behaviour 脚本是内部脚本,不用理会。

    Default Trackable Event Handler 脚本是一个支持用户扩展的脚本,当相机追踪状态发生改变时(如获取目标、丢失目标等)就会执行该脚本,我们可以模仿并加入自己的控制代码。

     

    设置好以上两个预制体的属性后,我们就可以把自己的模型拖到场景中,并放置在ImageTarget之上,根据需要进行动作、声音等效果的设置,但这并不是我们这里的重点,不再赘述。



    直接给出控制人物的相关代码如下:

     

    using UnityEngine;
    using System.Collections;
    
    public class ChanCtrl : MonoBehaviour {
    
    	private Animator _animator;
    	private AnimatorStateInfo _currentStateInfo;
    	private AnimatorStateInfo _preStateInfo;
    
    	public float waitTime = 3f;
    	public bool isRandom = true;
    
    	public AnimationClip[] _FaceClips;
    	public string[] _FaceMotionName;
    
    	public AudioClip[] _ChanVoice;
    
    	private void ChangeFace()
    	{
    		_animator.SetLayerWeight(1,1);
    		int index = Random.Range(0,_FaceMotionName.Length);
    		_animator.CrossFade(_FaceMotionName[index],0.5f);
    		if(GetComponent<AudioSource>().isPlaying)
    		{
    			GetComponent<AudioSource>().Stop();
    		}
    		GetComponent<AudioSource>().clip = _ChanVoice[index];
    		GetComponent<AudioSource>().Play();
    	}
    	// Use this for initialization
    	void Start () {
    	
    		_animator = GetComponent<Animator>();
    		_currentStateInfo = _animator.GetCurrentAnimatorStateInfo(0);
    		_preStateInfo = _currentStateInfo;
    
    		_FaceClips = Resources.LoadAll<AnimationClip>("FaceMotion");
    		_ChanVoice = Resources.LoadAll<AudioClip>("ChanVoice");
    
    		_FaceMotionName = new string[_FaceClips.Length];
    		for(int i = 0; i <_FaceClips.Length; i++)
    		{
    			_FaceMotionName[i] = _FaceClips[i].name;
    		}
    
    		StartCoroutine(RandomChangeMotion());
    	}
    	
    	// Update is called once per frame
    	void Update () {
    	
    		RaycastHit hitinfo;
    		if(Input.GetMouseButtonDown(0))
    		{
    			if(Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition),out hitinfo,Mathf.Infinity))
    			{
    				if(hitinfo.collider.tag == "face")
    				{
    					ChangeFace();
    				}
    			}
    
    		}
    		if(_animator.GetBool("Next"))
    		{
    			_currentStateInfo = _animator.GetCurrentAnimatorStateInfo(0);
    			if(_preStateInfo.shortNameHash != _currentStateInfo.shortNameHash)
    			{
    				_animator.SetBool("Next",false);
    				_preStateInfo = _currentStateInfo;
    			}
    
    		}
    	}
    
    
    	IEnumerator RandomChangeMotion()
    	{
    		while(true)
    		{
    			if(isRandom)
    			{
    				_animator.SetBool("Next",true);
    			}
    			yield return new WaitForSeconds(waitTime);
    
    		}
    	}
    }
    

     

     

    完成以上工作后,基本就大功告成了。接下来就是项目发布了,像导出普通的APK文件一样,设置好相关的Bundle Identifier等数据,指定安卓SDK的安装目录,即可以导出相应的APK文件,从而可以安装到安卓手机上进行测试。

     

    实际效果如下,Unity娘可以随机作出不同的动作,触摸脸部还可以更改表情并发出声音,是不是很萌?快来一起学习制作吧!

     

     

     



    展开全文
  • Unity 开发AR之 Vuforia 本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) Chinar —— 心分享、心创新!...

    Unity 开发AR之 Vuforia


    本文提供全流程,中文翻译。

    Chinar 坚持将简单的生活方式,带给世人!

    (拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例)



    Chinar —— 心分享、心创新!

    助力快速完成AR的简单开发,学习 Vuforia 的使用流程

    为新手节省宝贵的时间,避免采坑!


    Chinar 教程效果:
    这里写图片描述



    全文高清图片,点击即可放大观看 (很多人竟然不知道)


    Vuforia —— 增强现实


    Vuforia —— 是AR开发工具中的一种,接入较为简单、且使用方便!


    由于该公司和 Unity 公司进行合作,所以在2017较新版本中,直接选择安装 Vuforia 插件,即可在 Unity 中直接导入 Vuforia

    具体安装步骤,就在 Unity 安装程序中选中 Vuforia ,这里就不在做过多的陈述!

    使用 Vuforia 需要先注册账号
    举个栗子黑白88
    这里写图片描述


    Create Development Key —— 创建开发者资源


    1. 登陆后,点击 Get Development Key

    举个栗子黑白88
    这里写图片描述
    这里写图片描述


    2. 创建密钥

    举个栗子黑白88
    这里写图片描述
    这里写图片描述


    3. 创建数据库

    举个栗子黑白88
    这里写图片描述


    4. 在数据库中添加一个图片



    图片最好选择锐化度较高的、棱角分明的图片

    (图片最大不能超过 2M/如果png不成功,就用jpg尝试)

    上传后, Vuforia 后台,会自动生成文件加入当前数据库,并对图片打分1-5星不等

    5星,AR测试识别率最高

    在此,我用手机桌面来做测试!上传后,会给5颗星!
    举个栗子黑白88
    这里写图片描述
    这里写图片描述


    5. 下载数据库,放在桌面上待用!

    举个栗子黑白88
    这里写图片描述


    Unity Vuforia Setting —— Unity中 Vuforia 的设置


    下面,来到 Unity 中对 Vuforia 进行设置

    如果菜单栏中 GameObject 中有 Vuforia 选项,则证明已经正确安装

    否则需要自己去安装后,再进行一下操作

    举个栗子黑白88


    1. 添加 AR Camera

    举个栗子黑白88
    这里写图片描述


    2. 设置 AR Camera 上的脚本组件 Vuforia Behavior

    由于 Vuforia Behavior 为,警告:不可用状态

    所以需要在 Player Setting 中进行设置
    举个栗子黑白88
    这里写图片描述
    这里写图片描述


    3. 添加密钥

    添加我们之前在Vuforia网站创建的开发者密钥
    举个栗子黑白88
    这里写图片描述
    这里写图片描述


    4. 导入数据库,并设置

    导入我们已经创建好的 Vuforia 数据库包 TestOneData.unitypackage 这里写图片描述 Unity 工程中
    举个栗子黑白88
    这里写图片描述


    5. 添加AR Image

    右键层次列表,添加 AR Image

    并在检视面板中对属性进行设置,选择自己创建的数据 TestOneData
    举个栗子黑白88
    这里写图片描述


    6. 添加物体

    添加一个球体,用于测试AR是否正常运行

    注意:
    物体必须是 ImageTarget 的子物体

    设置完成后点击 测试即可 (需要电脑有摄像头)
    举个栗子黑白88
    这里写图片描述


    7. 测试效果

    当镜头对准我们设置好的图像后,会显示 球体

    Vuforia 免费版,都会有Logo

    见谅:(我的台式电脑没配摄像头)

    该测试图样,来自于我5年前的备用机 HTC One ,有些老旧、进灰
    举个栗子黑白88
    这里写图片描述


    8. ——安卓打包报错


    上边提到,安卓打包会报错

    那是因为 Vuforia 不支持 Android TV ,所以需要在 Player Setting 中关闭该选项

    即可成功打包工程
    举个栗子黑白88
    这里写图片描述

    至此:Vuforia 基本操作流程完美结束


    Explain —— 说明


    如果想要进行更多的操作,*需要深入学习

    其他就跟平时写 Unity 项目一样了,通过代码控制, UGUI 添加界面即可

    没有什么区别

    例如想让物体动起来、变色,直接加代码即可
    举个栗子黑白88
    给球添加一个材质球,把脚本挂在 球身上

    即可实现每隔一秒变一次色

    using System.Collections;
    using UnityEngine;
    
    
    /// <summary>
    /// 改变球体颜色
    /// </summary>
    public class ChangeBall : MonoBehaviour
    {
        private Material deMaterial;         //默认材质
        public  float    speed       = 10f;  //渐变速度
        public  float    rotateSpeed = 360f; //旋转速度
    
    
        void Start()
        {
            deMaterial = GetComponent<MeshRenderer>().material;
            InvokeRepeating("ChangeColor", 1, 1);
        }
    
    
        void Update()
        {
            transform.Rotate(Vector3.up, rotateSpeed * Time.deltaTime); //自转
        }
    
    
        /// <summary>
        /// 随机颜色
        /// </summary>
        /// <returns> Color </returns>
        private Color RandomColor()
        {
            float r     = Random.Range(0f, 1f);
            float g     = Random.Range(0f, 1f);
            float b     = Random.Range(0f, 1f);
            Color color = new Color(r, g, b);
            return color;
        }
    
    
        /// <summary>
        /// 改变颜色
        /// </summary>
        private void ChangeColor()
        {
            StopAllCoroutines();
            Color temColor = RandomColor();
            StartCoroutine(ColorEnumerator(temColor));
        }
    
    
        /// <summary>
        /// 开启协程 —— 循环颜色
        /// </summary>
        /// <returns></returns>
        IEnumerator ColorEnumerator(Color temColor)
        {
            while (true) //死循环
            {
                deMaterial.color = Color.Lerp(deMaterial.color, temColor, speed * Time.deltaTime); //插值
                yield return 10;                                                                   //每次暂停10帧
            }
        }
    }

    这里写图片描述


    支持

    May Be —— 搞开发,总有一天要做的事!


    拥有自己的服务器,无需再找攻略!

    Chinar 提供一站式教程,闭眼式创建!

    为新手节省宝贵时间,避免采坑!


    先点击领取 —— 阿里全产品优惠券 (享受最低优惠)


    1 —— 云服务器超全购买流程 (新手必备!)

    2 —— 阿里ECS云服务器自定义配置 - 购买教程(新手必备!)

    3—— Windows 服务器配置、运行、建站一条龙 !

    4 —— Linux 服务器配置、运行、建站一条龙 !





    Chinar


    END

    本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究

    对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com

    对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址

    展开全文
  • 这里推荐使用高通提供的AR框架,它支持android和ios原生应用开发,同时还支持unity3D。 https://ar.qualcomm.at/sdk  这里把官方的sdk下载地址贴上来,下载需要注册,注册密码需要大小写英文+数字(我整了...

    这里推荐使用高通提供的AR框架,它支持android和ios原生应用开发,同时还支持unity3D。

    https://ar.qualcomm.at/sdk 

    这里把官方的sdk下载地址贴上来,下载需要注册,注册密码需要大小写英文+数字(我整了好久才发现,妈的它也不提示)。

    下载好unity3D的包(它提供的是exe文件,装完以后就是unitypacage了),里面包括一个框架包、和4个项目实例。

    怎么使用?官方有给出stepbystep的教程了,这里国内有一个哥们也有中文贴

    http://www.cocoachina.com/bbs/read.php?tid=84003 

    具体我也就不说怎么用了,可以说相当简单了。


    这里说几点不足的地方吧:

    官方提供自定义的识别图片,可是需要的图片要求也相对较高,我最高也就3颗星,目前没有测试过没有星星的图片的识别率。


    相机呈现的周围的环境都被渲染成了黑白负向,也就是说除了呈现出来的3d模型是光鲜亮丽的,其他的都是黑白的,这挺讨厌的。

    展开全文
  • 一、目录 【Unity3D从入门到进阶】文章目录及设置这个专栏的初衷

    一、目录

    【Unity3D从入门到进阶】文章目录及设置这个专栏的初衷

    这篇文章介绍如何使用EasyAR.unitypackage配置EasyAR

    二、参考资料

    1、EasyAR 初学者入门指南
    http://forum.easyar.cn/portal.php?mod=view&aid=2
    2、EasyAR入门
    https://www.easyar.cn/doc_sdk/cn/Getting-Started/Getting-Started-with-EasyAR.html
    3、Unity – 使用easyAR的基础教程
    https://www.cnblogs.com/mafeng/p/7600172.html
    4、EasyAR 社区教程
    http://forum.easyar.cn/portal.php?mod=view&aid=5

    三、EasyAR入门

    EasyAR是好用免费的全平台AR(Augmented Reality,增强现实)引擎。

    EasyAR支持使用平面目标的AR,支持1000个以上本地目标的流畅加载和识别,支持基于硬解码的视频(包括透明视频和流媒体)的播放,支持二维码识别,支持多目标同时跟踪。

    EasyAR支持PC和移动设备等多个平台,EasyAR不会显示水印,也没有识别次数限制。

    在拿到EasyAR package或EasyAR样例之后,你需要一个key才能使用。请确保在使用EasyAR之前阅读以下内容。

    四、免费注册

    使用EasyAR之前需要使用邮箱在www.easyar.cn注册

    *如果邮箱已经在视+官网(www.sightp.com )注册,可以直接登录。

    五、KEY的获取

    准备好识别图之后,我们需要到官网(http://www.easyar.cn/view/open/app.html)来为我们的AR APP申请key。首先点击 “开发中心”
    这里写图片描述
    点击 “添加 SDK license Key” 按钮,选择Basic 版本
    这里写图片描述
    接下来填写应用详情,填写你的应用名字与打包移动平台时必填的package name
    这里写图片描述
    确定好后,我们可以查看我们的Key
    这里写图片描述
    1.可以对应用名称进行修改
    2.可以对Bundle ID 进行修改
    3.若使用的是1.0的sdk,可以查看1.0的 Key

    六、导入EasyAR的SDK

    我们到EasyAR官网(http://www.easyar.cn/view/download.html)上下载"EasyAR2.0 package(for unity)"
    这里写图片描述
    当然也可以在这里直接下载整理好的
    http://pan.baidu.com/s/1dFGaHGH
    解压之后,我们将"EasyAR_SDK_2.0.0_Basic.unitypackage"导入到unity中
    这里写图片描述
    导入之后,效果如图:
    这里写图片描述
    使用步骤

    1. 找一张图片当做识别图,自己的照片也可以哦,推荐颜色不要单一的识别图,不然一种颜色识别不到就尴尬了。然后在Unity里创建一个名叫StreamingAssets的文件夹,把图片拖在这里。另外再拖一次放在Assets下。
      这里写图片描述这里写图片描述

    2. 接下来我们删除原有场景的"Main Camera",然后打开EasyAR文件夹,把Prefabs文件夹下的EasyAR_Startup预设体拖到面板
      这里写图片描述这里写图片描述

    3. 中面板上的EasyAR_Startup,修改它的属性,把我们之前复制的key粘贴进去
      这里写图片描述
      这里写图片描述

    4. 找到Primitives文件夹下的ImageTarget预设,把它也拖到面板。把ImageTarget上的ImageTargetBehaviour脚本删掉,新建一个脚本EasyImageTargetBehaviour,拖到ImageTarget物体上

    5. 编写脚本EasyImageTargetBehaviour

    using UnityEngine;
    
    namespace EasyAR
    {
        public class EasyImageTargetBehaviour : ImageTargetBehaviour
        {
            protected override void Awake()
            {
                base.Awake();
                TargetFound += OnTargetFound;
                TargetLost += OnTargetLost;
                TargetLoad += OnTargetLoad;
                TargetUnload += OnTargetUnload;
            }
    
            void OnTargetFound(TargetAbstractBehaviour behaviour)
            {
                Debug.Log("Found: " + Target.Id);
            }
    
            void OnTargetLost(TargetAbstractBehaviour behaviour)
            {
                Debug.Log("Lost: " + Target.Id);
            }
    
            void OnTargetLoad(ImageTargetBaseBehaviour behaviour, ImageTrackerBaseBehaviour tracker, bool status)
            {
                Debug.Log("Load target (" + status + "): " + Target.Id + " (" + Target.Name + ") " + " -> " + tracker);
            }
    
            void OnTargetUnload(ImageTargetBaseBehaviour behaviour, ImageTrackerBaseBehaviour tracker, bool status)
            {
                Debug.Log("Unload target (" + status + "): " + Target.Id + " (" + Target.Name + ") " + " -> " + tracker);
            }
        }
    }
    

    6、 接下来,我们填写如下信息
    这里写图片描述

    • Path: 识别图的路径
    • Name:识别图的名字
    • Size:识别图的大小
      这里写图片描述这里写图片描述这里写图片描述
      注意,我们一定要将Storage 的格式修改为Assets

    关于Storage:
    这里写图片描述

    7.建一个Cube,颜色改为红色,Cube的位置在识别图上方,然后把它拖在ImageTarget下当它的子物体。
    现在运行游戏,激活ImageTarget,Cube就显现出来了。一个简单的AR就做成了。(EasyAR就这点比较好,可以在Unity里面看效果)。
    在以后的开发里也可以通过控制ImageTarget的激活和不激活让物体显现和消失,抑或怎么去显现。
    这里写图片描述
    这里写图片描述

    8.打包成APK,File–buildsetings,场景拖进去,选择,点击Playerseting,设置一下参数:
    我们填写好信息,注意Compang Name 与我们申请key时的公司或团队名相同(比如我申请时填的是:mars),Product Name 也要和我们申请key时填的应用名相同(本次的项目演示为:HelloAR)
    这里写图片描述
    我们的Bundle Identifier 也要修改为
    这里写图片描述
    最后是最关键的一部分:我们的Graphics API 使用的是 OpenGLES2
    这里写图片描述

    9.OK,现在把打包好的APK安装在Android手机上,运行,扫面这张识别图,你的模型就出来了。
    怎么样小伙伴们,你会了吗?

    七、案例

    EasyAR应用-多图识别

    这里写图片描述
    开发资源:
    源码:https://pan.baidu.com/s/1cYaJmnBTqFcVMG2bggQaTQ 密码:br4d

    Step 1:新建项目导入sdk

    我们新建一个unity项目,命名为"ARMultiTarget"
    这里写图片描述
    接着导入我们的EasyAR 2.0 package并进行基本环境的搭建,首先我们像上次操作一样,在unity中新建一个文件夹,命名为"StreamingAssets",将我们的识别图导入到该文件目录下
    这里写图片描述
    删除原有的"Main Camera",将我们的"EasyAR_ImageTracker-1-MultiTarget" 拖到面板中
    这里写图片描述
    接着我们到官网申请Key填写到相机上
    这里写图片描述

    Step 2:处理相机

    我们要编写段脚本来处理EasyAR 的多图识别功能,在"EasyAR_ImageTracker-1-MultiTarget" 组件上新建一个脚本"HelloARTarget"
    这里写图片描述
    脚本下载: https://pan.baidu.com/s/12tf0aEVwW9Z2AUjK4qJR6Q 密码:wg2n
    脚本具体内容如下:

    using UnityEngine;
    using EasyAR;
    
    namespace EasyARSample
    {
        public class HelloARTarget : MonoBehaviour
        {
            private const string title = "Please enter KEY first!";
            private const string boxtitle = "===PLEASE ENTER YOUR KEY HERE===";
            private const string keyMessage = ""
                + "Steps to create the key for this sample:\n"
                + "  1. login www.easyar.com\n"
                + "  2. create app with\n"
                + "      Name: HelloARMultiTarget-SameImage (Unity)\n"
                + "      Bundle ID: cn.easyar.samples.unity.helloarmultitarget.si\n"
                + "  3. find the created item in the list and show key\n"
                + "  4. replace all text in TextArea with your key";
    
            private void Awake()
            {
                if (FindObjectOfType<EasyARBehaviour>().Key.Contains(boxtitle))
                {
    #if UNITY_EDITOR
                    UnityEditor.EditorUtility.DisplayDialog(title, keyMessage, "OK");
    #endif
                    Debug.LogError(title + " " + keyMessage);
                }
            }
        }
    }
    

    Step 3: 处理ImageTarget

    我们准备两张识别图
    这里写图片描述这里写图片描述
    接下来我们拖动一个"ImageTarget"组件到面板中
    这里写图片描述
    我们像之前最基础操作的那样处理好ImageTarget,使得可以显示一个model(不懂的可以看看之前的教程:EasyAR基础入门之显示模型),我们在其下面新建一个cube,具体效果如下图:
    这里写图片描述
    我们再建一个ImageTarget,改变识别图和cube的材质,效果如图:
    这里写图片描述
    这里写图片描述
    最后我们Build 测试就可以实现预览的效果了。
    这里写图片描述

    EasyAR多图识别简单案例—双卡battle1.0

    本次的案例是双卡battle1.0,适合AR开发初学者,主要目的是帮助大家更进一步了解EasyAR 多图识别的应用场景,在往后的技术分享我们会推出完整的AR battle 案例。

    预览:
    这里写图片描述
    开发功能描述:
    当两张识别图相碰时,出现“战斗开始”的提示,两个怪物播放各自的动画

    开发素材

    源码:链接: https://pan.baidu.com/s/1jHNOZ6e 密码: n2hy

    NGUI插件:链接: https://pan.baidu.com/s/1eRG8KN4 密码: 8mf9

    Step 1:开发环境搭建

    我们在前面已经了解了如何用EasyAR SDK来开发多图识别,本次的案例是在此基础上进行开发的,当然了我们也可以在EasyAR的官方案例进行开发(两种方法大同小异).上次我们的项目框架如图:
    这里写图片描述
    将所需的模型资源导入到我们的项目中,目录结构为:
    这里写图片描述

    Step 2:模型的设置

    将我们准备好的模型分别替换Cube,并适当修改它们的Scale 与 rotation,效果如图:
    这里写图片描述
    我们分别对两个模型进行参数设置,首先对ImageTarget 下的模型设置Scale 与 Rotation
    这里写图片描述
    我们还需要对它的Animation修改,在本次案例中,我们只需要"n2017_idle" 与"n2017_skill_2"。效果如图:
    这里写图片描述
    还需将"n2017_skill_2" 这个Animation 的"Wrap Mode “设置为"Loop”
    这里写图片描述
    另外一个模型的设置也是这样,大家自行设置,所需的Animation 为"Standby"和"Attack3"
    这里写图片描述
    然后接着为两个模型添加Box Collider,并勾选Is Trigger,在这里,我们需要设置Box Collider 的大小,使得长度稍稍大于图片的宽度,方便我们的碰撞检测,给大家一个参考的数值:
    这里写图片描述
    为了使用OnTriggerEnter() 方法,我们还需在一个模型身上挂一个RigidBody 组件
    这里写图片描述

    Step 3:编写脚本

    首先当我们的两张识别图靠近时,我们显示一个UI,提示“战斗开始”,这里我们用NGUI来实现。
    PS:对于NGUI不熟悉的可以看看这些教程:
    http://www.taikr.com/course/445
    http://www.taikr.com/course/34

    我们创建个label
    这里写图片描述
    修改label文字内容为“战斗开始”
    这里写图片描述
    效果如图:
    这里写图片描述
    然后我们在Label 上添加一个Tween-Alpha 脚本来
    这里写图片描述
    我们调整我们Alpha 从0变到1,并且设置动画时长为2s。
    这里写图片描述
    接着我们编写新建代码"PlayAnim",实现当两张识别图靠近时,出现这个title,即label,首先我们要将label 设为不可见:
    这里写图片描述
    然后编写代码:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class PlayAnim : MonoBehaviour {
    
        public TweenAlpha label;
        // Use this for initialization
        void Start () {
            
        }  
        // Update is called once per frame
        void Update () {    
        }
        void OnTriggerEnter(Collider col) 
        {    
            label.gameObject.SetActive (true);
            label.PlayForward ();
        }
    
    }
    

    通过碰撞检测,我们处理label 的显示------首先是设置label为可见,接着播放它的Tween–Alpha 动画,即Alpha 在2s内从0–1,即两张识别图靠近之后,“战斗开始”这几个字在2s内出现。

    当显示完后,我们不希望它一直出现,所以我们需要处理它的隐藏。我们在这个脚本基础上写一个方法:

    public void Hide()
        {
            label.gameObject.SetActive (false);
        }
    

    然后调用,操作方法类似unity 给Button添加方法。
    这里写图片描述
    最后我们再来实现动画的交互,代码相对简单,属于unity最基本东西

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class PlayAnim : MonoBehaviour {
        private Animation anim;
        // Use this for initialization
        void Start () {
            anim = GetComponent<Animation> ();
        }  
        // Update is called once per frame
        void Update () {    
        }
        void OnTriggerEnter(Collider col) 
        {
            anim.Play ("n2017_skill_2");
            col.gameObject.GetComponent<Animation> ().Play ("Attack3");
        }
    }
    

    完整脚本地址:链接: https://pan.baidu.com/s/1kVmP095 密码: 4kzx
    原文链接:http://forum.easyar.cn/portal.php?mod=view&aid=4

    EasyAR开发技巧—模型交互操作

    AR 开发中常用的交互功能总结

    我们在EasyAR 初学者入门系列的第一篇教程中展现了EasyAR 最基本的功能,使得一个模型以AR技术呈现在我们面前,实在炫酷。扫描识别图之后展现一个模型,如果仅仅是静态的,体验效果也不是很好,所以根据市面上的常见AR APP,给大家总结了几种常见的AR模型的交互方式。我们在最基础的 HelloAR 这个项目的基础上进行开发,前提是大家已经掌握好了如何基础性的搭建EasyAR+unity 的开发方式,不懂得伙伴可以跳转到:EasyAR 初学者入门指南(1)—显示模型 阅读。
    关于交互方式,在这里主要给大家提供思路以及脚本文件。

    源码:链接: https://pan.baidu.com/s/1pKSy5jP 密码: yy2b

    Step 1:导入项目

    我们以后的开发都在EasyAR 的官方项目"HelloAR" 的基础上进行,首先我们需要到官网上下载并导入unity中
    这里写图片描述

    下载好后,我们将HelloAR 在unity 中打开
    这里写图片描述
    下载好后,我们将HelloAR 在unity 中打开
    这里写图片描述

    Step 2:点击模型本身交互

    预览:
    这里写图片描述
    实现功能:点击Cube(扫描识别图出现的模型)我们可以更换它的颜色。

    我们先删除另外两个不用的ImageTarget,只在"ImageTarget-JsonFile-idback" 身上做文章
    这里写图片描述
    我们新建一个Material,命名为"blue"
    这里写图片描述
    然后在Cube 上新建一个脚本"ChangeColor",来实现点击时cube 颜色的改变,这段脚本属于unity 最基本的知识,主要是定义两个Material ,然后在OnMouseDown() 方法中进行修改替换,同时我们也定义了一个布尔类的标识位。

    脚本地址:链接: https://pan.baidu.com/s/1miidEOS 密码: 5x6d

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class ChangeColor : MonoBehaviour {
        public Material blue;
        public Material id;
        private bool isClick = false;
        // Use this for initialization
        void Start () {    
        }
        // Update is called once per frame
        void Update () {   
        }
        void OnMouseDown()
        {
            if (!isClick) {
                this.gameObject.GetComponent<MeshRenderer> ().material = blue;
                isClick = true;
            } else {
                this.gameObject.GetComponent<MeshRenderer> ().material = id;
                isClick = false;
            }
        }
    }
    

    这里写图片描述

    Step 2:双手缩放

    预览:
    这里写图片描述
    在开发AR APP功能开发时,双手缩放是最常见的功能,这也是一种最自然的交互手段,实现这样的功能也非常的简单,我们在Cube 上挂一个脚本,命名为"Gesture"

    脚本地址:链接: https://pan.baidu.com/s/1geDLOPl 密码: ykwf
    这里写图片描述

    using UnityEngine;
    using System.Collections;
    public class Gesture : MonoBehaviour {
        private Touch oldTouch1;  //上次触摸点1(手指1)
        private Touch oldTouch2;  //上次触摸点2(手指2)
        void Update()
        {
            //没有触摸,就是触摸点为0
            if (Input.touchCount <= 0)
            {
                return;
            }     
            //多点触摸, 放大缩小
            Touch newTouch1 = Input.GetTouch(0);
            Touch newTouch2 = Input.GetTouch(1);
            //第2点刚开始接触屏幕, 只记录,不做处理
            if (newTouch2.phase == TouchPhase.Began)
            {
                oldTouch2 = newTouch2;
                oldTouch1 = newTouch1;
                return;
            }
            //计算老的两点距离和新的两点间距离,变大要放大模型,变小要缩放模型
            float oldDistance = Vector2.Distance(oldTouch1.position, oldTouch2.position);
            float newDistance = Vector2.Distance(newTouch1.position, newTouch2.position);
            //两个距离之差,为正表示放大手势, 为负表示缩小手势
            float offset = newDistance - oldDistance;
            //放大因子, 一个像素按 0.01倍来算(100可调整)
            float scaleFactor = offset / 100f;
            Vector3 localScale = transform.localScale;
            Vector3 scale = new Vector3(localScale.x + scaleFactor,
                localScale.y + scaleFactor,
                localScale.z + scaleFactor);
            //在什么情况下进行缩放
            if (scale.x >= 0.05f && scale.y >=0.05f && scale.z >= 0.05f)
            {
                transform.localScale = scale;
            }
            //记住最新的触摸点,下次使用
            oldTouch1 = newTouch1;
            oldTouch2 = newTouch2;
        }
    }
    
    

    Step 3:任意拖动

    预览:
    这里写图片描述
    脚本地址:链接: https://pan.baidu.com/s/1pL7Je9l 密码: s4g5

    这样的功能在市面上的AR APP 中也很常见,比如视+ APP,我们可以快速的将模型拖动到任何位置。我们同样的在Cube新建段脚本,命名为"Drag"

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Drag : MonoBehaviour {
        private Vector3 _vec3TargetScreenSpace;// 目标物体的屏幕空间坐标
    
        private Vector3 _vec3TargetWorldSpace;// 目标物体的世界空间坐标
    
        private Transform _trans;// 目标物体的空间变换组件
    
        private Vector3 _vec3MouseScreenSpace;// 鼠标的屏幕空间坐标
    
        private Vector3 _vec3Offset;// 偏移
    
        void Awake() { _trans = transform; }
    
        IEnumerator OnMouseDown()
    
        {
    
            // 把目标物体的世界空间坐标转换到它自身的屏幕空间坐标
    
            _vec3TargetScreenSpace = Camera.main.WorldToScreenPoint(_trans.position);
    
            // 存储鼠标的屏幕空间坐标(Z值使用目标物体的屏幕空间坐标)
    
            _vec3MouseScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, _vec3TargetScreenSpace.z);
    
            // 计算目标物体与鼠标物体在世界空间中的偏移量
    
            _vec3Offset = _trans.position - Camera.main.ScreenToWorldPoint(_vec3MouseScreenSpace);
    
            // 鼠标左键按下
    
            while (Input.GetMouseButton(0))
    
            {
    
                // 存储鼠标的屏幕空间坐标(Z值使用目标物体的屏幕空间坐标)
    
                _vec3MouseScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, _vec3TargetScreenSpace.z);
    
                // 把鼠标的屏幕空间坐标转换到世界空间坐标(Z值使用目标物体的屏幕空间坐标),加上偏移量,以此作为目标物体的世界空间坐标
    
                _vec3TargetWorldSpace = Camera.main.ScreenToWorldPoint(_vec3MouseScreenSpace) + _vec3Offset;
    
                // 更新目标物体的世界空间坐标
                _trans.position = _vec3TargetWorldSpace;
                // 等待固定更新
                yield return new WaitForFixedUpdate();
    
            }
    
        }
    }
    

    AR交互操作实例—玩转僵尸

    原文链接:http://forum.easyar.cn/portal.php?mod=view&aid=6

    通过视+ APP上的一个案例来了解熟悉AR开发常用的交互技巧

    在上一篇的EasyAR 开发技巧—模型交互操作 我们熟悉了比较流行的移动端AR的交互技巧,今天我们在此基础上继续深入的了解,通过一个类似视+ APP 的一个实例来复习或熟悉AR开发的交互技巧。

    预览:

    相关资源:

    iTween 插件:链接: https://pan.baidu.com/s/1nuNMajn 密码: b9nv

    Step 1:开发准备

    下载EasyAR SDK,搭建EasyAR 开发的最基本环境。(前面有基础教程:EasyAR 初学者入门指南(1)—显示模型
    ok,接下来我们删除unity原有的Main Camera,把EasyAR_Startup的摄像机拖入到面板中。
    这里写图片描述
    接着把导入的怪物模型拖入面板中(注意:我们这里并没有用到Imagetarget,因为不需要识别功能。大家还可以脑洞大开,来为模型的展现增加个缓冲显示效果,在这里我就不实现了,主要把AR 移动端的核心知识给大家分享一下)
    这里写图片描述

    Step 2:修改相关参数

    先修改AR相机的角度,使其X值旋转270度
    这里写图片描述
    接下来使怪物Y值旋转180度,并放大2倍,修改默认动画(也可以不修改,只不过使的看起来效果更惊艳)。
    这里写图片描述
    给怪物添加BoxCollider,并勾选is Trigger

    Step 3:实现点击怪物播放动画实现交互

    首先给物体再加一个Animation,根据你自己的喜爱添加相应的Animation
    这里写图片描述
    接下来新建一段代码实现动画交互,代码十分简单,我们在上一篇(交互操作)上讲过,大家套用框架就好。

    using UnityEngine;
    using System.Collections; 
    public class PlayAnim : MonoBehaviour 
    {        
    public Animation anim;        
    void Start()        
    {                
    anim = GetComponent();
    }
    void Update()
    {
    if (!anim.isPlaying) {
    anim.Play ("2HitCombo");
    }
    }
    void OnMouseDown()
    {
    anim.Play ("jumpAttack_RM");
    }
    }
    

    然后我们要实现的是双指实现缩放,单指任意拖动,这部分的代码在前一篇文章(EasyAR开发技巧—模型交互操作)中讲过,以后可以把这些当作常用代码来使用,会比较方便,直接拖动到模型身上即可。

    step 4:点哪走哪

    在这里,我只提供自己的一种实现方法,当然实现这种效果可以有很多方法。
    首先,我们先建一个plane,修改大小为(2,2,2)
    这里写图片描述
    这里写图片描述
    然后,接下来,修改其Tag为Ground
    这里写图片描述
    最重要的一部分,关闭其Renderer,使其不显示,在这里我们只要Mesh Collider
    这里写图片描述
    这里写图片描述
    我们先在这个模型新建个脚本,在这里我们用射线检测的方法来实现。
    我们用Input.touchCount 先判断是否有触摸事件,然后获取Input.GetTouch(0).position ,触摸手机屏幕的位置,然后射线检测,实现移动,完整代码如下:

    using UnityEngine;
    using System.Collections;
    public class Player : MonoBehaviour {
    private Vector3 clickPosion;
    public float speed = 5f;
    
    void Start()
    {
    	clickPosion = transform.position;
    }
    void Update()
    {
    	if (Input.touchCount > 0) {
    	Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch (0).position);
    	RaycastHit hit;
    	Physics.Raycast(ray, out hit);
    	try
    	{
    		if (hit.collider.tag == "Ground") //获取点击位置的世界坐标
    		{
    		Vector3 v = hit.point;
    		clickPosion = new Vector3(v.x, transform.position.y, v.z);
    		transform.LookAt(clickPosion);
    		}
    	}
    	catch
    	{
    	}
    	iTween.MoveTo(gameObject, clickPosion, 4f);
    	}
    }
    

    关于iTween 知识:
    1.http://edu.manew.com/course/6
    2.http://www.xuanyusong.com/archives/2052

    EasyAR 二维码+AR的应用

    EasyAR实现二维码+AR的应用第一篇章

    二维码在我们生活总早已是司空见惯了,当AR碰撞上二维码,一定可以产生好玩的效果。EasyAR对于二维码的识别与支持是相当不错的,所以在这一篇与下一篇的教程中,我们会分享如何从零开发二维码+AR 的应用。

    Step 1:开发环境

    我们需要新建一个unity项目,并将"EasyAR_SDK_2.0.0_Basic" 的unitypackage导入,关于EasyAR+unity 这些基础操作不懂的可以看看之前的文章“EasyAR 初学者入门指南(1)—显示模型”,在这里我一笔带过。导入之后,我们的unity目录界面应该是这样的:

    这里写图片描述
    我们删除原有的Main Camera,将"EasyAR_ImageTracker-1_QRCode-1" 拖到面板中。并将官网申请的Key填好。
    这里写图片描述
    观察"EasyAR_ImageTracker-1_QRCode-1"这个预制体,对比与我们之前常用的"EasyAR_Startup",发现多了一个"BarCodeScanner" 的部分。
    这里写图片描述
    这里写图片描述
    这里写图片描述
    它上面所挂的脚本"QRCodeScannerBehaviour"使用来实现二维码的扫描与识别功能的。这是对于它的具体描述:
    这里写图片描述
    这里写图片描述
    这里写图片描述

    Step 2:制作二维码资源

    我们需要准备二维码的图片,有许多网站都可以来制作自己的二维码。我制作的内容大致如下:
    这里写图片描述
    大家也可以发挥自己的脑洞,随意写些内容,目前我们先实现通过EasyAR SDK 来实现扫描二维码 显示文字的功能。

    Step 3:编辑代码

    我们准备好了二维码,接下来就是在unity里编辑代码来实现功能,首先我们在"EasyAR_ImageTracker-1_QRCode-1" 下新建一个脚本,命名为"ARIsEasyBehaviour",
    这里写图片描述
    脚本下载地址:链接: https://pan.baidu.com/s/1dF5tigx 密码: 9ag5

    using System.Collections;
    using UnityEngine;
    
    namespace EasyAR
    {
        public class ARIsEasyBehaviour : MonoBehaviour
        {
            private const string title = "Please enter KEY first!";
            private const string boxtitle = "===PLEASE ENTER YOUR KEY HERE===";
            private const string keyMessage = ""
                + "Steps to create the key for this sample:\n"
                + "  1. login www.easyar.com\n"
                + "  2. create app with\n"
                + "      Name: HelloARQRCode (Unity)\n"
                + "      Bundle ID: cn.easyar.samples.unity.helloarqrcode\n"
                + "  3. find the created item in the list and show key\n"
                + "  4. replace all text in TextArea with your key";
    
            private bool startShowMessage;
            private bool isShowing;
            private string textMessage;
    
            private void Awake()
            {
                var EasyARBehaviour = FindObjectOfType<EasyARBehaviour>();
                if (EasyARBehaviour.Key.Contains(boxtitle))
                {
    #if UNITY_EDITOR
                    UnityEditor.EditorUtility.DisplayDialog(title, keyMessage, "OK");
    #endif
                    Debug.LogError(title + " " + keyMessage);
                }
                EasyARBehaviour.Initialize();
                foreach (var behaviour in ARBuilder.Instance.ARCameraBehaviours)
                {
                    behaviour.TargetFound += OnTargetFound;
                    behaviour.TargetLost += OnTargetLost;
                    behaviour.TextMessage += OnTextMessage;
                }
                foreach (var behaviour in ARBuilder.Instance.ImageTrackerBehaviours)
                {
                    behaviour.TargetLoad += OnTargetLoad;
                    behaviour.TargetUnload += OnTargetUnload;
                }
            }
    
            void OnTargetFound(ARCameraBaseBehaviour arcameraBehaviour, TargetAbstractBehaviour targetBehaviour, Target target)
            {
                Debug.Log(" Found: " + target.Id);
            }
    
            void OnTargetLost(ARCameraBaseBehaviour arcameraBehaviour, TargetAbstractBehaviour targetBehaviour, Target target)
            {
                Debug.Log(" Lost: " + target.Id);
            }
    
            void OnTargetLoad(ImageTrackerBaseBehaviour trackerBehaviour, ImageTargetBaseBehaviour targetBehaviour, Target target, bool status)
            {
                Debug.Log(" Load target (" + status + "): " + target.Id + " (" + target.Name + ") " + " -> " + trackerBehaviour);
            }
    
            void OnTargetUnload(ImageTrackerBaseBehaviour trackerBehaviour, ImageTargetBaseBehaviour targetBehaviour, Target target, bool status)
            {
                Debug.Log(" Unload target (" + status + "): " + target.Id + " (" + target.Name + ") " + " -> " + trackerBehaviour);
            }
    
            private void OnTextMessage(ARCameraBaseBehaviour arcameraBehaviour, string text)
            {
                textMessage = text;
                startShowMessage = true;
                Debug.Log("got text: " + text);
            }
    
            IEnumerator ShowMessage()
            {
                isShowing = true;
                yield return new WaitForSeconds(2f);
                isShowing = false;
            }
    
            private void OnGUI()
            {
                if (startShowMessage)
                {
                    if (!isShowing)
                        StartCoroutine(ShowMessage());
                    startShowMessage = false;
                }
    
                if (isShowing)
                    GUI.Box(new Rect(10, Screen.height / 2, Screen.width - 20, 30), textMessage);
            }
        }
    }
    

    我们在这段脚本文件实现的是首先Target 的识别然后是扫描二维码之后接收结果并实现绘制在屏幕上,对于Target 的found与load等方法相信大家已经很熟悉了。对于OnTextMessage()接收返回结果然后赋值给textMessage,并由OnGUI()进行绘制。我们Build测试,会实现如下的效果:
    这里写图片描述
    PS:在实际的开发中,我们不会像这样从零来搭建AR+二维码的开发环境,一般是直接在EasyAR官网的实例进行二次开发,这样会大大提高我们的效率。下一篇我们会实现二维码+AR的一个实例。

    我们在此基础上继续完善demo
    预览:
    这里写图片描述
    资源:

    NGUI插件:链接: https://pan.baidu.com/s/1bMgGn8 密码: uviy
    资源地址:链接: https://pan.baidu.com/s/1kVCBiBX 密码: b3eg
    代码地址:链接: https://pan.baidu.com/s/1pKFAATX 密码: x7r9

    Step 1:准备

    首先是关于识别图的准备,在这次的案例演示中我使用了如下的图片(二维码可以自己制作):
    这里写图片描述
    在unity中我们新建一个文件夹"StreamingAssets",将识别图导入。并且新建文件夹“Scripts”,导入提前准备好的资源,框架图如下:
    这里写图片描述

    Step 2:制作ImageTarget

    将ImageTarget拖入到面板中
    这里写图片描述
    remove掉原来挂在ImageTarget上的脚本,将我们导入的"EasyImageTargetBehaviour" 挂在上面(这部分属于EasyAR 图像识别最基本的操作,不懂的可以看看:EasyAR 初学者入门指南(1)—显示模型
    这里写图片描述
    填写识别图信息,将我们导入的那张带有二维码的识别图名字与size配置好
    这里写图片描述
    这里写图片描述
    为了能在unity中看到识别图的具体信息,我们建立一个材质球使其显示。新建Material,模式设置为Mobile/Diffuse.效果如图:
    这里写图片描述
    这样在unity编辑器中就可以显示了,方便我们设置Scan扫描特效的配置
    这里写图片描述

    Step 3:制作扫描特效

    将prefab scan 拖到ImageTarget 下面
    这里写图片描述
    适当调整Scan的位置与scale,这里大家自行调整使其达到一个合适的位置
    这里写图片描述
    编写脚本"Move",实现扫描效果。脚本的思路其实很简单,就是在Update里不断更新Scan材质球的texture 的offset。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Move : MonoBehaviour
    {
    	public float offset_y = 0.5f;
    	
    	void Awake(){}
    
    	void Start(){}
    
    	void Update()
    	{
    		offset_y -= Time.deltaTime;
    		this.GetComponent<MeshRenderer>().material.SetTextureOffset("_MainTex",new Vector2(0,offset_y));
    	}
    }
    

    Step 4:制作UI显示二维码内容

    我们使用NGUI来完成ui的制作。在这里的思路是根据你的二维码文字内容建立相应的label(我们在代码实现是通过逗号来分割内容分别显示在不同的label上)在本次的案例演示,我建立两个label(分别显示EasyAR与Cool)和一个Button(点击跳转网页)。具体的ui位置配置大家可以自行调试,效果如图:
    这里写图片描述
    这里写图片描述
    我是将三个UI控件(label,button)放在一个Empty GameObject下面,即"b"下面。我们将"b"添加个Tween 动画,使其演示效果更加炫酷,在这里我用的是Tween/Scale这一模式
    这里写图片描述
    这里写图片描述
    最后,将"b"这一GameObject 设为不可见
    这里写图片描述

    Step 5:编写代码

    首先我们修改完善"Move" 这个脚本。思路是这样的,我们设置一个扫描时长,当达到这个时长时,我们设置Scan 这一object不可见,并且把我们准备好的UI控件显示,完整代码如下:
    脚本下载地址:链接: https://pan.baidu.com/s/1pKNFKMn 密码: xh6m

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Move : MonoBehaviour
    {
    	public float offset_y = 0.5f;
    	public GameObject btns;
    	
    	void Awake(){}
    
    	void Start(){}
    
    	void Update()
    	{
    		if(offset_y <= -3.0f)
    		{
    			btns.SetActive(true);
    			btns.GetComponent<TweenScale>().PlayForward();
    			this.gameObject.SetActive(false);
    		}
    		else
    		{
    			offset_y -= Time.deltaTime;
    			this.GetComponent<MeshRenderer>().material.SetTextureOffset("_MainTex",new Vector2(0,offset_y));
    		}
    	}
    }
    

    在unity操作界面将"b"赋值到脚本里
    这里写图片描述
    然后我们修改绑定在"EasyAR_ImageTracker-1_QRCode-1" 上的"ARIsEasyBehaviour" 脚本文件。主要是实现获得二维码内容text后将它显示在我们准备好的UI上。

    在开头定义UIlabel

    public UILabel text1;
    public UILabel text2;
    

    然后在OnTextMessage()方法里实现

    private void OnTextMessage(ARCameraBaseBehaviour arcameraBehaviour, string text)
    {
                textMessage = text;
                text1.text = textMessage.Split (',')[0];
                text2.text = textMessage.Split (',') [1];
                startShowMessage = true;
                Debug.Log("got text: " + text);
    }
    

    最后注释掉原有的OnGUI方法即可。
    完整代码地址:链接: https://pan.baidu.com/s/1jIwvMFs 密码: c8t8

    对于按钮的交互,我们实现的是点击之后跳转到EasyAR SDK2.0的网页,实现起来相当简单,一句代码即可:Application.OpenURL (“http://www.easyar.cn/view/sdk.html”);

    实现到这里,我们基本上就可以完成案例效果了。

    EasyAR 开发实例—AR红包(初级)

    原文链接:http://forum.easyar.cn/portal.php?mod=view&aid=10

    用EasyAR SDK 来实现一个AR红包功能

    分享一篇如何用EasyAR SDK来开发一个简单的AR红包的功能。

    预览:
    这里写图片描述
    开发资源:
    粒子特效:链接: https://pan.baidu.com/s/1i5swzLN 密码: dwtr
    NGUI插件: 链接: https://pan.baidu.com/s/1qYAyYL2 密码: 7jb2

    Step 1:开发环境搭建

    首先我们下载EasyAR SDK (unity版本)并导入到unity中,并到官网申请开发时所用到的Key值,在unity中,删除原有的Camera,将EasyAR_Startup拖入到面板中,并将key之填入。注意:在这里我们并没有用到识别功能,因此没必要用ImageTarget。
    这里写图片描述
    接下来,我们准备红包模型,有些人在导入红包模型的过程中可能会遇到贴图丢失的情况,在这里,我们只需将红包贴图重新挂到材质上即可。
    这里写图片描述
    在这里,我们准备两个红包预制体,来实现不同的交互。并修改它们的大小以便区分。在这里我给他们命名分别为Hong,HongBao。具体详细参数如下
    Hong:
    这里写图片描述
    HongBao:
    这里写图片描述
    接下来,我们给两个红包添加Tag,分别为Hong,HongBao。
    这里写图片描述
    这里写图片描述
    这里写图片描述
    为两个红包预制体添加BoxCollider,并勾选Trigger。大小自己调节。

    最后,我们为我们所交互的那个红包HongBao添加个动画。选中它,并在菜单栏Window-Animation,打开后,点击Create,并保存命名。
    这里写图片描述
    接着点Add Property,选Transfrom-Scale
    这里写图片描述
    接着点Add Property,选Transfrom-Scale
    这里写图片描述

    Step 2:产生红包

    首先我们先创建几个随机点,分别命名point1,point2,point3,这是红包所降落的位置。参考数值如下:大家可以自行设置

    point1:
    这里写图片描述
    point2:
    这里写图片描述
    point3:
    这里写图片描述
    接下来,我们创建一段代码来使得红包可以降落,在这里用Translate来实现,当然大家可以用其他方法,比如添加Rigidbody,给个受力也可以,不过那样有点麻烦。(补充:当红包的Z坐标小于-8时,就销毁)

    using UnityEngine;
    
    using System.Collections;
    
    using UnityEngine.UI;
    
    public class Move : MonoBehaviour {
    
    public GameObject par;
    
    // Use this for initialization
    
    void Start () {
    
    }
    
    // Update is called once per frame
    
    void Update () {
    
    	transform.Translate (-transform.forward*2f*Time.deltaTime);
    
    	if (transform.position.z < -8f) {
    
    	Destroy (this.gameObject);
    
    }
    
    }
    
    }
    

    接下来,创建CreateHong空物体,在上面挂上CreateHong.cs脚本,实现随机产生红包。

    using UnityEngine;
    
    using System.Collections;
    
    public class CreateHong : MonoBehaviour {
    
    public Transform[] points;
    
    public GameObject[] hongbaos;
    
    private int index;
    
    // Use this for initialization
    
    void Start () {
    
    InvokeRepeating ("CreateHongbao",1f,1f);
    
    }
    
    // Update is called once per frame
    
    void Update () {
    
    }
    
    void CreateHongbao(){
    
    int i = Random.Range (0, 10);
    
    if (i > 1) {
    
    index = 0;
    
    } else {
    
    index = 1;
    
    }
    
    GameObject go = GameObject.Instantiate (hongbaos [index], points [Random.Range (0, points.Length)].position + new Vector3 (Random.Range (-0.5f, 0.5f), 0, 0), Quaternion.identity) as GameObject;
    
    go.transform.Rotate (new Vector3 (270, 180, 0));
    
    }
    
    }
    
    }
    

    Step 3:交互

    当点击抖动红包时我们产生炫酷的粒子特效,将如下方法添加到Move.cs中

    void OnMouseDown(){
    
    if (gameObject.tag == "Hong") {
    
    Debug.Log ("ddd");
    
    } else if(gameObject.tag=="HongBao") {
    
    CreateHong._instace.isCreate = false;
    
    GameObject go=GameObject.Instantiate (par,gameObject.transform.position,Quaternion.identity) as GameObject;
    
    Destroy (go,2f);
    
    }
    
    }
    

    并在2s后销毁该粒子

    好了,接下来,我们用NGUI插件实现产生优惠卷或红包(这不重要,重要的是实现思路与方法)

    效果如下:
    这里写图片描述
    首先,我们创建Sprite
    这里写图片描述
    接着添加TweenScale
    这里写图片描述
    注意:
    这里写图片描述
    这里写图片描述
    接下来我们使用单例模式在CreateHong.cs脚本中实现:

    首先声明:

    publicstaticCreateHong_instace;
    

    接着:

    void Awake()
    
    {
    
    _instace = this;
    
    }
    

    然后实现方法供外界调用

    public void PlayScale()
    
    {
    
    daxiao.gameObject.SetActive (true);
    
    daxiao.PlayForward ();
    
    }
    

    在Move.CS中实现:

    void OnMouseDown()
    
    {
    
    if (gameObject.tag == "Hong") {
    
    Debug.Log ("ddd");
    
    } else if(gameObject.tag=="HongBao") {
    
    CreateHong._instace.isCreate = false;
    
    GameObject go=GameObject.Instantiate (par,gameObject.transform.position,Quaternion.identity) as GameObject;
    
    Destroy (go,2f);
    
    CreateHong._instace.PlayScale ();
    
    }
    
    }
    

    完整代码:Move.cs:链接: https://pan.baidu.com/s/1qYLS77Y 密码: 9n1u

    CreateHong.cs:链接: https://pan.baidu.com/s/1jIBVt4q 密码: 483i

    EasyAR 开发实例—AR礼物

    原文链接:http://forum.easyar.cn/portal.php?mod=view&aid=11

    EasyAR 开发出一个炫酷的节日礼物效果

    预览:
    这里写图片描述
    这里写图片描述
    开发资源:

    链接: https://pan.baidu.com/s/1mkWL7Ev7CWOyfp6s4_8JQw 密码:pznt

    Step 1:开发环境

    关于用EasyAR SDK 搭建AR 开发环境的文章,不懂得朋友可以看下"EasyAR 初学者入门指南(1)—显示模型"。我们直接讲解本次的核心内容。

    我们下好资源后,导入到unity,搭建好基本AR环境。如图:
    这里写图片描述

    Step 2:准备模型

    我们将准备好的资源–礼物与二次元女生导入到unity中,并将三个礼物盒子与女主角拖入到ImageTarget 充当子物体,礼物盒的模型位置在
    这里写图片描述
    女主角的模型位置在
    这里写图片描述
    拖入之后,根据自己的需求修改其位置,实现其如下效果:
    这里写图片描述
    这里写图片描述

    Step 3:编写脚本

    首先为礼物盒添加Box Collider,并勾选Trigger
    这里写图片描述
    新建脚本,名字随便起,先实现点击礼物盒后,礼物盒消失二次元女生出现,这里用到了一个最巧但最常用方便的方法Void OnMouseDown(),使用这个方法前提是该物体挂了个Collider

    void OnMouseDown()
    
    {
    
    Destroy(this.gameObject);
    
    }
    

    Step 4:添加粒子特效

    使用粒子特效来使得更令人惊喜的礼物效果,粒子特效的资源位置在
    这里写图片描述
    接下来,编写脚本,脚本比较简单,基本思路就是在点击礼物盒子后,盒子销毁,创建粒子特效,代码如下:

    using UnityEngine;
    
    using System.Collections;
    
    public class Explore : MonoBehaviour {
    
    public GameObject explore1;
    
    public GameObject explore2;
    
    public GameObject explore3;
    
    public AudioSource sound;
    
    // Use this for initialization
    
    void Start () {
    
    }
    
    // Update is called once per frame
    
    void Update () {
    
    }
    
    void OnMouseDown()
    
    {
    
    Destroy (this.gameObject);
    
    Instantiate (explore1,transform.position,transform.rotation);
    
    Instantiate (explore2, transform.position, transform.rotation);
    
    Instantiate (explore3,transform.position,transform.rotation);
    
    }
    
    }
    

    粒子的选择与自己的喜好来选择,不一定和我一样,这样大家可以实现不同的效果。

    ###Step 5:添加音效

    音效对一个应用或游戏给人的用户体验影响还是很大的,给礼物盒子添加AudioSource
    这里写图片描述

    using UnityEngine;
    
    using System.Collections;
    
    public class Explore : MonoBehaviour {
    
    public GameObject explore1;
    
    public GameObject explore2;
    
    public GameObject explore3;
    
    public AudioSource sound;
    
    // Use this for initialization
    
    void Start () {
    
    }
    
    // Update is called once per frame
    
    void Update () {
    
    }
    
    void OnMouseDown()
    
    {
    
    Destroy (this.gameObject);
    
    sound.Play ();
    
    Instantiate (explore1,transform.position,transform.rotation);
    
    Instantiate (explore2, transform.position, transform.rotation);
    
    Instantiate (explore3,transform.position,transform.rotation);
    
    }
    
    }
    

    OK,就是这样,用很简单的代码就可以用EasyAR SDK 开发出惊艳的应用。

    EasyAR 开发实例—Pokemon Go

    原文链接:http://forum.easyar.cn/portal.php?mod=view&aid=14

    EasyAR+Pokemon Go

    Pokemon Go 作为去年最火爆的AR游戏除了让用户体验到AR的神奇外,也让开发者兴奋不已。所以了今天给大家分享如何用EasyAR SDK 来构建类似Pokemon Go 的AR+LBS+IP 的项目。

    对于这个较为庞大的项目打算分几期来分享,主要功能或教程目录如下:

    1.实现最基础的Pokemon Go 的抛掷效果

    2.集成AR录屏功能

    3.拍照截屏(录屏)分享朋友圈功能

    4.LBS部分,考虑用百度地图/高德地图(或Mapbox)来集成

    5.添加语音功能

    6.UI部分的设计

    7.添加对战功能(精灵PK.即AR联机对战)

    目前的策划是这样的,当然大家有什么好的想法也可以在下面评论。今天我们来实现第一部分-----抛掷精灵球并捕获皮卡丘。

    开发资源:

    皮卡丘模型:链接: https://pan.baidu.com/s/1mdhfpFnLc6SQFsubz9qn3w 密码:2mnj

    游戏音效:链接: https://pan.baidu.com/s/1bphIupp 密码: xpbe

    Step 1:开发环境

    我们将开发资源与EasyAR 2.0 unitypackage 一起导入unity中。框架如图:
    这里写图片描述
    在这里为大家准备了很多的PokeBalls 的模型,大家可以自由选择:
    这里写图片描述
    把 EasyAR_Startup (我们这里没有运用到识别图片之后展现AR模型,所以不需要ImageTarget),皮卡丘模型,pokeballs 都拖入面板中,效果如图:
    这里写图片描述
    修改皮卡丘位置与旋转角度(为了获取在移动端的最好体验),大家可以在不断测试中调出合适的数值,例如:
    这里写图片描述
    修改Pokeballs 位置(十分重要):
    这里写图片描述
    接下来,在皮卡丘上挂上Box Collider,并为其添加Tag(命名为Pika)。
    这里写图片描述
    这里写图片描述
    为Pokeballs 添加rigidbody 与 Sphere Collider。
    这里写图片描述

    Step 2:实现抛掷

    我们思路是这样的:点击pokeball ,进行抛物线运动。现在有两种方法来实现,一种是通过Rigidbody来施力实现,另一种是通过transform 来合成加速度实现。

    第一种:

    在Pokeball 上新建一段脚本:

    public class ClickSound : MonoBehaviour 
    {
    	bool drawing = false;
    	public ParticleSystem par;
    	float distance;
    	public float ThrowSpeed;
    	public float ArcSpeed;
    	public float Speed;
    	
    	void OnMouseDown()
    	{
    		distance = Vector3.Distance (transform.position,Camera.main.transform.position);
    		drawing = true;
    	}
    	void OnMouseUp()
    	{
    		this.GetComponent<Rigidbody>().useGravity = true;
    		this.GetComponent<Rigidbody>().velocity += this.transform.forward * ThrowSpeed;
    		this.GetComponent<Rigidbody>().velocity += this.transform.up * ArcSpeed;
    		drawing = false;
    	}
    	void Update()
    	{
    		if(drawing)
    		{
    			Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    			Vector3 rayPoint = ray.GetPoint(distance);
    			transform.position = Vector3.Lerp(transform.position,rayPoint,Time.deltaTime * Speed);
    		}
    	}
    }
    

    最主要的是判断点击抬起之后,为其添加向前的推力与向上的动力,来实现其运动。接着,实时判断通过射线来插值的方式实现其运动。

    我们设置好向前与向上的速度后,可以实现抛掷效果,但是缺点是不够灵活,很能与皮卡丘进行碰撞检测。

    第二种:

    借鉴:http://blog.csdn.net/hiramtan/article/details/51753448
    第二种我们通过transform 的方法来实现(直接绑定我们需要与之碰撞的对象即可):

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Throw : MonoBehaviour {
        public const float g = 9.8f;
    
        public GameObject target;
        public float speed = 10;
        private float verticalSpeed;
        private Vector3 moveDirection;
    
        private float angleSpeed;
        private float angle;
    
        bool drawing=false;
        void Start()
        {
            float tmepDistance = Vector3.Distance(transform.position, target.transform.position);
            float tempTime = tmepDistance / speed;
            float riseTime, downTime;
            riseTime = downTime = tempTime / 2;
            verticalSpeed = g * riseTime;
            transform.LookAt(target.transform.position);
    
            float tempTan = verticalSpeed / speed;
            double hu = Mathf.Atan(tempTan);
            angle = (float)(180 / Mathf.PI * hu);
            transform.eulerAngles = new Vector3(-angle, transform.eulerAngles.y, transform.eulerAngles.z);
            angleSpeed = angle / riseTime;
    
            moveDirection = target.transform.position - transform.position;
        }
    
    
        void OnMouseDown()
        {
            drawing = true;
    
        }
    
        private float time;
        void Update()
        {
            if (drawing) {
                time += Time.deltaTime;
                float test = verticalSpeed - g * time;
                transform.Translate (moveDirection.normalized * speed * Time.deltaTime, Space.World);
                transform.Translate (Vector3.up * test * Time.deltaTime, Space.World);
                float testAngle = -angle + angleSpeed * time;
                transform.eulerAngles = new Vector3 (testAngle, transform.eulerAngles.y, transform.eulerAngles.z);
            }
        }
    
    }
    
    

    然后,将对象拖给这段脚本即可:
    这里写图片描述

    Step 3:实现碰撞交互

    当pokeball 与皮卡丘相碰撞时,我们定义为捕获操作,这是销毁皮卡丘鱼pokeball并播放音效。

    首先我们在 pokeball 下面添加“AudioSource”组件
    这里写图片描述
    然后在脚本里添加方法:

    void OnTriggerEnter(Collider col)
        {
            if (col.tag == "Pika") {
                sound.Play ();
                Destroy (col.gameObject);
                Destroy (this.gameObject,3f);
            }
    
        }
    

    完整代码:

    链接: https://pan.baidu.com/s/1dFMpIcp 密码: 57bf
    捕获的功能现在就可以实现了

    展开全文
  • Unity3D——AR小游戏

    2019-12-03 16:52:22
    文章目录有趣的AR小游戏制作环境准备具体实现替换Camera上传识别卡下载识别卡模型编辑游戏对象实验环境是否配置成功导入Lean Touch脚本制作成Android应用游戏制作实验结果 有趣的AR小游戏制作 环境准备 Unity+...
  • AR相机的实现,功能包括: 1.双指进行放大缩小操作; 2.单指水平滑动时,水平旋转; 3.单指垂直滑动时,垂直旋转。
  • AR为现在是虚拟现实较为火爆的一个技术,其中有个比较炫酷的就是AR涂涂乐的玩法,这个技术可以把扫描到的图片上的纹理 粘贴到模型上实现为模型上色的功能,但是我们需要怎么才能实现其功能呢?大体的方法是将扫描到...
  • 打开一个Unity 3D工程,需要下载Unity3D开发工具(这里为测试新建FirstUnity工程) 下载地址为:https://unity3d.com/cn/get-unity/download 2.选项设置 选择左上角File下面的BuildSettings选项进入 3.平台...
  • unity3d和Android java通信 传输 byte图片在Texture2d显示经过两三天的折腾 将安卓图片变成byte再变成string传输到unity进行显示图片,遇到了很多的难处,除了查资料就是查文档; 终于解决了问题,在这里我分享一下...
  • unity AR3D物体识别

    2017-11-21 10:15:29
    上篇讲到了各种AR插件的一些对比 因为上个项目需求用到3D物体追踪。所以使用了EasyAR和Vuforia两种进行了测试对比。 因为如果需要AR识别,都需要有识别点,大致都是基于物体材质纹理来进行识别。 1.先讲一下...
  • 在之前的一篇博文中描述了Unity3D应用嵌入WPF应用的具体实现方式,但仅仅是解决了最基本的技术问题,想要将其具体的应用到项目中还需要具体的细化。经过近期在项目中的实践进行了细化,现将本人最近的一些过程整理...
  • 参看截图教程一(非AR版),Unity3d截图功能实现一(非AR版)  对于AR版与非AR类似,导入AR的部分或者在AR的应用中导入截图插件    注意事项:  AndroidManifest.xml文件重新配置。参看之前二维码扫描部分...
  • Unity3d+AR学习(一)

    2020-03-31 19:11:05
    Untiy3d+VuforiaAR学习(一)一.环境搭建二.简单图片识别样例1.申请密匙2.使用数据库3.unity3d 导入数据库demo使用 一.环境搭建 环境搭建此文章不再赘述,附上几篇博文 Unity3d 环境搭建 Vuforia基本环境搭建 二....
  • 开发预览源码:链接: https://pan.baidu.com/s/1kUQ4Mrl 密码: upmp模型资源:链接: https://pan.baidu.com/s/1bpImAwJ 密码: icwuStep 1...关于unity+Android 或unity+ios 环境的搭建,在后期会专门出一篇文章。St...
  • 注:本次用的AR SDK是vuforia,所以用这个SDK做开发解释说明,并且采用循序渐进的方式,逐步做出扫描出图可交互图片,视频和模型动画。   识别出现图片的做法: 1:先登录vuforia官网,没有账号的要先注册 2...
  • Unity开发AR环境搭建

    2018-02-07 17:01:01
    1.jdk9不能用,必须下载8版本。 2.新版android studio下载的SDK tools不能用,必须用旧版...3.设置调试等对照官网文档https://library.vuforia.com/articles/Training/getting-started-with-vuforia-in-unity-2017-
  • UnityAR Foundation使用

    2019-05-27 09:38:04
    首次使用AR Foundation 时,怎么都找不到AR Foundation这个包,后来才发现自己忽略了些细节。 下面是显示AR Foundation包的步骤。 然后点击show preview packages 即可显示AR Foundation等package。 ...
  • Unity2019版实现Vuforia AR要比Unity5.x及以前版本实现Vuforia AR方便得多,因为Unity2019版已将Vuforia的SDK集成到开发环境中。 实现步骤: 1. 在Vuforia官网(https://developer.vuforia.com/)上注册,并获取...
1 2 3 4 5 ... 20
收藏数 865
精华内容 346
热门标签