欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    基于unity3d的手部模拟器的设计与实现_梁浩能(改3).doc

    • 资源ID:96763503       资源大小:20.12MB        全文页数:33页
    • 资源格式: DOC        下载积分:40金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要40金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于unity3d的手部模拟器的设计与实现_梁浩能(改3).doc

    本科毕业设计(论文) 基于Unity3d的手部模拟器的设计与实现Design and Implementation of Hand Simulator Based on Unity3D 院 (系)计算机系专 业软件工程班 级二班学 号16210120231学生姓名梁浩能指导教师王千秋提交日期2020年4月16日5内容摘要随着互联网时代的到来,人们的生活方式逐渐走向多样化,其中游戏事业发展迅速,受到越来越多的年轻人的关注和热爱。仿真模拟类游戏让玩家更真实的控制游戏中的人和物,通过各种细致的操作模拟动作与场景交互。该类型的游戏不仅仅有趣可玩性高,更能让玩家体验到模仿现实的真实性。Unity3D作为一款能够快速开发和上手的游戏开发引擎在市场上逐步升温。本论文探究基于Unity3D的手部模拟器模拟类游戏的开发,这不仅仅是一款普普通通点击键盘鼠标交互的游戏,类似于市场上模拟人生,它是一款比模拟人生更细致,细致到手指头的游戏。游戏难度适中,游戏场景设计多样化,游戏特有的物理效果能为用户带来更真实的操作体验。现在玩家们玩多了各种大型射击游戏动作游戏,会选择更多这种类型而且能带来欢乐的游戏,因此,手部模拟器游戏拥有可观的发展前景。本文主要描述了该游戏的开发原理,游戏的设计与实现以及游戏功能测试等。为以后有相同想法的游戏的开发人员提供参考。关键词:Unity3;3D技术;手部模拟AbstractWith the advent of the Internet era, people's life style is gradually becoming diversified, among which the game industry is developing rapidly, and more and more young people pay attention to and love it. Simulation games let players control people and objects in the game more realistically, and interact with the scene through various detailed operation simulation actions. This type of game is not only fun and playable, but also allows players to experience the reality of imitating reality.Unity3d, as a game development engine that can be developed and started quickly, is gradually warming up in the market. This paper explores the development of hand simulator simulation games based on unity3d, which is not only a general game of keyboard and mouse interaction, similar to "simulation life" in the market, it is a game more detailed than "simulation life" and meticulous to the fingers. The difficulty of the game is moderate, the design of the game scene is diversified, and the unique physical effect of the game can bring more real operation experience to the user. Now players play many kinds of large-scale shooting game action games, will choose more of this type and can bring joy to the game, so hand simulator game has a considerable development prospect. This paper mainly describes the development principle of the game, the design and implementation of the game and the function test of the game. For the future have the same idea of the game developers to provide a reference.Keywords:Unity3D;3D technology;hand simulator目录第一章绪论11.1选题的目的和意义11.2国内外研究现状11.3论文组织结构2第二章开发工具介绍32.1Unity3D游戏引擎32.1.1Unity3D软件介绍32.1.2API接口32.1.3物理引擎32.1.4Unity常用生命周期的函数42.1.5GUI(图形用户界面)42.23Ds Max软件42.3C#开发语言42.4Visual Studio 20175第三章游戏设计63.1手部设计63.1.1 手部的移动设计63.1.2 手部的抓取设计73.1.3 抓取的效果设计83.2场景设计93.2.1 场景的选择93.2.2 钓鱼场景的设计93.2.3 汽车场景的设计103.3鱼竿和汽车的设计103.3.1 鱼竿的设计103.1.1 汽车的设计103.3游戏界面设计113.4游戏操控设计11第四章游戏实现134.1手部的实现134.1.1 导入两种手部模型134.1.2 两种手部移动的实现154.1.3 两种手部抓取动画的实现164.1.4 两种手部手指抓取效果的实现194.2场景的实现204.2.1 钓鱼场景的实现214.2.2 汽车场景的实现214.4钓鱼场景鱼竿的实现224.5汽车场景汽车的实现224.6摄像机位置的实现24第五章游戏测试25第六章总结26参考文献27致谢28广东东软学院本科毕业设计(论文)第一章 绪论1.1 选题的目的和意义游戏行业日益高涨,游戏硬件的更新换代,游戏的种类也越来越多,绝大部分游戏走向更加真实震撼的效果,如使命召唤系列等各种震撼的特效和超高真实度的人物模型。少数部分的游戏走向电竞这条道路,它们更加追求游戏的平衡性和团队合作性,更贴合大众。极为少数的一部分游戏却走向那种注重新奇玩法的道路,它们不追求极致的画质,甚至你能看见在Steam上有火柴人打架都售价50以上,这种游戏有着丰富的想象力。然而,这种游戏往往玩的是最开心的,不需要高配置的电脑,可以跟着朋友一起玩爆笑一整天。在这极少数游戏中就有一种仿真模拟类游戏,如造桥模拟器、卡车模拟器等等这种类型游戏能勾起玩家的兴趣,更能陷入其中。选择unity3d是因为可以让制作者更加轻松的创建玩家手部骨骼的动画、各种场景道具的三维模型。正因unity3d可以实现多平台,我们才可以在以后推出PC端、手机端等各种平台的游戏实现,让大众在各种平台体验。仿真模拟类游戏可以让人们在游戏中尽可能地真实的体验,而本款手部模拟器更加真实,细节到手的每一个骨骼每一个关节,真实的体验每一个场景,不需要长时间进行,并且有较高的娱乐性,非常适合大众在玩过各种大型游戏后放松一下。1.2 国内外研究现状仿模拟类游戏的重心是仿真。“仿”字代表着模仿模拟,根据真实世界而进行模仿,一切符合现实的构造,没有一点的虚构因素。而“真”字则是真实的世界,越高的仿真度能带来的效果就越有意义,对我们的生活给予帮助。相反的,仿真程度很低从而添加游戏乐趣则与模拟这个冲突,偏离这类型游戏的主题,得不偿失。现在市面上主要的类型是训练类模拟游戏。它对应着模拟。而训练类则是模拟类游戏里最多的。因为它门槛低,能够从生活中种种简单的活动中实现,例如垃圾分类、烹饪、画画等等。现在有不少的教育机构采用这种游戏让学生们对学习更加有动力。但是仿真度越高的则会变成一种训练器,体验这些游戏的就不是为了娱乐了。而实更深层度的提高某些技能的水平,但实际上两种都是一样的。模拟类的游戏好处已经收到许多用户的注意,有更多的游戏公司投资开发这类型的游戏。仿真模拟类游戏更加的贴近生活和现实。玩家在玩这类游戏的时候都会觉得是真实的,没有一丝异样,而且在游戏中发生的一切也是非常的生活性,仅有缺点就是不切实际的夸张,为了达到效果,某些小事情会被放大显得不太真实。仿真模拟类游戏的到来让全世界的人对游戏的看法发生改变。模拟游戏表明了游戏就是娱乐的这种说法是片面的,游戏是一把双刃的剑,有好的一面也有坏的一面,模拟类游戏正是可以让游戏与生活联系起来,相互的发挥各有的价值。1.3 论文组织结构 论文从最初构思来源于小学期的试用品,当时想做一个模拟类型的游戏,可是技术有限无法完成,现在结合了专业3D游戏开发资料,进行了一个仿真手部操作戏的设计制作,其中,具体介绍游戏的制作步骤,包括游戏的系统功能设计和一系列代码的编写。论文分为七章,各章节细节安排如下: 第一部分:绪论,主要讲述该毕业设计的制作背景、国内外对相关课题的研究现状和本设计的介绍; 第二部分:介绍了本文制作游戏使用的各类开发工具和Unity3D的介绍;第三部分:详细介绍游戏的设计的基本思路;第四部分:游戏的功能实现;第五部分:游戏的界面功能实现; 第六部分:运行游戏进行测试,打包封装;第七部分:结论以及今后的改进。第二章 开发工具介绍2.1 Unity3D游戏引擎2.1.1 Unity3D软件介绍Unity3D是一款面对用户开发的游戏引擎。它适用于2D和3D的游戏开发。它有着完美的跨平台系统。在PC端、安卓端和IOS端尤为显著。它适用于制作小类型的游戏,它轻巧、快捷、功能强大,有各种接口。它不仅仅是一个制作游戏的引擎,它还可以制作3D渲染场景图,也能搭载动画。它有着一个良好的互动,独特的编辑界面,简单方便,能够与Windows平台和Mac OS平台上进行互动。它有着良好的视图分配,在制作过程中简洁分清设计者需要的编辑视图,还能自定义分布,符合各种开发者的需求。它拥有着自己各种脚本语言进行编辑的常用环境,识别市面上常见的语言,例如:C#、javascript等。2.1.2 API接口Unity3D拥有十分丰富的API接口,可以完成这种接口完成各种各样的需求。API是一种函数,预先定义的,可以帮助开发人员在不访问代码的情况下访问一组例程,还有了解内部的机制细节。在U3D里,有一个非常完整的一套API函数的库存,开发者可以实现该项目的初始阶段是为了方便这些功能,能检测每个模块的是否有触发响应、离开触发相应、调出数据等等。2.1.3 物理引擎在非特定游戏的基础上,物理效果是游戏开发的一大难点,也是游戏中关键的一部分,任何一款网络游戏的设计都需要一个符合实际物体特性的合理,这样才显得更加真实。U3D则有着一套几乎完美的物理引擎,可以是物体的色彩亮度、渲染、平行光、点光源、色彩亮度、正常映射等,游戏材料可以给我们带来真实的视觉效果,宛如身临其境。而在力的方面,U3D有着简洁简单的刚体编辑,只要不是过于困难的类型,我们只要改几项数据就可以完成一种真实的物理效果。2.1.4 Unity常用生命周期的函数Unity3D游戏引擎不像常规的程序直接在Main函数入口运行,而是在内部实现了自己的生命周期事件。通过对这些生命周期的事件进行写入,Unity内部就会不断地迭代这些生命周期函数。下面按照脚本的执行顺序介绍游戏中比较常用的Unity事件函数。Awake():当游戏对象被初始化的时候调用,无论该对象是否已被激活。Start():在Awake事件后调用,但只有被激活的时候才能够执行。Update():游戏中的帧事件,因为游戏大部分都是按帧率来执行逻辑的。FixedUpdate():游戏的固定帧事件,基本同Update(),但该事件可由开发者去控制执行频率。OnEnable():Start事件调用之后,只有被激活时将执行。OnDisable():当游戏研究对象被禁止通过激活的时候会调用。OnDestroy():当游戏对象被销毁时执行。Unity3D脚本将基本上是从基类继承MonoBehaviour。一般不继承于MonoBehavior的类会用自己来写出了一些重要工具类。通常来说,它在整个程序运行的过程中都是存在的,除非自己手动GC释放内存。2.1.5 GUI(图形用户界面)Ugui,本项目的UI层是用UGUI进行开发,GUI的意思是图形用户界面。而UGUI则是Unity的GUI系统的简称,UGUI能让开发者简单快捷的添加各种种类的界面部件,通过控件的创建同时实例化。使你用少量的代码创建一个功能齐全的基本框架。2.2 3Ds Max软件3dsmax是一个以电脑操作系统为基础的三维动画渲染和三维对象制作的软件,是当代模型制作最常用的建模平台。它的前身是一个以dos操作系统为基础的3dstudio软件,软件的最初功能是制作游戏中的动画,到现在已经拓展到制作影视电影中的特效制作。2.3 C#开发语言C#是一种开发语言,是由微软公司开发并运行在.net framework上,是一种面向对象的高级程序设计语言。它跟java类似即是一种语言也是一种工具。但它并不是跨平台的开发语言,由于mono的实现使得它能在Unity这种跨平台引擎上编写,它语法简单明了,能方便使用类库,在Unity上开发发C#为首要。2.4 Visual Studio 2017VisualStudio2017也就是VS2017,它是由微软公司推出的开发环境,它有着最新的集成开发环境,也带来了更快地为 Android、iOS和Windows创建移动应用。微软还在官网上强调了Visual Studio 2017的其它主要方面的改进,声称可以为任意开发、任意 app、任意平台提供“无与伦比的生产力”。它也支持各种数据库。第三章 游戏设计在模拟游戏中有很多种类型,游戏的名字就决定了游戏的核心侧重。这款游戏的侧重点是手,整个游戏最基本都要有一双可控制的手和一些可交互的物品。以下就讲述手和场景的如何设计。游戏总体设计我根据文献中学到基本流程。3.1 手部设计 3.1.1手部的移动设计在手的移动上必须满足几个点,一是能比较简单的操作最好是通过鼠标前后左右平移的方法实现手的移动,但这样就会遇到一个问题,手如何上下提高和下降。鼠标不能高低移动,但鼠标上的按键很多,这里我选择用滚轮,我觉得滚轮的滚上滚下很适合手的上下升降。二者是移动的距离要比较精确,幅度要小。这里我选择检测鼠标XY轴的移动再乘一个速度,这个速度可控,可以达到比较精细的移动。如图3-1。图3-1 控制手部移动的物体三是手的合理关节,人的手很复杂,它有各种骨头和筋,每个移动都要各个部位协调完成,在游戏中也不例外,在玩家移动手时,连接手掌后的手臂手肘也应该接连运动。在这种情况下很难通过代码方式限制角度。在Animator中则有一个方法,IK的方法,如图3-2。图3-2 控制手部移动的物体在玩家控制物体移动的同时,手会有绑定骨骼似的旋转拉伸。当玩家控制的物体超过手所触及的距离,手也不会断开去跟随,而实在最大值附近停留。3.1.2手部的抓取设计 在手的抓取上有几个必须的功能,一、是手手掌的握拳张开,能有单独的手指控制最好。在选择上,我觉得动画机的控制最好,能控制单独控制手指,所有手指弯曲就是握拳的效果。但是在这种方法不能准确与物体碰撞体交互,所以也准备了另外一种手的设计,运用Configurable Joint来控制各条手指的弯曲程度实现握拳张开,但是具体代码比较复杂,只能有简单的表现。二、手以掌心为基点,玩家通过手掌手指来抓取物体而不是用手肘夹着或者手的拨动。三、手的合理翻转抓取,在手的翻转上,有手腕的左右旋转上下翻转,都有着角度限制,而IK的方法则不能实现这种效果。在旋转上我限制了角度,让手的旋转和翻转都有一个固定的限度,这样手就不会穿模或者模型撕裂不正常。 3.1.3抓取效果设计抓取效果是一个很难的点,它既与物理效果有关也与碰撞有关,如果单纯用刚体碰撞通过手指卡死物体实现抓取,这样没有精确的物理数据会导致被抓物体的莫名弹飞,从而实现不成抓取效果。与物体的碰撞,rigidbody很复杂,难以真实实现。我就让它简单化,让手抓取效果换成IK跟随目标切换,让本来控制手移动的移动Cube,在Collier碰撞加上鼠标点击下,目标转换成抓取的地方,那样简单又少bug,如图3-3.还有一种是用fixed joint的方法,手指弯曲触碰到碰撞体的时候就会停止弯曲,并将触碰到的碰撞体与手指连接生产fixed joint,松手的时候再删除fixed joint,刚好有个能实现它项目例子。图3-3 控制手部移动的物体3.2 场景设计3.2.1场景的选择在这款游戏里,玩法是玩家对手的理解和操作,不需要控制人物移动或者道具拾取,在场景的选择上应该以手的操作为重点,这里我选择了钓鱼场景和汽车场景,钓鱼场景需要玩家对鱼竿鱼饵控制,钓鱼需要玩家对鱼竿控制要求很高,要精准抓到鱼竿的底端,还要旋转角度正握,其次还要玩家抓鱼饵挂钩和钓鱼上船,能让玩家对手的操控熟悉。汽车场景的话更深一步的熟悉操控,汽车场景的重点是方向盘,玩家通过控制方向盘的旋转来控制车辆的左右行动,不仅仅是方向盘,还要玩家控制车辆的挡位。3.2.2钓鱼场景的设计在钓鱼的场景中,我更加注重玩家对鱼竿的控制,而不是钓多少鱼。对鱼竿的控制大致是对手的抓取要求更高,所以我选择了用碰撞来抓,考虑到物理结构的复杂,我查阅了各种资料,决定用fixed joint物理连接来实现,用Configurable Joint来控制手的弯曲程度,通过方法让碰撞体接触到物体的碰撞体后停止弯曲,达到抓住的感觉,再用fixed joint来连接接触位置和物体之间,鱼饵和鱼竿的鱼钩之间也需要玩家合理的操作平移旋转双手才能做到,所以我觉得钓鱼场景能体验该手的功能性。所用到的鱼饵和鱼竿如图3-4图3-4 鱼竿和鱼饵3.2.3汽车场景的设计在汽车场景里,我更注重玩家左右手的合理搭配,左手该做的事情就是控制好方向盘,右手则是要换挡,再抓取方向盘。搭配很重要,汽车本身也大概根据现实的汽车,挡位打前只能走前,打后才能倒车。方向盘方面我根据方向盘的转动角度来改变车轮的转动角度,因为技术的问题,不能写到真实方向盘那样打满两圈多,而是180度为尽头打满。汽车系统有网上插件,只要改好几项参数再改代码就能实现手部控制汽车移动。3.3 鱼竿和汽车的设计3.3.1鱼竿的设计在钓鱼场景里关键的是钓鱼的鱼竿,鱼竿的基本功能要有杆体、钓鱼线和鱼钩,如果可以的话还能加上控制钓鱼线伸长缩短的轮子。考虑到精确游玩的问题,轮子没有添加,而实要玩家通过抬高钓鱼竿的方式来钓鱼。杆体上要有一个可以与玩家手接触碰撞的检测,可以让手握住抓的地方。单纯使用rigidbody不行,会因为刚体穿过而让鱼竿莫名击飞,这时我运用了网上手部关节的例子让碰撞的手指与物体进行连接,达到抓取不掉的效果。鱼线方面则是用网上带的绳子系统,经过调试,线已经比较接近能用的程度,可以达到不断不穿模的状态,但还是有点莫名的晃动。鱼钩则更简单,放一个可以与鱼饵和鱼交互的物体碰撞交互。3.3.2汽车的设计汽车场景里关键的是汽车,在这款游戏中有一个注意的点,就是不能让手部模拟器变成一个汽车模拟器,所以汽车的功能不能太精细,也不能太简陋。我保留了汽车的行驶功能,在行驶功能上添加了方向盘和自动杆的功能。方向盘是灵魂,玩家通过方向盘控制前轮实现转弯,通过自动杆实现前进倒退。如图3-5图3-5 方向盘3.4 游戏界面设计场景1为菜单界面,菜单界面包括汽车场景开始,钓鱼场景开始和退出键,均使用UGUI制作。钓鱼场景、汽车场景开始按钮:用来进入钓鱼场景,即进入游戏主界面。当通过鼠标按下该按钮,就可以载入所要进行的游戏。玩家把鼠标移动到按钮上方或移出时,按钮会有相应的颜色状态变化。退出按钮:用来退出游戏。3.5 游戏操控设计 手的操控有很多,例如五只手指的弯曲、手的移动和手腕部位的旋转。考虑到按键过多的问题,应该设计的简单一点,具体操控如下表3-6。表3-6游戏操控表按钮表现备注适用场景按键A食指弯曲点击或长按钓鱼场景按键S中指弯曲点击或长按钓鱼场景按键D无名指弯曲点击或长按钓鱼场景按键F尾指弯曲点击或长按钓鱼场景空格大拇指弯曲点击或长按钓鱼场景鼠标移动手的XZ轴移动滑动钓鱼场景/汽车场景滚轮手的Y轴移动滑动钓鱼场景/汽车场景右键+鼠标移动手腕的旋转右键长按滑动鼠标钓鱼场景中键+鼠标移动手腕的旋转中键长按滑动鼠标汽车场景按键W汽车前进长按汽车场景按键S汽车倒退长按汽车场景空格汽车刹车长按汽车场景第四章 游戏实现首这章讲的是如何实现这款游戏,通过上述的游戏设计,重点是手的实现,其次是场景有关的实现,下述重点描述的是是手的移动、抓取动画和抓取效果,其次描述的是场景的实现,包括其中鱼竿和汽车的实现。4.1 手部的实现 4.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.   手指手掌的弯曲则用动画控制,加入Avatar Mask来限制部分部位进行动画,设置好骨骼权重使得整个过程合理。具体Animator如图4-1图4-1 人物模型图4-2 游戏效果第二种是在网上找的模拟器,他的好处是通过物理进行操控的,显得抓取物体会更加真实更加容易操作,不好地方是它的项目已经是很多年以前,代码已经弃用了使得运用上比较困难。游戏里如下图4-3,如图所示,他只有两条手臂,原理上可以转移到躯体上,但是过程比较复杂就没有转移,只能这样用着了。他的是用Configurable Joint 来进行抓取物体。图4-3 游戏效果4.1.2 两种手部移动的实现两种手是跟随物体移动,我们主要控制隐形的物体,让该物体进行移动或者旋转从而实现手的跟随移动旋转。个别手的代码如下:1. void HandHorizontal()  2.   3.     /float Ax = A.transform.position.x;  4.     /float Az = A.transform.position.z;  5.     float mouseX = Input.GetAxis("Mouse X") * moveSpeed;  6.     float mouseY = Input.GetAxis("Mouse Y") * moveSpeed;  7.     Vector3 movent = new Vector3(mouseX, 0, mouseY);  8.     transform.Translate(movent * moveSpeed * Time.deltaTime);  9.   10. void HandVertical()  11.   12.     float Vertical = 0.5f;  13.   14.     if (Input.GetAxis("Mouse ScrollWheel") > 0)  15.       16.         Vector3 vertical = new Vector3(0, Vertical, 0);  17.         transform.Translate(vertical * moveSpeed * Time.deltaTime);  18.       19.     /Zoom in  20.     if (Input.GetAxis("Mouse ScrollWheel") < 0)  21.       22.         Vector3 vertical = new Vector3(0, -Vertical, 0);  23.         transform.Translate(vertical * moveSpeed * Time.deltaTime);  24.       25.   26. void Cushion()  27.   28.     float Vertical = 0.1f;  29.     Vector3 vertical = new Vector3(0, -Vertical, 0);  30.     transform.Translate(vertical * VerticalSpeed * Time.deltaTime);  31.     return;  32.   33. void Rotate()  34.   35.     if (Input.GetMouseButton(1)  36.       37.         float mouseX = Input.GetAxis("Mouse X") * moveSpeed;  38.         Vector3 _movent = new Vector3(mouseX, 0, 0);  39.         rotate.transform.Rotate(_movent * Time.deltaTime * RotateSpeed);  40.       途中我们用键盘左边的Shift键来切换左右手,玩家只能同时控制一只手移动。当正在控制任意一只手的时候,代码就会实时监控场景里的移动cube,通过检测鼠标的前后左右移动实现cube的前后左右的移动,让模型的手通过IK跟cube移动,从而实现手的移动效果。同理,手的上下升降为检测鼠标滑轮的值,判断手的升降。手腕翻转则是通过点击右键开始检测鼠标的前后左右滑动的值改变cube的翻转,在加上角度的限制,从而实现手腕的翻转。4.1.3 两种手部手指抓取动画的实现第一种手的抓取动画机Animator,因为考虑到开车操作问题,真实上用不到这么复杂,已经减去手指的单独行动,演变成只能握拳和展开。第二种手的抓法不是用动画表现得,通过我的观察和实验,是通过Configurable Joint里面带的方法实现的,具体也说不清楚。根据动画文献了解基本实现。部分控制代码如下:1. void RightHand()  2.       3.         if (Input.GetMouseButtonDown(0)  4.           5.             Righthand.SetFloat("RightAll", 2f);  6.             Click = true;  7.           8.         if (Input.GetMouseButtonUp(0)  9.           10.             Righthand.SetFloat("RightAll", 0f);  11.             Righthand.SetFloat("RFinger1", 0f);  12.             Righthand.SetFloat("RFinger2", 0f);  13.             Righthand.SetFloat("RFinger3", 0f);  14.             Righthand.SetFloat("RFinger4", 0f);  15.             Righthand.SetFloat("RFinger5", 0f);  16.             Click = false;  17.           18.       19.     void LeftHand()  20.       21.         if (Input.GetMouseButtonDown(0)  22.           23.             Righthand.SetFloat("All", 2f);  24.           25.         if (Input.GetMouseButtonUp(0)  26.           27.             Righthand.SetFloat("All", 0f);  28.           29.       第动画机如图4-4,比较繁琐。图4-4 animator状态另外一种方法则比较简单,如图4-5,这种方法比较简单,角色关节(character joint):可以模拟角色的骨骼关节。通过控制各个关节位碰撞体的角度实现手的弯曲,有现成的模拟器参照。关节是一个游戏组件,在导航菜单栏中选择componentphysics然后从中选择一种关节组件,即可完成关节组件的添加。使用breakforce可设置关节断裂的力,一旦力超过它,关节将会断裂。断裂时,通过onjointbreakforce方法可监听相关事件。图4-5 character joint关节4.1.4 两种手部手指抓取效果的实现让玩家控制手部与场景进行交互我参考了文献中的内容图4-6 抓取效果。第一种汽车场景的手的抓取效果逻辑是让手触碰到特定的collider后进行记录,然后检测此时玩家有没有点击鼠标左键来判断isTouch是否为真,若为真,玩家就不再控制手的移动cube的移动,而是控制当前所碰撞的特定collider,人的手IK就会切换目标,从而实现手放在上面进行操控一样。该方法可能会造成穿模的现象,但是胜在简单容易实现,也不会因为各种rigidbody不规范而产生各种bug。部分代码如下,SteeringWeelCount的多少是判断玩家触碰各种特定物品变化,只要数字是多少,点击了鼠标就会让手挂在上方。抓取效果如图4-6第二种钓鱼场景的手的抓取效果是由Unity自带的fixed joint实现的,通过我的观察与实验,该手模拟器是通过控制Configurable Joint里面的数值来改变手指的弯曲程度,当手指弯曲时碰到有碰撞体的物体时就会让碰撞的点与被碰撞物进行fixed joint物理连接,只要玩家不松开左键,这个物理关节就会一直链接,直到玩加松开左键才会断开。这种效果会更加真实,因为它会根据物体大小来改变手指握住的那个曲度,像是真的握在上面一样。难点就是对于rigidbody的数值比较严格,很难有合理的效果。抓取效果如图4-1-4-2图3-1-2 抓取效果4.2 场景的实现在Unity中分了一个环境物体,里面放着该场景的所有环境物体,在这钓鱼环境中我加入了汪洋大海,大海上加入了一个小岛,小岛上有几棵椰子树,因为素材上树有动画,加入WindZone风向让树叶有吹动效果。在岸边加入了一个小船,玩家在船上,船边有本场景的关键道具鱼竿和鱼饵,玩家通过道具钓到一条鱼到船上就算胜利。如图3-1所示图3-1 钓鱼场景 图3-1-2 汽车场景4.

    注意事项

    本文(基于unity3d的手部模拟器的设计与实现_梁浩能(改3).doc)为本站会员(封****n)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开