《基于Unity3d的模拟钓鱼游戏设计与实现.doc》由会员分享,可在线阅读,更多相关《基于Unity3d的模拟钓鱼游戏设计与实现.doc(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、本科毕业设计(论文) 基于Unity3d的模拟钓鱼游戏设计与实现Design and implementation of simulatedfishing game based on unity3d 院 (系)计算机学院专 业软件工程班 级软工二班学 号16210120212学生姓名杨燕嘉指导教师吴志达提交日期2020年4月21日毕业设计(论文)原创性声明本人郑重声明:所呈交的毕业设计(论文),是本人在指导老师的指导下,独立进行的设计(研究)工作及取得的成果,论文中引用他人的文献、数据、图件、资料均已明确标注出,论文中的结论和结果为本人独立完成,不包含他人已经发表或撰写的作品及成果。对本文的研
2、究作出贡献的个人和集体,均已在论文中作了明确的说明。本人完全意识到本声明的法律结果由本人承担。毕业论文作者(签字):签字日期:年月日成绩评定成绩项论文成绩(百分制)折合比例实得成绩(折合分)指导教师成绩 30% 评阅教师成绩 20% 答辩成绩 50% 总评成绩注:毕业设计(论文)成绩按百分制评定。答辩成绩不及格的(评分低于 60 分的), 则该毕业设计(论文)总评成绩为答辩成绩广东东软学院本科毕业设计(论文)内容摘要随着互联网的发展并深入人们生活,成为现代社会不可或缺的一部分,网络游戏依附于互联网自20世纪末开始发展得如火如荼。随着时代进步,游戏的种类日益增加以满足人们的需求。模拟类游戏在电子
3、游戏发展之初就已有发展的势头,但玩家小众,以至于模拟游戏在技术进步的近些年来才开始发展飞速。模拟钓鱼游戏的开发是为了让玩家无需出门即可体验到钓鱼的乐趣。本项目以Unity3d游戏开发引擎作为开发工具,利用Unity3d中的UGUI功能、Animation系统和音效系统等联合使用C#脚本实现模拟钓鱼游戏。本课题主要是探究Unity3d 模拟钓鱼游戏的开发,选择第一人称单机的模拟钓鱼的游戏方式,让玩家在快节奏的生活之余,足不出户也能体验到只有户外才能体验到的钓鱼乐趣,找回生活中最纯粹的快乐。本文主要描述了该游戏的开发原理,游戏的设计与实现以及游戏功能测试等,为后续希望开发同类游戏的开发者提供借鉴与
4、参考。关键词:Unity3d; 钓鱼; 模拟; 游戏;AbstractWith the development of the Internet and the deepening of peoples life, it has become an indispensable part of the modern society. Since the end of the 20th century, the development of online games attached to the Internet has been in full swing. With the progress
5、of the times, the types of games are increasing to meet peoples needs. At the beginning of the development of video games, simulation games have been developing rapidly, but the players are so small that simulation games have begun to develop rapidly in recent years.The development of simulation fis
6、hing game is to make players experience the fun of fishing without going out. In this project, the unity3d game development engine is used as the development tool, and the C script is used to realize the simulation fishing game by using the ugui function, animation system and sound effect system in
7、unity3d.This topic is mainly to explore the development of unity3d simulation fishing game, choose the first person single computer simulation fishing game mode, so that players can experience the fishing fun that can only be experienced outdoors and find the purest joy in life without leaving home.
8、 This paper mainly describes the development principle of the game, the design and implementation of the game as well as the function test of the game, etc., so as to provide reference for the future developers who want to develop similar games.Keywords:Unity3D fishing simulation game目录第一章绪论51.1开发背景
9、51.2开发意义51.3论文组织结构6第二章开发工具介绍72.1Unity3D游戏引擎72.1.1Unity3D软件介绍72.1.2API接口72.1.3物理引擎72.1.4Unity常用生命周期的函数82.1.5GUI(图形用户界面)82.2C#开发语言92.3Visual Studio 20189第三章游戏设计103.1设计要求103.2功能设计103.3游戏总体结构设计113.4游戏界面结构设计12第四章游戏实现134.1游戏界面134.2游戏场景154.2.1 游戏场景元素154.2.2 游戏场景实现154.3游戏动画174.4游戏音效194.4.1环境音效194.4.2交互音效204
10、.5模拟钓鱼过程214.6游戏的打包和导出24第五章游戏测试265.1设备环境265.2游戏主要功能测试26第六章总结27参考文献28致谢29第一章 绪论1.1 开发背景随着互联网的发展并深入人们生活,成为现代社会不可或缺的一部分,网络游戏依附于互联网自20世纪末开始发展得如火如荼。随着时代进步,游戏的种类日益增加以满足人们的需求。一般而言,模拟类游戏的定位较为明确,玩家会因为模拟某种流程的体验感到有趣。模拟类游戏的核心思想是让玩家能以主角的身份,体验生活中较少机会能体验到的东西。模拟类游戏可以分为两种,一是模拟形式,二是模拟真实。模拟经营类游戏就是典型的模拟形式的游戏,玩家从这类游戏中以主角
11、的身份体验某种流程,并达到一些目的,如流行一时的动物森友会让玩家在与现实时间同步的世界中,从钓鱼、抓虫、房间布置和衣服设计等活动,体验经营生活的乐趣。顾名思义,模拟真实的游戏则不管是渲染环境,游戏机制的设定等都做的非常逼真,让玩家体验时较有代入感,例如The Long Dark中的游戏机制,正如游戏的名字,从多个维度上让玩家在漫长的夜晚中,体验长时间求生的孤独。然而,模拟类游戏最根本还是离不开“模拟”二字,不管是形式还是真实程度,都不能代替现实。模拟类游戏虽然是模拟了生活中的某种形式以供玩家体验,但它终归是游戏,是需要有肉眼可见的奖励和惩罚,来刺激玩家的心理,模仿现实生活的动作来增强体验感,因
12、此本课题将以模拟类游戏的核心,设计并实现模拟钓鱼游戏。1.2 开发意义在这个“快餐”时代,人们的生活节奏极快,力求快速达到想要的结果,因此人们的压力也日益渐增。为了调节节奏快、压力大的生活,游戏娱乐无疑是一种良好的缓解压力的方式。模拟钓鱼游戏的开发是为了让玩家无需出门即可体验到钓鱼的乐趣。在当今年轻人都投身于快节奏生活的时代里,需要有这样一款游戏,让玩家在快节奏的生活之余,足不出户也能体验到只有户外才能体验到的钓鱼乐趣,找回生活中最纯粹的快乐。模拟类游戏是在“快餐”时代下不可多得的慢生活体验,模拟类游戏的低门槛,易看懂并且上手能让玩家快速体验到游戏的乐趣,在模拟一项活动过程中释放生活的压力。运
13、用Unity3d开发的模拟钓鱼游戏,不限游戏场景,简单易懂易上手,一个设备就可以享受钓鱼的乐趣,还能在钓鱼的过程中享受风景带来的惬意,在“快餐”时代下的慢生活体验是近年来受欢迎的生活方式,而模拟钓鱼也因为惬意与悠闲的特点吸引越来越多的游戏玩家。因此,模拟钓鱼目前有着客观的发展前景。1.3 论文组织结构 论文从最初的构思到分析实践,结合了专业的Unity3d游戏开发资料,进行了一个模拟钓鱼游戏的设计制作,其中具体介绍游戏的设计思路和实现步骤,包括游戏的系统功能设计和主要代码的编写。论文分为六章,章节安排如下: 第一部分:绪论,主要阐述了模拟钓鱼游戏制作的背景和本设计的简单说明; 第二部分:介绍了
14、本项目开发时用到的Unity3d游戏开发引擎的介绍和各类工具;第三部分:详细介绍了模拟钓鱼游戏的设计思路,从设计要求延伸到功能的设计、总体结构的设计和游戏界面结构设计; 第四部分:详细讲述了模拟钓鱼游戏的实现步骤,包括游戏界面、游戏场景、游戏动画和模拟钓鱼游戏过程的实现方法; 第五部分:运行游戏进行测试;第六部分:对模拟钓鱼游戏项目的总结以及未来的发展方向的阐述。第二章 开发工具介绍2.1 Unity3D游戏引擎2.1.1 Unity3D软件介绍Unity3D(以下简称U3D)是一款3D跨平台次时代游戏引擎。它提供了非常完美的跨平台系统。平台之间的差别常常会影响到产品的开发速度和进度,因此大部
15、分开发者们要在这上面花费大量的时间,而U3D则能够在近10种主流平台之间完美移植。同时U3D也提供了一个交互良好的操作界面,能够完美地在Windows和Mac OS下部署。该软件自带的五个工程视图框架能够很好地帮助设计者分类游戏中的对象及观察制作游戏的进程。其中包括project视图,该视图主要存放游戏中的资源文件,hierarchy视图主要放置游戏场景中具体的游戏对象,inspector视图主要用来描述游戏资源的信息,scene视图主要存放游戏中模型资源,game视图是用来观察已经完成的游戏的运行成果。U3D还为我们提供了多种脚本语言编译的常用环境,用户可以根据需求将默认的编译环境做出调整。
16、Unity3D支持C#、javascript、boo三种脚本语言。 Unity.Unity3D参考手册.Unity,2010:94-1212.1.2 API接口UUnity3D丰富的API能够帮你完成各种想要完成的需求。API是一些预先定义的函数,可用于提供应用程序与开发人员基于某软件或硬件无需访问源码就能访问一组例程的能力,亦或理解内部工作机制的细节。U3D就有一套完整的API函数库,通过这些API函数,开发人员可以很方便地实现项目的初始化,功能模块的每帧调用,如何进行触发检测并进行触发事件的响应,如何判断是否进入触发区,是否在触发区,是否离开触发区,如何实现拖动事件的响应等。2.1.3 物
17、理引擎任何一个游戏的设计都需要其物体特性的合理性,这样才显得真实可信。U3D为开发人员提供了大量组件,可以对对象进行渲染,颜色的诱明度,平行光,点光源,法线贴图,图片,文字,动画,声音,材质等一系列组件可以带给我们很逼真的视觉效果,而在物理特性上添加的刚体,碰撞器等组件,可以实现使对象受到重力,摩擦力,空气阻力等自然物理特性的影响,而爬坡的坡度设定,碰撞后的一切物理变化,逼真的体验让你觉得这就是一个现实中的物体。2.1.4 Unity常用生命周期的函数Unity3D游戏引擎不像常规的程序直接在Main函数入口运行,而是在内部实现了自己的生命周期事件。通过对这些生命周期的事件进行写入,Unity
18、内部就会不断地迭代这些生命周期函数。下面按照脚本的执行顺序介绍游戏中比较常用的Unity事件函数。Awake():当游戏对象被初始化的时候调用,无论该对象是否已被激活。Start():在Awake事件后调用,但只有被激活的时候才能够执行。Update():游戏中的帧事件,因为游戏大部分都是按帧率来执行逻辑的。FixedUpdate():游戏的固定帧事件,基本同Update(),但该事件可由开发者去控制执行频率。OnEnable():在Start事件后调用,只有被激活的时候才会执行。OnDisable():当游戏对象被禁止激活的时候会调用。OnDestroy():当游戏对象被销毁的时候执行。Un
19、ity3D的脚本基本上都会继承自于MonoBehavior基类。一般不继承于MonoBehavior的类会用来写一些工具类。通常来说,它在整个程序运行的过程中都是存在的,除非自己手动GC释放内存。2.1.5 GUI(图形用户界面)本文主要使用NGUI和UGUI进行UI界面的开发,GUI是图形用户界面的英文简写。Unity的GUI系统被称作UnityGUI,UnityGUI能使你非常快捷简便的添加功能齐备且种类繁多的界面元素,通过在GUI控件的创建操作中同时包括实例化,定位和功能定义。使你只需要一次性写出很少量的代码就能同时完成创建一个GUI界面元素实例,并定位实例在屏幕的位置和描述界面元素被激
20、活时所要执行的脚本三种工作。UGUI是Unity内置的,NGUI则是一款为Unity游戏引擎开发的工具功能扩展的UI插件,它也能够为开发者提供方便快捷的UI设计方法,加快设计游戏的速度。2.2 C#开发语言C#是微软公司发布的一种运行于.NET Framework之上,面向对象的高级程序设计语言。C#与Java类似,是一种语言,一种工具。但这里需要知道Unity是跨平台的,而C#并不是一种跨平台的语言。只是由于Mono的的重新实现,使得Unity能够使用C#来开发,因此,我们可以在Unity上写C#的代码。语法明了,类库使用方便,是C#的优点,也是我们在Unity开发中首先考虑的语言。2.3
21、Visual Studio 2018Visual Studio 2018(以下简称VS)是微软公司自主推出的开发环境。其中它支持最新的集成开发环境。VS也带来了NET Framework4.6、Microsoft Visual Studio 2018 CTP,同时也支持开发者进行面向Windows的应用程序开发。并且支持Microsoft SQL Sever,IBM,Oracle数据库等。第三章 游戏设计3.1 设计要求 任何一款游戏直接面向的都是玩家,不同的操作上下限游戏决定吸引的玩家群体。模拟钓鱼游戏的设计初衷,是为了能让在快节奏生活压力下的人们,体验钓鱼带来的舒适与惬意。模拟钓鱼游戏项目
22、设计要求是上手简单,操作方便,必不可少的是与游戏内物品交互的反馈。除此以外,还要保证游戏要有美观的界面和尽可能优美的游戏画面。3.2 功能设计现实生活中的钓鱼,乐趣在于轻松愉快的等待鱼上钩的过程以及对未知的结果期待,而对于模拟游戏而言,保留所模拟事物的特点和乐趣,是开发项目时首要实现的功能需求。本项目以钓鱼的过程为核心,设计并融合以实现模拟钓鱼游戏。那么该如何体现钓鱼的过程呢?对于玩家而言,最直接的感受反馈就是交互。要让玩家切身的投入到模拟的游戏当中,就要有可以操作的空间,才能让玩家有钓鱼的参与感。除此以外,钓鱼更大的乐趣在于未知的结果。鱼钓上来以前,期待和未知的心理感受会提升玩家的游戏体验。
23、为了能让玩家在模拟钓鱼游戏中有更轻松愉快的体验,模拟钓鱼游戏的环境搭建要切合大多数玩家能接受审美,许多玩家倾向于治愈和卡通的画面,在模拟钓鱼的过程中能更好的治愈放松身心。根据以上分析,模拟钓鱼游戏的功能分为以下几个部分:(1) 人机交互:玩家可通过鼠标、键盘对游戏的UI、游戏内物品发生交互,让玩家更好的代入钓鱼的过程。(2) 模拟动画:运用适当的动画和动作使得模拟钓鱼的过程更加真实,鱼漂的浮动和鱼竿的动作等,形象生动,让钓鱼的过程更加饱满。(3) 同步化声效:玩家在进行交互后,获得同步声效的反馈,让模拟钓鱼更加生动和代入感更强。场景:为了能让玩家沉浸放松在模拟钓鱼的游戏中,游戏的画面要做到卡通
24、和治愈的风格。3.3 游戏总体结构设计根据前文所讨论的内容,可得出本项目的总体结构设计方案。如图3-2所示。结合Unity3d游戏开发引擎,讨论各模块的实现方法,具体分析如下:图3-2 游戏总体结构图(1) 人机交互模块包括下面几点:开始界面和游戏界面采用Unity3d游戏开发引擎中的UGUI功能与C#脚本进行开发。C#脚本监听玩家鼠标点击或键盘输入事件,根据玩家点击界面中的Button触发事件,并进行对应的场景变化、Animator动画反馈、Transform变化反馈等。(2) 模拟动画模块:采用Unity3d中的Amination系统的功能,动画编辑器中添加关键帧或事件,完成鱼漂和鱼竿的动
25、画。(3) 同步化声效:使用Unity3d中的音效系统,设置Audio Source并通过C#脚本控制音效的发生条件。场景模块:模拟钓鱼游戏内的环境包括天空、水面、陆地和绿化。运用Unity3d中的Sky Box模拟天空的景色,使用Unity3d引擎中具备的Plane组件结合Shader着色器及对应的材质球,使Plane平面组件产生噪波的特效,以达到水面和陆地独特的纹路效果。3.4 游戏界面结构设计考虑模拟钓鱼游戏玩家的人群,对各类游戏的了解程度都大相径庭,为了使各类玩家能快速上手体验模拟钓鱼游戏,决定采用简单直观的游戏界面结构进行开发。如图3-1所示。图3-1游戏界面结构图第四章 游戏实现4
26、.1 游戏界面根据上文所述,模拟钓鱼游戏面对的玩家人群广泛,考虑各层级玩家对游戏接受和掌握程度的不同,游戏的界面应具备以下特点 孔令德.计算机图形学基础教程. 北京:清华大学出版社,2008:26-35:(1) 简约:简单明了、通俗易懂的界面往往符合大多数玩家对休闲类模拟游戏的需求。(2) 美观:令人舒适的颜色搭配,具备美学的按钮设计,是影响玩家体验的因素之一,这也是对开发者审美的一种考验。(3) 可交互的:可交互且有对应的交互反馈,才会让模拟钓鱼游戏的开始不那么突兀,是一款完整的游戏必不可少的部分。根据上述特点,项目的游戏开始界面采用游戏场景作为背景,结合Unity3d游戏引擎中的NGUI来
27、实现。可以发现,这样制作游戏开始界面能让开始界面富有层次感,自然生动不僵硬,因为按钮的排列和背景物品的摆放错落有致,切实提高画面的美感。如图4-1所示。Button的制作是将其Source Image的属性,替换成提前做好的字体,再调整Button的透明度,可以使按钮和背景的结合不那么突兀。图4-1 开始界面界面的布局决定后,就在Button上添加鼠标点击事件的监听On Click(),玩家在点击“新游戏”按钮后,对应的交互反馈是场景跳转,在Unity3d游戏开发引擎中为了方便管理场景关卡的切换,引入Scene Manager用于场景管理。在On Click()上挂载一个C#脚本,如图4-2所
28、示,通过简单的一段代码,即可实现玩家点击“新游戏”按钮后,得到切换场景的交互反馈。以下所示为执行切换场景的代码:1. usingSystem.Collections;2. usingSystem.Collections.Generic;3. usingUnityEngine;4. usingUnityEngine.UI;5. usingUnityEngine.SceneManagement;6. 7. publicclassStartLoad:MonoBehaviour8. 9. 10. publicvoidLoading()11. 12. SceneManager.LoadSceneAsyn
29、c(Loadingscene);13. 14. 图4-2 Button的Inspector面板同理可得其余Button的制作方法。4.2 游戏场景4.2.1 游戏场景元素要实现模拟钓鱼,设计的场景就必然与钓鱼有关,除此以外,据上文所述,环境的风格要让玩家感到放松,悠闲,能更专心与钓鱼这件事情。最能让玩家感到轻松和悠闲的,一般是最能让人接受的卡通和治愈向的风格,让人忘记生活的烦恼压力,沉浸与模拟钓鱼游戏的乐趣中。现在市面上模拟游戏的画面大多数是写实风格,写实风格的特点是图像和所要表达的具体事物形象十分相像,并追求思维与存在的统一性,而使用写实风格来做的模拟游戏,往往是为了让玩家能更深层地代入游戏
30、中去。如上文所提到的,模拟钓鱼游戏更注重玩家体验钓鱼的过程,并在这个过程中能感受到放松的心情。对玩家而言,游戏的画面是影响心情的最直接因素,所以模拟钓鱼游戏的场景会使用更容易让人接受的治愈卡通风格。因此,总结出模拟钓鱼游戏的场景模型应该包含下列所示:(1) 鱼竿:钓鱼所必须拥有的工具,且需与环境风格一致,才能让玩家体验时不会感到违和。(2) 水面:要有波光粼粼的动态感,也要有倒影的层次感,才能让玩家一眼望去感到舒畅愉快。(3) 陆地植被:环境中不可缺少的衬托,起到渲染气氛的作用,让玩家体验模拟钓鱼时能身临其境。4.2.2 游戏场景实现前文有提到过,水面制作思路:使用Unity3d游戏开发引擎中
31、带有的Plane平面组件加上特殊的Shader着色器和对应的材质球,产生波光粼粼的纹路,如图4-3所示。然而只有纹路是不够的,为了让水面更生动,配合C#脚本来让水面运动起来,以下为水面产生随机运动的代码示例:1. usingSystem;2. usingUnityEngine;3. 4. namespaceUnityStandardAssets.Water5. 6. ExecuteInEditMode7. publicclassWaterBasic:MonoBehaviour8. 9. voidUpdate()10. 11. Rendererr=GetComponent();12. if(!r
32、)13. 14. return;15. 16. Materialmat=r.sharedMaterial;17. if(!mat)18. 19. return;20. 21. 22. Vector4waveSpeed=mat.GetVector(WaveSpeed);23. floatwaveScale=mat.GetFloat(_WaveScale);24. floatt=Time.time/20.0f;25. 26. Vector4offset4=waveSpeed*(t*waveScale);27. Vector4offsetClamped=newVector4(Mathf.Repeat
33、(offset4.x,1.0f),Mathf.Repeat(offset4.y,1.0f),28. Mathf.Repeat(offset4.z,1.0f),Mathf.Repeat(offset4.w,1.0f);29. mat.SetVector(_WaveOffset,offsetClamped);30. 31. 32. 图4-3 波光粼粼的水面环境的搭建则是需要众多素材的支撑,又了水面即可将其作为环境中心,对游戏场景进行搭建,最终效果如图4-3所示。图4-4 第一人称视角4.3 游戏动画 Unity3d游戏开发引擎中,常用到Animation Controller动作控制器联合C#脚本
34、来实现对象的动作逻辑管理。使用Unity3d游戏开发引擎中的Animation编辑器制作游戏对象的Animation,可以通过录制功能,记录对象的Position和Rotation的变化,也可以通过手动的方法在时间轴上添加keyframe关键帧。使用Animation制作游戏对象动作的好处是可以在动作的时间轴上添加事件event,配合C#脚本可以完成许配合对象动作的需求。为了实现模拟钓鱼游戏的钓鱼过程,需要设计实现的动画包括鱼漂的浮动和鱼竿甩动的动画。与一般的骨骼动画不同,模拟钓鱼游戏要设计动作的对象没有骨骼,无法使用一般人物的Animation,因此需要使用到Unity3d游戏开发引擎中带有
35、的Animation编辑器,制作游戏对象的Animation。现实生活中钓鱼时,鱼漂一般是在水面上几乎不怎么运动的物体,但在模拟钓鱼游戏中,需要画面富有动态而非一潭死水,就要让鱼漂适当的浮动,让玩家接收到正在垂钓的信息。当有鱼上钩,则需要鱼漂剧烈上下浮动,来传达“鱼上钩了”的信息,这样的动画正好能与玩家得知鱼上钩后的心情相呼应。钓鱼的灵魂动作是甩鱼竿,不管是在现实还是在游戏中。潇洒的甩鱼竿动作宣告钓鱼的过程正式开始。甩鱼竿的动作不能是僵硬的左右或者前后的移动或转动,要和现实中钓鱼时的甩鱼竿那样富有力量。鱼漂的静态浮动只需小幅度变化它一个方向的Position,如图4-5所示,并在Animati
36、on Controller中设置循环,即可得到静态漂浮的鱼漂动作。图4-5 静态鱼漂的Animation设置鱼漂的剧烈浮动则需要更为密集的keyframe,传达有鱼上钩的信息,如图4-6所示。图4-5 剧烈浮动鱼漂的Animation设置模拟钓鱼时的甩鱼竿动作需要表现出甩鱼竿时的潇洒和力量,巧妙运用Position和Rotation变化可以满足这样的需求。甩鱼竿时的力量往往伴随着速度,用力甩的鱼竿动作一定会快,那么在甩鱼竿可以之前加入类似于跳远时助跑帮助的缓冲动作,通过衬托来表现甩鱼竿的力度,如图4-6所示。图4-6 甩鱼竿的Animation设置4.4 游戏音效4.4.1环境音效灵活运用un
37、ity3d中的Audio Source实现游戏的环境音效。在场景中建立一个GameObject并挂载Audio Source,设置声音的大小、覆盖范围和播放模式,以水面的音效为例,如图4-7所示:图4-7 水面音效设置同理,环境中的其他音效如鸟声和其他声效亦可如此实现。4.4.2交互音效交互音效即为玩家在模拟钓鱼过程中的交互所得到的反馈音效。如钓鱼的时候甩鱼竿发出的音效、鱼漂有反应时的提示音效和按下空格键把鱼钓起来时发出的音效等。在交互中所发出的音效往往需要与C#脚本关联,判断或监听音效发出的条件。新建一个GameObject并将其命名为要发出的音效名称,在Inspector面板上添加Audi
38、o Source,把音效文件添加到Audio Clip一栏。以鱼漂有反应时发出的提示音为例,这里选择将控制音效发出的代码写在鱼漂上,声效的发出是与鱼漂动画同步发出的,因此在鱼漂发生反应的动作上添加音效播放事件,以下为关键代码示例:1. publicvoidWatermusic()2. 3. audioSource.Play();4. 在按下空格键后,鱼漂消失,通过audioSource.Stop()命令使音效停止,关键代码如下:1. if(Input.GetKeyDown(KeyCode.Space)2. 3. 4. SmallSplash.gameObject.SetActive(false
39、);5. splash0.gameObject.SetActive(false);6. this.gameObject.SetActive(false);7. 8. audioSource.Stop();9. 最后,将之前所创建的GameObject所对应的音效拖到脚本的变量上,即可完成音效的实现,如图4-8。图4-8 部分音效的实现4.5 模拟钓鱼过程根据上文所提及的,模拟钓鱼游戏所面向的玩家不尽相同,模拟钓鱼的过程应是简单易懂易上手的,与现实中的钓鱼过程大同小异,甩鱼竿后静待钓鱼的结果,模拟钓鱼过程基于现实钓鱼过程 张茂军.虚拟现实系统M北京:科学出版社,2002:170-172的设计如图
40、4-9所示:图4-9 模拟钓鱼过程设计基于现实生活中的钓鱼过程考虑,从甩鱼竿开始到鱼漂产生剧烈浮动的时间间隔应该是随机的,但考虑到钓鱼等待的时间不应该无限长,应该要设置阈值,降低玩家在体验钓鱼时的等待产生的焦虑感,当产生的范围内随机数随着时间减少,降低至小于等于1时,鱼漂开始剧烈浮动,代码示例如下:1. usingSystem.Collections;2. usingSystem.Collections.Generic;3. usingUnityEngine;4. 5. publicclassRangeFish:MonoBehaviour6. 7. privateinta;8. private
41、intb;9. privatefloatTimer=2;10. privateAnimatorani;11. publicAudioSourceaudioSource;12. publicAudioSourceaudioSource1;13. 14. publicGameObjectSmallSplash;15. publicGameObjectsplash0;16. publicGameObjectfish0;17. publicGameObjectfish1;18. 19. 20. /Startiscalledbeforethefirstframeupdate21. voidStart()
42、22. 23. ani=GetComponent();24. a=Random.Range(3,20);/生成随机整数25. print(a);26. 27. 28. 29. /Updateiscalledonceperframe30. voidUpdate()31. 32. Timer-=Time.deltaTime;33. if(Timer=0)34. 35. a-=1;36. Timer=1;37. print(a);38. 39. if(a=1)40. 41. ani.SetBool(fishistookingthebait,true);42. splash0.gameObject.SetActive(true);43. SmallSplash.gameObject.SetActive(true);44. 45. if(Input.GetKeyDown(KeyCode.Space)46. 47. a=Random.Range(3,20);48. b=Random.Range(0,3);49. 50. SmallSplash.gameObject.SetActive(false);51. splash0.gameObject.SetActive(false)