首页 > 编程语言 >Unity+SenseAR教程:用手势发射爱心【源码】

Unity+SenseAR教程:用手势发射爱心【源码】

时间:2023-04-28 15:08:48浏览次数:70  
标签:粒子 大智 SenseAR Unity 源码 Android 手势


摘要:Unity+SenseAR2.3开发的AR应用,基于手势识别功能,发射你的爱心~

洪流学堂,让你快人几步。你好,我是你的技术探路者郑洪智,你可以叫我大智。

今天开头就不絮叨了,一句“名言”送给大家,然后咱们把代码微微的一写。

“虽然今天是情人节,但怎会比学习带来更多的多巴胺呢?”—— 澹深苟

最终效果

这个教程中使用了最新的SenseAR,可以在很短时间内实现手势的识别。

咱们这个教程就是识别手枪、比心和爱你的手势,然后在屏幕上呈现心心的粒子效果。

Unity+SenseAR教程:用手势发射爱心【源码】_粒子效果

建立工程

注意必须使用Unity 2018.4版本,建议使用2018.4中国增强版最新版。
路径中一定不要有中文,否则打包可能出现问题。

Unity+SenseAR教程:用手势发射爱心【源码】_手势识别_02

安装SenseAR 插件

在Packamager中搜索SenseAR XR plugin,我在这用的是最新版的1.1.0-preview.1版本。

Unity+SenseAR教程:用手势发射爱心【源码】_AR_03

导入示例工程

SenseAR是个新鲜的东西,之前都没接触过,所以最好的开始就是先看下示例,看看能做什么。
如何导入示例工程呢?

1、在Project窗口的Packages中找到SenseAR XR Plugin目录
2、在目录上右键菜单中选择Show in Explorer
3、在打开的目录进入[email protected]\Samples~目录
4、将目录中的Example文件夹拖到Unity的Project窗口的Assets文件夹中。

具体流程看到下图:

Unity+SenseAR教程:用手势发射爱心【源码】_Unity_04

查看示例

导入之后呢,你会发现这里面有很多很多的场景,手势场景是这个GestureDetect

Unity+SenseAR教程:用手势发射爱心【源码】_手势识别_05

哇,还有那么多其他场景都是什么用呢?大智这几天会录制一个SenseAR全功能解析教程,记得关注哦(公众号:洪流学堂 b站:大智_Unity技术探路者

这个场景是没办法在电脑上运行的,只能发布到Android手机上运行。

发布手势示例

发布有以下几步:
1、确保安装好了Android发布的环境(JDK目前Unity已经内置了,Android SDK需要自行下载,可以使用Android Studio管理Android SDK),以及Unity的Android Support(推荐在Unity Hub中安装)。

Unity+SenseAR教程:用手势发射爱心【源码】_粒子效果_06

2、在Unity的Build Settings中将平台切换为Android。

Unity+SenseAR教程:用手势发射爱心【源码】_手势识别_07

3、配置工程的Player Settings。

  • Package Name修改一下,别是默认的那个就行,我这设置为com.Company.ShootLove
  • Mininum API Level设置为Android 7.0 API level 24

Unity+SenseAR教程:用手势发射爱心【源码】_粒子效果_08

4、 在手机上安装SenseAR2.3,下载地址是http://openar.sensetime.com/sdks可能需要先卸载旧版本:小米预装版本SenseAR在应用设置里面名称为ARServer,OPPO预装版本SenseAR的名字为ARUnit

Unity+SenseAR教程:用手势发射爱心【源码】_手势识别_09

5、将手机开启开发者模式,USB连接到电脑上

6、记得打开GestureDetect场景,点击Unity菜单栏File > Build and Run,选择一个存放apk的路径。

体验手势App

如果打开黑屏检查下是否安装了SenseAR2.3,下载地址是http://openar.sensetime.com/sdks

最开始要同意使用摄像头的权限。

Unity+SenseAR教程:用手势发射爱心【源码】_手势识别_10

SenseAR支持的手势有以下14种:

Unity+SenseAR教程:用手势发射爱心【源码】_AR_11

开发

好,到这呢,我们已经体验了一把SenseAR强大的手势识别的功能了,那如何用手势发射爱心呢?

我们决定用三个手势发射爱心:分别是gun,finger_heart(比心),iloveu三个。

好,回到Unity工程里面。看一下AR Camera上的ARStandGuesturePainter中的代码,所有手势相关的代码都是在这里面的。

Unity+SenseAR教程:用手势发射爱心【源码】_Unity_12

现在我们的思路就是判断出gun,finger_heart(比心),iloveu三个手势之后在界面显示爱心的特效。

1 做一个心的粒子效果

在AR Camera物体下创建一个粒子效果,这样粒子效果一会能显示在咱们的镜头中。粒子效果是可以在Scene和Game中预览的,最终效果在真机上也一致。

粒子效果的贴图用的是下面的这个白色的小心心(你可以直接下载使用),**为啥要用白色的呢?**因为这样可以在粒子系统里调它的颜色,五颜六色,随心所欲。如果你直接用个红色的心心,那就没办法叠加出所有的颜色了。

Unity+SenseAR教程:用手势发射爱心【源码】_粒子效果_13

下面就是你的舞台了,将这个粒子效果调到你满意为止。

大智审美缺陷党,调的效果如下:

Unity+SenseAR教程:用手势发射爱心【源码】_AR_14

2 改造脚本

首先在ARStandGuesturePainter脚本中添加一个public的成员变量,用于关联爱心的粒子特效。

public GameObject HeartParticles;

然后在SetGuestureInfo方法的最后添加下面几行:

if (guestureInfo.HandGestureType == ArHandGestureType.GUN ||
            guestureInfo.HandGestureType == ArHandGestureType.I_LOVE_YOU ||
            guestureInfo.HandGestureType == ArHandGestureType.FINGER_HEART)
        {
            HeartParticles.SetActive(true);
        }
        else
        {
            HeartParticles.SetActive(false);
        }

然后在Inspector上将粒子效果的物体赋上去,就OK啦。

3 发布真机

Unity+SenseAR教程:用手势发射爱心【源码】_SenseAR_15

更多探索

后面呢,大智还想做的更高级一些,可以根据指头的方向从指尖发射。大概思路如下,你可以和大智一起探索哦。

1、在ARStandGuesturePainter脚本的m_Points成员变量中获取到20个手指关节的位置。20个顶点与手指的位置关系如下图。

Unity+SenseAR教程:用手势发射爱心【源码】_粒子效果_16

2、根据位置计算出来手指的方向,在对应方向上播放粒子效果。

本教程源码及后续更新

由于源码后续会更新,就不直接打包传在这里了。
本工程的持续更新源码可以在洪流学堂公众号回复爱心获取。

大智这几天会录制一个SenseAR全功能解析教程,记得关注哦(公众号:洪流学堂 b站:大智_Unity技术探路者


好了,今天就絮絮叨叨到这里了,祝有情人终成眷属♥。
没讲清楚的地方欢迎评论。

我是大智,你的技术探路者,下次见!

别走!点赞收藏哦!

好,你可以走了。


标签:粒子,大智,SenseAR,Unity,源码,Android,手势
From: https://blog.51cto.com/u_5746184/6234166

相关文章

  • [独家放送]Unity2020规划预览,可视化编程又双叒叕来了!
    你好,我是你的技术探路者郑洪智,你可以叫我大智。欢迎一起进入2020年,在新的一年里Unity有什么大动作呢?本文带你速览你最关心的Unity2020的核心功能!你最可能关心的功能有哪些呢?Unity2019.3在哪里???(乱入)下面从四个方面来看Unity有哪些更新:核心功能和性能更多的DOTS(Data-OrientedTechSt......
  • 在线直播系统源码,实现在图片上涂鸦并记录涂鸦轨迹
    在线直播系统源码,实现在图片上涂鸦并记录涂鸦轨迹1.activity_main.xml界面 <?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"  xmlns:app="http://schemas.android.com/apk/res-au......
  • Spring理解及源码框架
    1、容器与Bean容器理解从这张图能看到重要容器有BeanFactoryConfigurableApplicationContext它们的关系是ConfigurableApplicationContext间接继承了ApplicationContext然后间接继承了BeanFactoryBeanFactory从侧面看到Spring有在用工厂模式。除此之外spring还用了单例模式、......
  • 详解八大排序(附动图和源码)
    目录......
  • Unity获取Material的属性名小坑
    最近在学习UntiyShader的使用,在获取UnityMaterial的属性名时遇到了一个小坑。如图我现在实现了一个云的效果的ShaderShader的属性名如下图红框所示: 当我们想用代码尝试获取属性名并修改时,问题出现了: 报错: 解决:查看shadergraph发现了问题,属性名原来与Shader中的......
  • 【Visual Leak Detector】核心源码剖析(VLD 1.0)
    说明使用VLD内存泄漏检测工具辅助开发时整理的学习笔记。本篇对VLD1.0源码做内存泄漏检测的思路进行剖析。同系列文章目录可见《内存泄漏检测工具》目录目录说明1.源码获取2.源码文件概览3.源码剖析3.1注册自定义AllocHook函数3.2存储调用堆栈信息3.3生成泄漏检测......
  • Semaphore源码分析
    1、Semaphore介绍计数信号量-Semaphore,常用来限制访问资源的线程数量。优点类似限流中的令牌桶算法,只有拿到信号量的线程才能执行,与令牌桶算法未拿到令牌不处理请求不同的是,在Semaphore中未拿到信号量的线程会阻塞等待,直到有某个线程释放了持有的信号量。2、Semaphore使用......
  • CountDownLatch源码分析
    1、CountDownLatch介绍CountDownLatch让一个或多个线程等待其他线程执行完成后再执行。在创建CountDownLatch对象时,必须指定线程数count,每当一个线程执行完成调用countDown()方法,线程数count减1,当count减到0时,await()方法就不再阻塞。2、CountDownLatch使用1importjava......
  • vue2源码-十六、异步组件
    异步组件Vue中异步组件的写法有很多,主要用作大的组件异步加载的markdown组件editor组件。就是先渲染一个注释标签,等组件加载完毕,最后再重新渲染forceUpdate(图片懒加载)使用异步组件会配合webpack原理:异步组件默认不会调用Vue.extend()方法所有Ctor上没有cid属性,没有cid属......
  • ubuntu2004 下源码安装boost
    ubuntu2004下源码安装boosthttps://www.aiuai.cn/aifarm1186.htmlhttps://www.boost.org/users/history/version_1_78_0.htmlhttps://cloud.tencent.com/developer/article/1804511https://stackoverflow.com/questions/12578499/how-to-install-boost-on-ubuntuboost版本在......