| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> 项目六 AR与减速机应用 -> 正文阅读 |
|
[游戏开发]项目六 AR与减速机应用 |
学习目标
项目描述 该项目讲解了减速机在AR中的展示方式,包括减速机动画的控制,与减速机的交互等。其中功能开发上用PLAYMAKER插件来完成。 任务一 项目素材准备
项目中用的unity版本时2018.3,打开Unity工程文件在Project Name中输入工程名称,在Location中选择存放的位置,如图所示。注意,项目名称以及文件存放路径中不要出现中文字符(中文状态下输入的文字以及符号等)。
PlayMaker插件需要我们导入到Unity中,在菜单栏Assets/Import Package/Custom Psckage导入插件, 在对话框里找到PlayMaker插件, 我们使用的是最新版本的PlayMakerv1.9.0p11,点击Import PlayMaker导入进来后在项目资源管理面板里Install文件夹下载, 双击上图图标加载载PlayMaker配置文件,加载完成后我们可以看见Assets文件夹下多了与PlayMaker相关的文件夹。说明安装成功。
被扫描的图片首先要准备一张底图作为图片的背景,我们这个案例中用到的是减速机,所以我们要把减速机的渲染图添加到底图上, 打开3DMAX减速机文件渲染出图片,保存PNG格式,如图。如果想把打开的模型文件材质变换下颜色可以打开材质编辑器,改变下材质球的漫反射颜色后赋予给模型。为了展示效果减速机的外部和内部颜色是不相同的,所以在同一个不可分割的模型上赋予两种材质是一个技术点。 在PS软件里打开底图文件, 在把3DMAX渲染的图片打开放入到底图上,设置好大小, 保存文件格式PNG,命名6-1, ?登陆Vuforia官网上传图片,点击“Add Target”, 上传完毕, 下载数据文件去顶保存路径和命名,并且导入到Unity中,
案例中涉及减速机动画包含分解和复原动作,那么这些动画需要我们在3DMAX中把它做好,制作动画方法在这里不做讲解,只查看减速机动画,如图所示。可以看见减速机动画总帧数在100帧。 3DMAX中控制动画播放的按钮都在这里,可以试着点击查看效果。 我们可以发现减速机帧数前50帧是分解动画,后50帧是复原动画, 导出减速机模型格式要求FBX,路径保存到新建的Unity工程里并命名“jiansuji”并对导出参数进行设置, 任务二 项目场景搭建
打开Unity工程我们发现工程里并没有相关的Vufoia文件,只有在导入下载的AR数据文件。这时候我们要创建AR Camera,创建完毕后我们会发现Vufoia相关文件一起加载进了工程文件里, 这是我们在场景资源管理面板下看见俩个Camera,删掉系统自带的使用AR Camera相机,并且要在Play Settings中找到XR Settings勾选Vufoia选项, 填写验证码
场景资源管理面板下添加ImageTarget,默认情况下ImageTarget组件自动添加扫描图片数据,
在3DMAX里制作的减速机动画导入到Unity后我们发现他的动画系统是Generic模式,把动画模式更改成Legacy模式, 下面我们要做的就是把减速机100帧的动画切割成两部分,一部分是分解动画50帧,另一部分是复合动画50帧。首先点击“+”号复制一套动画, 首先选中动画名称为Take 001的动画,之后再End参数中输入50,确认“Apply”,如图所示。 选中动画名称为Take 001(1)的动画,之后再Start参数中输入50,End参数中输入100确认“Apply”,如图所示。这样我们的动画设置就完成了。
把减速机模型拖拽到场景资源管理面板里,调整模型位置和大小, 模型的材质看着不美观,我们需要把材质添加反射效果,新建材质球,参数调节,如图所示。 把材质球添加到模型上,因为一个模型零件上材质有两种材质或多种,如果你直接把材质球拖拽到模型组件上那么所有模型材质都会更改,如图所示。注意观察红框里的材质参数,我们替换的材质是01-Default材质,那么就要把材质球放置到这个上。 由于减速机模型材质有几种,所以我们要创建多种不同颜色的材质球来达到我们想要的效果, 任务三 项目交互功能开发
从这节开始我们就要用到PlayMaker来制作交互,首先我们要熟悉它的使用。在Unity菜单栏中找到PlayMaker Editor ,把这个窗口拖放到资源管理面板旁边,如图所示。我们所有的交互功能都在这个窗口里面完成。 另外一个经常用到的窗口就是动作库,在菜单栏PlayMaker/Editor Windows/Action Browser,如图所示,把它放到属性面板旁边。这样我们的PlayMaker编辑器就完成了设置。
模型旋转功能是扫描出来减速机模型后我们可以用手指触控手机屏幕控制减速机旋转。在做这个功能之前我们首先要验证一下扫描图片是否出现模型,发布成安卓系统在手机上测试。在场景资源管理面板里创建控的GameObject物体,把控制物体旋转功能放到这个空物体上方便我们来控制, 添加状态机到GameObject上,如图所示。我们要在State 1中添加动作来控制减速机旋转。 手指触摸屏幕动作在Device中的Swipe Gesture Event,如图所示。把他添加到状态机里。 旋转功能我们设置左右旋转,在PlayMaker编辑器事件下面的添加事件里创建两个自定义事件一个是命名为“左”另一个命名为“右”。 在状态里添加自定义事件, Swipe Gesture Event: ?滑动手势事件 Min Swipe?Distance:最小滑动距离。触摸行进多长距离时被认为是在滑动。使用规格化距离 ( 例如 ,1= 屏幕对角线距离 )。一般来说这个距离应该是一个很小的数值。 Swipe Left?Event:向左滑动事件。当检测到向左滑动时发送的事件 。 Swipe Right?Event:向右滑动事件。当检测到向右滑动时发送的事件。 Swipe Up Event:向上滑动事件。当检测到向上滑动时发送的事件。 Swipe Down?Event:向下滑动事件。当检测到向下滑动时发送的事件。 PlayMaker编辑器右键创建新的状态机两个,并分别与自定义事件连接, 在状态机State 2中添加旋转功能动作Transform里的Rotate, Rotate里面参数添加, Rotate:旋转。绕着每个轴旋转一个游戏对象。 Game Object:游戏对象。需要旋转的游戏对象。 X?Angle: X轴度数。绕X轴的旋转度数。 Y Angle: Y轴度数。绕Y轴的旋转度数。 Z Angle: Z轴度数。绕Z轴的旋转度数。 Space: 空间。绕本地或者世界空间旋转。 Per Second:每秒。每秒旋转。根据输入的 Time.deltaTime 数字相乘。 左右方面的旋转角度需要我们用时间来控制,这样角度旋转完后事件在返回到状态机State 1中实现了反复,如图。在状态机State 3也按照状态机State 2中设置,但是要把旋转角度改成负数。这样就实现了左右旋转。 Wait:延时。 Time:时间。需要等待的时间。 Real Time:现实时间。忽略时间刻度。在游戏暂停的时候比较有用。
给物体添加碰撞器是为了让我们手指触发物体的时候起到事件发送的效果,没有触发器其功能不能实现。 选中减速机物体,如图。碰撞器的区域可能会有问题或大或小看情况调试合适位置。
模型分解动画是用手指触控减速机模型触发事件后播放分解动画,这个过程需要我们建立两个状态机,一个状态机里面放置触发动作,另一个放置播放动画动作, 这里我们要新建一个空物体,把空物体添加到状态机里, 在状态机“State 1”里添加动作“Touch Object Event”, 添加完“Touch Object Event”后我们会发现状态机里的动作出现了红色提示,这说明在Game Object参数里要添加目标物体并且目标物体还要有Colider组件。如图。添加减速机模型为目标物体。 右键为状态机添加完成“FINSHED”事件,在“Touch Object Event”动作事件的“Touche Began”添加“FINSHED”,如图。这样触发物体的事件就完成了,触发物体会把事件传输出去。 Touch Object Event: 触摸对象事件。当一个对象被触摸时发送事件 . ( 可选 ) 通过一个 fingerid 过滤器。 Game Object:游戏对象。用来检测触摸的游戏对象 。 Pick Distance:拾取距离。距离相机可拾取的游戏对象的距离。 Finger Id:手指 ID。只能检测到与手指 ID 匹配的触摸 , 也可以设置为 " 无 "。 Touch Began:触摸开始。在触摸开始时发送事件。 Touch Moved:触摸移动。在触摸移动时发送事件。 Touch?Stationary:触摸静止。在触摸静止时发送事件。 Touch Ended:触摸结束。在触摸结束时发送事件。 Touch Canceled:触摸取消。在触摸取消时发送事件。 Store Finger Id:存储手指 ID。存储触摸的手指ID。 Store Hit Point:存储接触点。存储对象被触摸时的世界位置。 Store Hit Normal:存储接触法线。存储对象被触摸时的表面法线向量。 在PlayMaker编辑器里右键添加状态机,如图。连接状态机“State 1”与“State 2”。 状态机“State 2”里添加播放动画的动作,如图。 Play Animation: 播放动画。在一个游戏对象上播放一个动画 . 注意 : 游戏对象必须具有一个动画组件。 Game Object:游戏对象。播放动画的游戏对象 . 注意 : 必须具有一个动画组件。 Anim Name:动画名称。要播放的动画的名称 . 使用浏览按钮在指定游戏对象中寻找动画。 Play Mode:播放模式。是否要停止所有当前正在播放动画 , 或仅仅是与该动画在同一图层上的动画。 Blend Time:混合时间。在动画之间交叉淡入淡出的时间 ( 以秒计 )。 Finish Event:结束事件。当动画结束播放时发送事件 . 注意 : 如果您使用默认的循环模式 , 有时动画从来就没有完成 , 这一事件也不会启动 . 解决方法 : 使用 ClampForever, 或从动画自身发送一二动画事件。 Stop On Exit:退出时停止。当退出节点时停止动画。 添加完“Play Animation”后我们会发现状态机里的动作出现了红色提示,这说明在Game Object参数里要添加目标物体并且目标物体还要有Animation组件。如图。添加减速机模型为目标物体。 添加减速机模型为目标物体,在Anim Name参数里添加该减速机动画名称,如图。这样减速机分解动画的控制方法就完成了。 在制作减速机模型复合动画的控制方法和上述方法一样,只不过要把分解的触发事件放进状态机“State 2”里。这是由于我们在开发该功能时首先触发模型应该播放分解动画再触发模型播放复合动画,如图。 为状态机“State 2”添加“FINSHED”事件并创建状态机“State 3”连接,如图。 在状态机“State 3”中添加“Play Animation”,参数上和分解动画相同,注意这次动画名称要添加复合动画,如图。 状态机“State 3”右键添加事件“FINSHED”并在“Play Animation”动作上FINISHED Event添加 事件“FINSHED”。此事件在于状态机“State 1”连接,如图。这样就完成了反复触发模型播放动画功能。 添加完动作。发布程序后在手机上测试。 |
|
|
上一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 11:32:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |