基于unity3d的手部模拟器的设计与实现毕业论文.docx
- 文档编号:10253878
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:28
- 大小:6.98MB
基于unity3d的手部模拟器的设计与实现毕业论文.docx
《基于unity3d的手部模拟器的设计与实现毕业论文.docx》由会员分享,可在线阅读,更多相关《基于unity3d的手部模拟器的设计与实现毕业论文.docx(28页珍藏版)》请在冰豆网上搜索。
基于unity3d的手部模拟器的设计与实现毕业论文
---文档均为word文档,下载后可直接编辑使用亦可打印---
摘要
随着互联网时代的到来,人们的生活方式逐渐走向多样化,其中游戏事业发展迅速,受到越来越多的年轻人的关注和热爱。
仿真模拟类游戏让玩家更真实的控制游戏中的人和物,通过各种细致的操作模拟动作与场景交互。
该类型的游戏不仅仅有趣可玩性高,更能让玩家体验到模仿现实的真实性。
Unity3D作为一款能够快速开发和上手的游戏开发引擎在市场上逐步升温。
本论文探究基于Unity3D的手部模拟器模拟类游戏的开发,这不仅仅是一款普普通通点击键盘鼠标交互的游戏,类似于市场上《模拟人生》,它是一款比《模拟人生》更细致,细致到手指头的游戏。
游戏难度适中,游戏场景设计多样化,游戏特有的物理效果能为用户带来更真实的操作体验。
现在玩家们玩多了各种大型射击游戏动作游戏,会选择更多这种类型而且能带来欢乐的游戏,因此,手部模拟器游戏拥有可观的发展前景。
本文主要描述了该游戏的开发原理,游戏的设计与实现以及游戏功能测试等。
为以后有相同想法的游戏的开发人员提供参考。
关键词:
Unity3;3D技术;手部模拟
Abstract
WiththeadventoftheInternetera,people'slifestyleisgraduallybecomingdiversified,amongwhichthegameindustryisdevelopingrapidly,andmoreandmoreyoungpeoplepayattentiontoandloveit.Simulationgamesletplayerscontrolpeopleandobjectsinthegamemorerealistically,andinteractwiththescenethroughvariousdetailedoperationsimulationactions.Thistypeofgameisnotonlyfunandplayable,butalsoallowsplayerstoexperiencetherealityofimitatingreality.
Unity3d,asagamedevelopmentenginethatcanbedevelopedandstartedquickly,isgraduallywarmingupinthemarket.Thispaperexploresthedevelopmentofhandsimulatorsimulationgamesbasedonunity3d,whichisnotonlyageneralgameofkeyboardandmouseinteraction,similarto"simulationlife"inthemarket,itisagamemoredetailedthan"simulationlife"andmeticuloustothefingers.Thedifficultyofthegameismoderate,thedesignofthegamesceneisdiversified,andtheuniquephysicaleffectofthegamecanbringmorerealoperationexperiencetotheuser.Nowplayersplaymanykindsoflarge-scaleshootinggameactiongames,willchoosemoreofthistypeandcanbringjoytothegame,sohandsimulatorgamehasaconsiderabledevelopmentprospect.Thispapermainlydescribesthedevelopmentprincipleofthegame,thedesignandimplementationofthegameandthefunctiontestofthegame.Forthefuturehavethesameideaofthegamedeveloperstoprovideareference.
Keywords:
Unity3D;3Dtechnology;handsimulator
第一章绪论
一.1选题的目的和意义
游戏行业日益高涨,游戏硬件的更新换代,游戏的种类也越来越多,绝大部分游戏走向更加真实震撼的效果,如使命召唤系列等各种震撼的特效和超高真实度的人物模型。
少数部分的游戏走向电竞这条道路,它们更加追求游戏的平衡性和团队合作性,更贴合大众。
极为少数的一部分游戏却走向那种注重新奇玩法的道路,它们不追求极致的画质,甚至你能看见在Steam上有火柴人打架都售价50以上,这种游戏有着丰富的想象力。
然而,这种游戏往往玩的是最开心的,不需要高配置的电脑,可以跟着朋友一起玩爆笑一整天。
在这极少数游戏中就有一种仿真模拟类游戏,如造桥模拟器、卡车模拟器等等这种类型游戏能勾起玩家的兴趣,更能陷入其中。
选择unity3d是因为可以让制作者更加轻松的创建玩家手部骨骼的动画、各种场景道具的三维模型。
正因unity3d可以实现多平台,我们才可以在以后推出PC端、手机端等各种平台的游戏实现,让大众在各种平台体验。
仿真模拟类游戏可以让人们在游戏中尽可能地真实的体验,而本款手部模拟器更加真实,细节到手的每一个骨骼每一个关节,真实的体验每一个场景,不需要长时间进行,并且有较高的娱乐性,非常适合大众在玩过各种大型游戏后放松一下。
一.2国内外研究现状
仿模拟类游戏的重心是仿真。
“仿”字代表着模仿模拟,根据真实世界而进行模仿,一切符合现实的构造,没有一点的虚构因素。
而“真”字则是真实的世界,越高的仿真度能带来的效果就越有意义,对我们的生活给予帮助。
相反的,仿真程度很低从而添加游戏乐趣则与模拟这个冲突,偏离这类型游戏的主题,得不偿失。
现在市面上主要的类型是训练类模拟游戏。
它对应着模拟。
而训练类则是模拟类游戏里最多的。
因为它门槛低,能够从生活中种种简单的活动中实现,例如垃圾分类、烹饪、画画等等。
现在有不少的教育机构采用这种游戏让学生们对学习更加有动力。
但是仿真度越高的则会变成一种训练器,体验这些游戏的就不是为了娱乐了。
而实更深层度的提高某些技能的水平,但实际上两种都是一样的。
模拟类的游戏好处已经收到许多用户的注意,有更多的游戏公司投资开发这类型的游戏。
仿真模拟类游戏更加的贴近生活和现实。
玩家在玩这类游戏的时候都会觉得是真实的,没有一丝异样,而且在游戏中发生的一切也是非常的生活性,仅有缺点就是不切实际的夸张,为了达到效果,某些小事情会被放大显得不太真实。
仿真模拟类游戏的到来让全世界的人对游戏的看法发生改变。
模拟游戏表明了游戏就是娱乐的这种说法是片面的,游戏是一把双刃的剑,有好的一面也有坏的一面,模拟类游戏正是可以让游戏与生活联系起来,相互的发挥各有的价值。
一.3论文组织结构
论文从最初构思来源于小学期的试用品,当时想做一个模拟类型的游戏,可是技术有限无法完成,现在结合了专业3D游戏开发资料,进行了一个仿真手部操作戏的设计制作,其中,具体介绍游戏的制作步骤,包括游戏的系统功能设计和一系列代码的编写。
论文分为七章,各章节细节安排如下:
第一部分:
绪论,主要讲述该毕业设计的制作背景、国内外对相关课题的研究现状和本设计的介绍;
第二部分:
介绍了本文制作游戏使用的各类开发工具和Unity3D的介绍;
第三部分:
详细介绍游戏的设计的基本思路;
第四部分:
游戏的功能实现;
第五部分:
游戏的界面功能实现;
第六部分:
运行游戏进行测试,打包封装;
第七部分:
结论以及今后的改进。
第二章开发工具介绍
二.1Unity3D游戏引擎
二.1.1Unity3D软件介绍
Unity3D是一款面对用户开发的游戏引擎。
它适用于2D和3D的游戏开发。
它有着完美的跨平台系统。
在PC端、安卓端和IOS端尤为显著。
它适用于制作小类型的游戏,它轻巧、快捷、功能强大,有各种接口。
它不仅仅是一个制作游戏的引擎,它还可以制作3D渲染场景图,也能搭载动画。
它有着一个良好的互动,独特的编辑界面,简单方便,能够与Windows平台和MacOS平台上进行互动。
它有着良好的视图分配,在制作过程中简洁分清设计者需要的编辑视图,还能自定义分布,符合各种开发者的需求。
它拥有着自己各种脚本语言进行编辑的常用环境,识别市面上常见的语言,例如:
C#、javascript等。
二.1.2API接口
Unity3D拥有十分丰富的API接口,可以完成这种接口完成各种各样的需求。
API是一种函数,预先定义的,可以帮助开发人员在不访问代码的情况下访问一组例程,还有了解内部的机制细节。
在U3D里,有一个非常完整的一套API函数的库存,开发者可以实现该项目的初始阶段是为了方便这些功能,能检测每个模块的是否有触发响应、离开触发相应、调出数据等等。
二.1.3物理引擎
在非特定游戏的基础上,物理效果是游戏开发的一大难点,也是游戏中关键的一部分,任何一款网络游戏的设计都需要一个符合实际物体特性的合理,这样才显得更加真实。
U3D则有着一套几乎完美的物理引擎,可以是物体的色彩亮度、渲染、平行光、点光源、色彩亮度、正常映射等,游戏材料可以给我们带来真实的视觉效果,宛如身临其境。
而在力的方面,U3D有着简洁简单的刚体编辑,只要不是过于困难的类型,我们只要改几项数据就可以完成一种真实的物理效果。
二.1.4Unity常用生命周期的函数
Unity3D游戏引擎不像常规的程序直接在Main函数入口运行,而是在内部实现了自己的生命周期事件。
通过对这些生命周期的事件进行写入,Unity内部就会不断地迭代这些生命周期函数。
下面按照脚本的执行顺序介绍游戏中比较常用的Unity事件函数。
Awake():
当游戏对象被初始化的时候调用,无论该对象是否已被激活。
Start():
在Awake事件后调用,但只有被激活的时候才能够执行。
Update():
游戏中的帧事件,因为游戏大部分都是按帧率来执行逻辑的。
FixedUpdate():
游戏的固定帧事件,基本同Update(),但该事件可由开发者去控制执行频率。
OnEnable():
Start事件调用之后,只有被激活时将执行。
OnDisable():
当游戏研究对象被禁止通过激活的时候会调用。
OnDestroy():
当游戏对象被销毁时执行。
Unity3D脚本将基本上是从基类继承MonoBehaviour。
一般不继承于MonoBehavior的类会用自己来写出了一些重要工具类。
通常来说,它在整个程序运行的过程中都是存在的,除非自己手动GC释放内存。
二.1.5GUI(图形用户界面)
Ugui,本项目的UI层是用UGUI进行开发,GUI的意思是图形用户界面。
而UGUI则是Unity的GUI系统的简称,UGUI能让开发者简单快捷的添加各种种类的界面部件,通过控件的创建同时实例化。
使你用少量的代码创建一个功能齐全的基本框架。
二.23DsMax软件
3dsmax是一个以电脑操作系统为基础的三维动画渲染和三维对象制作的软件,是当代模型制作最常用的建模平台。
它的前身是一个以dos操作系统为基础的3dstudio软件,软件的最初功能是制作游戏中的动画,到现在已经拓展到制作影视电影中的特效制作。
二.3C#开发语言
C#是一种开发语言,是由微软公司开发并运行在.net framework上,是一种面向对象的高级程序设计语言。
它跟java类似即是一种语言也是一种工具。
但它并不是跨平台的开发语言,由于mono的实现使得它能在Unity这种跨平台引擎上编写,它语法简单明了,能方便使用类库,在Unity上开发发C#为首要。
二.4VisualStudio2017
VisualStudio2017也就是VS2017,它是由微软公司推出的开发环境,它有着最新的集成开发环境,也带来了更快地为Android、iOS和Windows创建移动应用。
微软还在官网上强调了VisualStudio2017的其它主要方面的改进,声称可以为任意开发、任意app、任意平台提供“无与伦比的生产力”。
它也支持各种数据库。
第三章游戏设计
在模拟游戏中有很多种类型,游戏的名字就决定了游戏的核心侧重。
这款游戏的侧重点是手,整个游戏最基本都要有一双可控制的手和一些可交互的物品。
以下就讲述手和场景的如何设计。
游戏总体设计我根据文献中学到基本流程[][5]。
三.1手部设计
3.1.1手部的移动设计
在手的移动上必须满足几个点,一是能比较简单的操作最好是通过鼠标前后左右平移的方法实现手的移动,但这样就会遇到一个问题,手如何上下提高和下降。
鼠标不能高低移动,但鼠标上的按键很多,这里我选择用滚轮,我觉得滚轮的滚上滚下很适合手的上下升降。
二者是移动的距离要比较精确,幅度要小。
这里我选择检测鼠标XY轴的移动再乘一个速度,这个速度可控,可以达到比较精细的移动。
如图3-1。
图3-1控制手部移动的物体
三是手的合理关节,人的手很复杂,它有各种骨头和筋,每个移动都要各个部位协调完成,在游戏中也不例外,在玩家移动手时,连接手掌后的手臂手肘也应该接连运动。
在这种情况下很难通过代码方式限制角度。
在Animator中则有一个方法,IK的方法,如图3-2。
图3-2控制手部移动的物体
在玩家控制物体移动的同时,手会有绑定骨骼似的旋转拉伸。
当玩家控制的物体超过手所触及的距离,手也不会断开去跟随,而实在最大值附近停留。
3.1.2手部的抓取设计
在手的抓取上有几个必须的功能,一、是手手掌的握拳张开,能有单独的手指控制最好。
在选择上,我觉得动画机的控制最好,能控制单独控制手指,所有手指弯曲就是握拳的效果。
但是在这种方法不能准确与物体碰撞体交互,所以也准备了另外一种手的设计,运用ConfigurableJoint来控制各条手指的弯曲程度实现握拳张开,但是具体代码比较复杂,只能有简单的表现。
二、手以掌心为基点,玩家通过手掌手指来抓取物体而不是用手肘夹着或者手的拨动。
三、手的合理翻转抓取,在手的翻转上,有手腕的左右旋转上下翻转,都有着角度限制,而IK的方法则不能实现这种效果。
在旋转上我限制了角度,让手的旋转和翻转都有一个固定的限度,这样手就不会穿模或者模型撕裂不正常。
3.1.3抓取效果设计
抓取效果是一个很难的点,它既与物理效果有关也与碰撞有关,如果单纯用刚体碰撞通过手指卡死物体实现抓取,这样没有精确的物理数据会导致被抓物体的莫名弹飞,从而实现不成抓取效果。
与物体的碰撞,rigidbody很复杂,难以真实实现。
我就让它简单化,让手抓取效果换成IK跟随目标切换,让本来控制手移动的移动Cube,在Collier碰撞加上鼠标点击下,目标转换成抓取的地方,那样简单又少bug,如图3-3.
还有一种是用fixedjoint的方法,手指弯曲触碰到碰撞体的时候就会停止弯曲,并将触碰到的碰撞体与手指连接生产fixedjoint,松手的时候再删除fixedjoint,刚好有个能实现它项目例子。
图3-3控制手部移动的物体
三.2场景设计
3.2.1场景的选择
在这款游戏里,玩法是玩家对手的理解和操作,不需要控制人物移动或者道具拾取,在场景的选择上应该以手的操作为重点,这里我选择了钓鱼场景和汽车场景,钓鱼场景需要玩家对鱼竿鱼饵控制,钓鱼需要玩家对鱼竿控制要求很高,要精准抓到鱼竿的底端,还要旋转角度正握,其次还要玩家抓鱼饵挂钩和钓鱼上船,能让玩家对手的操控熟悉。
汽车场景的话更深一步的熟悉操控,汽车场景的重点是方向盘,玩家通过控制方向盘的旋转来控制车辆的左右行动,不仅仅是方向盘,还要玩家控制车辆的挡位。
3.2.2钓鱼场景的设计
在钓鱼的场景中,我更加注重玩家对鱼竿的控制,而不是钓多少鱼。
对鱼竿的控制大致是对手的抓取要求更高,所以我选择了用碰撞来抓,考虑到物理结构的复杂,我查阅了各种资料,决定用fixedjoint物理连接来实现,用ConfigurableJoint来控制手的弯曲程度,通过方法让碰撞体接触到物体的碰撞体后停止弯曲,达到抓住的感觉,再用fixedjoint来连接接触位置和物体之间,鱼饵和鱼竿的鱼钩之间也需要玩家合理的操作平移旋转双手才能做到,所以我觉得钓鱼场景能体验该手的功能性。
所用到的鱼饵和鱼竿如图3-4
图3-4鱼竿和鱼饵
3.2.3汽车场景的设计
在汽车场景里,我更注重玩家左右手的合理搭配,左手该做的事情就是控制好方向盘,右手则是要换挡,再抓取方向盘。
搭配很重要,汽车本身也大概根据现实的汽车,挡位打前只能走前,打后才能倒车。
方向盘方面我根据方向盘的转动角度来改变车轮的转动角度,因为技术的问题,不能写到真实方向盘那样打满两圈多,而是180度为尽头打满。
汽车系统有网上插件,只要改好几项参数再改代码就能实现手部控制汽车移动。
三.3鱼竿和汽车的设计
3.3.1鱼竿的设计
在钓鱼场景里关键的是钓鱼的鱼竿,鱼竿的基本功能要有杆体、钓鱼线和鱼钩,如果可以的话还能加上控制钓鱼线伸长缩短的轮子。
考虑到精确游玩的问题,轮子没有添加,而实要玩家通过抬高钓鱼竿的方式来钓鱼。
杆体上要有一个可以与玩家手接触碰撞的检测,可以让手握住抓的地方。
单纯使用rigidbody不行,会因为刚体穿过而让鱼竿莫名击飞,这时我运用了网上手部关节的例子让碰撞的手指与物体进行连接,达到抓取不掉的效果。
鱼线方面则是用网上带的绳子系统,经过调试,线已经比较接近能用的程度,可以达到不断不穿模的状态,但还是有点莫名的晃动。
鱼钩则更简单,放一个可以与鱼饵和鱼交互的物体碰撞交互。
3.3.2汽车的设计
汽车场景里关键的是汽车,在这款游戏中有一个注意的点,就是不能让手部模拟器变成一个汽车模拟器,所以汽车的功能不能太精细,也不能太简陋。
我保留了汽车的行驶功能,在行驶功能上添加了方向盘和自动杆的功能。
方向盘是灵魂,玩家通过方向盘控制前轮实现转弯,通过自动杆实现前进倒退。
如图3-5
图3-5方向盘
三.4游戏界面设计
场景1为菜单界面,菜单界面包括汽车场景开始,钓鱼场景开始和退出键,均使用UGUI制作。
钓鱼场景、汽车场景开始按钮:
用来进入钓鱼场景,即进入游戏主界面。
当通过鼠标按下该按钮,就可以载入所要进行的游戏。
玩家把鼠标移动到按钮上方或移出时,按钮会有相应的颜色状态变化。
退出按钮:
用来退出游戏。
三.5游戏操控设计
手的操控有很多,例如五只手指的弯曲、手的移动和手腕部位的旋转。
考虑到按键过多的问题,应该设计的简单一点,具体操控如下表3-6。
表3-6游戏操控表
按钮
表现
备注
适用场景
按键A
食指弯曲
点击或长按
钓鱼场景
按键S
中指弯曲
点击或长按
钓鱼场景
按键D
无名指弯曲
点击或长按
钓鱼场景
按键F
尾指弯曲
点击或长按
钓鱼场景
空格
大拇指弯曲
点击或长按
钓鱼场景
鼠标移动
手的XZ轴移动
滑动
钓鱼场景/汽车场景
滚轮
手的Y轴移动
滑动
钓鱼场景/汽车场景
右键+鼠标移动
手腕的旋转
右键长按滑动鼠标
钓鱼场景
中键+鼠标移动
手腕的旋转
中键长按滑动鼠标
汽车场景
按键W
汽车前进
长按
汽车场景
按键S
汽车倒退
长按
汽车场景
空格
汽车刹车
长按
汽车场景
第四章游戏实现
首这章讲的是如何实现这款游戏,通过上述的游戏设计,重点是手的实现,其次是场景有关的实现,下述重点描述的是是手的移动、抓取动画和抓取效果,其次描述的是场景的实现,包括其中鱼竿和汽车的实现。
四.1手部的实现
四.1.1导入两种手部模型
首第一种用动画控制的手部模型,如图4-1,在游戏中体现的样子是图4-2,该模型是我从网上找的,手的操控逻辑是我自己写的,该角色模型上挂着动画控制脚本、左右手的旋转脚本、左右手的移动脚本和头部的跟随脚本。
他的整条手臂会合理的进行移动,受骨骼的影响显得真实。
手臂的移动主要以IK的方式进行移动调整,部分代码如下:
1.public Transform Righttarget;
2.public Transform Lefttarget;
3.public Animator animator;
4.private void OnAnimatorIK(int layerIndex)
5.{
6.
7. //设置右手谷歌的权重,0-1,可自行改变查看效果
8. animator.SetIKPositionWeight(AvatarIKGoal.RightHand, 1f);
9. animator.SetIKRotationWeight(AvatarIKGoal.RightHand, 1f);
10. //设置右手骨骼的ik目标为胶囊体的坐标和旋转
11. animator.SetIKPosition(AvatarIKGoal.RightHand, Righttarget.position);
12. animator.SetIKRotation(AvatarIKGoal.RightHand, Righttarget.rotation);
13. //设置左手谷歌的权重,0-1,可自行改变查看效果
14. animator.SetIKPositionWeight(AvatarIKGoal.LeftHand, 1f);
15. animator.SetIKRotationWeight(AvatarIKGoal.LeftHand, 1f);
16. //设置左手骨骼的ik目标为胶囊体的坐标和旋转
17. animator.SetIKPosition(AvatarIKGoal.LeftHand, Lefttarget.position);
18. animator.SetIKRotation(AvatarIKGoal.LeftHand, Lefttarget.rotation);
19.}
手指手掌的弯曲则用动画控制,加入AvatarMask来限制部分部位进行动画,设置好骨骼权重使得整个过程合理。
具体Animator如图4-1
图4-1人物模型
图4-2游戏效果
第二种是在网上找的模拟器,他的好处是通过物理进行操控的,显得抓取物体会更加真实更加容易操作,不好地方是它的项目已经是很多年以前,代码已经弃用了使得运用上比较困难。
游戏里如下图4-3,如图所示,他只有两条手臂,原理上可以转移到躯体上,但是过程比较复杂就没有转移,只能这样用着了。
他的是用ConfigurableJoint来进行抓取物体。
图4-3游戏效果
四.1.2两种手部移动的实现
两种手是跟随物体移动,我们主要控制隐形的物体,让该物体进行移动或者旋转从而实现手的跟随移动旋转。
个别手的代码如下:
1.void HandHorizontal()
2.{
3. //float Ax = A.tra
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 unity3d 模拟器 设计 实现 毕业论文