基于Unity3D的模拟厨房的设计与实现.doc

上传人:封****n 文档编号:96762846 上传时间:2024-03-19 格式:DOC 页数:45 大小:7.84MB
返回 下载 相关 举报
基于Unity3D的模拟厨房的设计与实现.doc_第1页
第1页 / 共45页
基于Unity3D的模拟厨房的设计与实现.doc_第2页
第2页 / 共45页
点击查看更多>>
资源描述

《基于Unity3D的模拟厨房的设计与实现.doc》由会员分享,可在线阅读,更多相关《基于Unity3D的模拟厨房的设计与实现.doc(45页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、摘要数字多媒体技术是伴随着科技进步而诞生的产物,同时在社会推进的进程中也逐渐成为了人们不可忽视的重要因素,而电子游戏可是说是在数字多媒体技术最为重要的部分之一,以至于人们通常用第九艺术来表示对它的重视与赞美。经历多年发展的电子游戏已不仅仅止步于带给人们轻松娱乐、消遣时间,如今更多人把它们做成一种方便于进行特殊场景模拟与练习的训练目的软件。模拟游戏便是一种能让娱乐与实践训练合二为一的游戏类型,游戏的初衷就是让玩家在游玩中能学到技巧知识,娱乐学习两不误,对如今的游戏生态圈的发展是不可或缺的一种类型,并且在玩中学的目的也能拥有更大的受众。在本论文中将用近几年因简单易上手而逐渐受人重视的Unity作为

2、这个“模拟厨房”的游戏引擎进行开发。本游戏作为一款模拟类的游戏,它的设计初衷是帮助想要学习做菜技术的玩家,同时也能让普通玩家在游玩的过程中犹如在厨房一样身临其境的体验。游戏中玩家可以发挥自己创意,不受约束的制作自己想到的菜肴,既能学到知识,又能为玩家的日常生活中多添一分欢乐的色彩。本论文主要描述了该游戏的开发原理、设计和实现等。关键词:Unity3D 模拟类游戏 第九艺术AbstractDigital multimedia technology is a product that was born in the progress of science and technology. At th

3、e same time, it has gradually become an important factor that people cannot ignore in the process of social advancement. Video games are one of the most important parts of digital multimedia technology, so much so that People usually use the ninth category of art to express its importance and praise

4、. The video games that have been developed for many years have not only stopped to bring people easy entertainment and spent happy time, but now more people make them into a training purpose software that is convenient for special scene simulation and practice. Simulation games are a type of game wh

5、at can combine entertainment and practical training. The purpose of the game is to allow players to learn skills in play. Entertainment and learning are both correct. An indispensable type while learn to playing a game can also have a larger group of players.In this study, we will use Unity, which h

6、as gradually be valued due to the low difficulty of use for recent years, will be used as the simulated kitchen game engine for development. The original design of this simulation game is to help players that want to learn to cook skills, but also allows players to experience the immersive experienc

7、e as if they were in the kitchen during the game. In the game, players can use their creativity to create the dishes they think of without restriction, which can not only learn knowledge, but also add a joyful color to the players daily lives. This article mainly describes the game design process.Ke

8、ywords:Unity3D simulation game the ninth category of art目录第一章绪论11.1开发背景及意义11.2国内外模拟游戏现状21.3论文架构3第二章游戏开发原理42.1游戏引擎介绍42.1.1Unity3D软件介绍42.1.2Unity3D API接口42.1.3Unity3D常用组件52.1.4Unity3D常用函数52.1.5GUI(图形用户界面)62.2游戏技术介绍72.2.1游戏开发语言 C#72.2.2IDE(集成开发环境)72.2.33ds Max软件72.2.4Photoshop 软件8第三章游戏需求分析93.1受众群体93.2功

9、能需求及设计9第四章游戏设计与实现104.1玩家功能设计104.1.1交互判断及文本显示104.1.2流程设计184.2游戏视角及移动194.3游戏道具214.3.1道具设计224.3.2道具属性234.4游戏场景244.4.1场景布置244.4.2添加光效264.4.3添加粒子效果294.5游戏UI304.5.1画布及字库设置304.5.2UI控制设计324.5.3UI实现32第五章游戏测试385.1开发环境测试385.2游戏功能测试38第六章结论39参考文献40致谢41广东东软学院本科毕业设计(论文)第一章 绪论1.1 开发背景及意义一些悄悄兴起的技术产业会随着时间推移逐渐步入人们的视野,

10、数字多媒体技术也成为了人们不可忽视的重要因素之一。因为科技与社会的进步导致人们生活质量蒸蒸日上,衣食住行得到解决之后随之而来的就是精神上的追求,以及对艺术的追求。电子游戏,自1952年面世至今经历了重重坎坷,从一开始被称为“电子海洛因”到现在人手必备的手机中随时都能见到它们的身影,如今广泛传播后被认定为在电影之后的第九艺术即电子游戏艺术5。经过多年发展的电子游戏已不仅仅止步于带给人们轻松娱乐、消遣时间的目的,更多人把它们做成一种可以随时进行特殊场景模拟与练习的训练目的软件。而Unity3D(以下简称U3D)作为花样百出的游戏制作软件之一,有着制作方便快捷、功能完善、学习成本低、可跨平台开发等多

11、种优点被广为人们所知。近些年用U3D制作出的知名游戏更是数不胜数,开发人员也是十分抢手。加上在国内对中小型游戏开发需求的提高,U3D便成为最适合开发此类游戏的软件之一,所以U3D早已是在游戏制作公司中耳熟能详的字眼,在未来的5G加持游戏开发环境下一定会更加游刃有余。模拟类游戏在游戏史上有两种方向,一种就是直白的用英文Simulation Game意译过来的“模拟游戏”也叫SIM,这种类型通常是对社会生活中的种种现象、情景、过程的一个模拟。这种模拟小到被风吹下的一片树叶,大到一个星球乃至宇宙上的生命发展过程。而另一种则是“战争策略游戏”也被称为策略游戏或SLG,正如其名这种类型的游戏通常考验玩家

12、的智惠与战略来操控战争的走向,从而让玩家在一步步的操作和反馈中收获成就感。所以模拟游戏不单单是为了让人们在游玩的时间内放松身心、消遣时间,更是一种能够针对特殊场景、特殊场合下进行相应判断与操作、有训练和教育意义的游戏软件。而模拟类游戏作用于训练和教育的例子早在美国军队招兵时就有所体现,空军为了招募人才设计出了能够普及的模拟太空概念的游戏在民众间推广,陆军推出第一人称射击游戏进行宣传招募士兵以及训练士兵等等3。模拟类游戏不单单只是针对于军事方面的训练,在医疗、教育、救灾、科研上都有着许多出色的模拟游戏,但这些大多都是针对于特定人群的特定训练,模拟游戏也需要许多面向大众化的即可学习又可娱乐的游戏4

13、8。而这部分的需求会慢慢转变为日后游戏产业的一种开发方向,其受众范围广、内容积极向上易于推广,只要游戏能让玩家充分感到快乐,能更加有利的对低年龄层玩家进行输出,相信家长们也愿意看到孩子们在玩耍中学到技能和知识。1.2 国内外模拟游戏现状在游戏圈内经常可以听到的一句可谓是家喻户晓的说法,生活中的不经意总能成为游戏里的灵感,这是由世界上第一款游戏乒乓(Pong)的诞生而产生的一种说法。该模拟游戏是1972年美国的一家公司因为生活中的乒乓球得来的灵感所设计的,可以说它是世界上第一款模拟类型的游戏。乒乓的出现改变了当时人们乏味的娱乐生活,也掀起了电子游戏的开发浪潮。随后的80年代里著名游戏制作人席德梅

14、尔和比尔斯蒂利一起创办了MicroProse公司并相继推出了许多主打军事以及战争的战略模拟游戏,其中不乏有今日耳熟能详的文明(Civilization)系列前身。而在这个时间段的日本,襟川阳一也在其名下的光荣公司中发售了它们的第一款模拟策略游戏川中岛合战,游戏一经发售便引起了不小的凡响,随后在1983年与1985年分别推出的信长之野望和三国志两款游戏因为其模拟战争内容和烧脑的策略要素陆续冲击了当时的日本游戏界,影响力巨大,让光荣公司迈入了新的里程碑10。虽说上面的案例大多题材都起源于军事战争,由军事上的推演和运算演变而来。但渐渐因游戏题材的不断涌出,人们也逐渐习惯了各种在平时生活中体验不到的游

15、戏题材带来的冲击,在这便有了反其道而行之的游戏,那便是本文主要讨论的模拟游戏(SIM)。在21世纪初期,一款名为模拟人生的游戏因艺电公司(EA)的创作而问世进而被人们所了解,游戏的玩法在当时可以说非常的与众不同,没有一个明确的目的让玩家执行,也没有要求玩家必须要按照某些流程线性的游玩,玩家所要做的就是控制游戏中他们自己设定性别和外观的模拟市民,满足他们提出的要求和想法,为他们规划一个完整的人生12。从婴儿出生、健康成长,到学校教育、学习知识,再到成年就职、交友结婚,最后成立家庭、晚年养老。当有自己的房子之后还要精心布置里面的家具,从基本的屋顶门窗,到改变品味的音乐器材、培养情操的美术用具等,模

16、拟市民们也会因为房间内的装饰不同从而影响性格发展。可以说用游戏把人的一生表现得以假乱真,所以该游戏也在人们心中留下了深刻的印象,也给发行公司带来了不小的成功,之后便陆续推出了三代模拟人生的续作。时至今日仍然可以再拿出来品味一番,值得我们学习。反观国内,在90年代电脑刚刚步入人们视野时就已经有优秀的国产模拟策略战棋游戏风色幻想发售,自1999到2009年期间一共开发出8作,给国内的策略玩家留下了不小的印象,可以说是给国内的模拟游戏开了一个好头。在早期国内对游戏产业不重视和盗版泛滥的情况下,整个单机游戏市场都进入了一个低潮时期。但从2017年开始国内优质单机游戏也是如雨后春笋般的出现,像是模拟城市

17、建设的模拟工厂可以体会一把战后作为市长重建家乡并逐渐恢复家园的乐趣。以及体验从零开始建设发展农村工作,还能种田钓鱼交友做个优秀农民的模拟游戏波西亚时光,同时这两款都是运用了在国内日渐受到关注的Unity游戏引擎。2004年是一个对游戏产业十分有意义的一年,Unity作为一个游戏引擎横空出世,从期初Unity1.0只针对定向平台的VR(虚拟现实)开发到如今2019版本不单单是window和MAC平台,还支持移动端的IOS、 Android以及主机平台XBOX、 PS4的一个可以说是跨越全平台的开发游戏引擎,贴合最近的5G技术移动设备的开发,在国内的游戏开发环境下,Unity3D通过自身的多平台等

18、优势和虚幻引擎以及寒霜引擎等引擎的比较中还是占据着一席之地,在国内是十分有发展潜力的引擎。1.3 论文架构 论文的讲述内容如下表1-1所示:表1-1 论文章节内容描述章节内容第一章绪论1. 述了论文书写时国内的游戏行业背景2. 对国内外相同题材的游戏发展史进行了简单的讨论3. Unity3D引擎的发展潜力进行了初步探讨第二章开发原理1. Unity3D引擎内部常用的部分功能讲述2. 开发此游戏需要用到的软件介绍第三章需求分析1. 对游戏进行一个简单的受众群体分析2. 针对特定的群体设计了特定的游戏功能第四章功能实现1. 详细介绍游戏的各个模块设计思路2. 对部分代码进行讲解第五章测试1. 游戏

19、压力测试2. 游戏功能测试第六章结论1. 制作过程中的经验总结2. 游戏优缺点分析第二章 游戏开发原理2.1 游戏引擎介绍 引擎可以说是一个软件的组件规范,就如同日常中随处可见的汽车引擎一般,游戏引擎也是一种可以撑起游戏制作流程的软件框架(software framework),它就是专门因各种游戏开发需求的增多而出现的软件,其中有所需开发游戏所需求的基础功能。而时下最流行的几个引擎在功能上比较全能的有Untiy3D、虚幻引擎、起源引擎,还有专攻2D的Cocos、RPG Maker等等。2.1.1 Unity3D软件介绍Unity3D(以下简称U3D)是一款对比其他同位引擎更加便捷、操作简易、

20、支持开发众多平台的而出名的游戏引擎。U3D不仅在3D游戏引擎上有着很大的受众群体,2D游戏的开发也有不少游戏使用了它来制作,这也体现出了U3D在广大的游戏制作者群体中的重要性。而U3D开发平台齐全又为游戏制作者打了一针 “强心剂”,不仅是在占有率最大的PC、Mac、Android和IOS上支持系统环境,更对索尼和微软的主机平台甚至于各种浏览器都有不错的支持,要知道开发的平台改变往往会严重影响到开发者的游戏开发进度和速度,因为改变游戏的平台常常需要耗费大量时间更换游戏中的代码,而U3D则做到了在这十几种平台之间完美的移植。U3D的开发公司Unity Technologies是想要把它开发成一个有

21、一目了然简单易懂的交互界面、3D物件可视化、功能繁杂却方便使用的综合性游戏开发工具。从Unity1.0到现在最新的Unity 2020经历了无数的版本更替,不但让简单易于上手还拥有优秀开发生态的C#成为了主要的编译语言,还提供了种类丰富的API接口、功能齐全的游戏组件、方便实使用的功能类和引用来降低开发游戏的难度。2.1.2 Unity3D API接口API全称是Application Programming Interface,指的是应用程序接口。是一些预先设定好的函数或者是一些系统组成部分的衔接约定。目的是为了让开发人员无需了解软件的原码就可以使用内部功能来进行开发。U3D内部就一套完整的

22、API函数库,游戏开发者可以通过这些API来更加方便快捷的完成一些设定好的功能。包括初始化项目、物体的相互碰撞检测、复杂的数学计算、物体四元数改变等。2.1.3 Unity3D常用组件组件算是在U3D里一个核心的部分,开发中创建的所有物件都会在U3D右侧的Inspector(监视)面板中列出它拥有的属性,用得好组件的开发者都能事半功倍,但反之对功能不熟悉则会导致开发进度的延长,有时候千方百计写出来的代码结果有和它相似功能的组件会让人十分失落。U3D中提供了不计其数的组件可供人选择,每种组件都有着自己不可被替代的功能。下面表2-1将介绍几个U3D中常用组件:表2-1 Unity组件介绍组件功能T

23、ransform(转换)每个物件都不可或缺的组件,它控制物体位置、方向和角度Camera(摄像机)引擎基础中的基础组件,没了它便无法观察物件,同时还是UI和2D游戏的载体Light(灯光)Audio(声音)Material(材质)三个组件放在一起介绍是因为它们的功能都是给游戏添加活力和色彩,在不同的光影、音效和材质下会给玩家带来不同的游戏体验Physics(物理效果)物理组件给游戏带来的改变说是最大的也不为过,不仅能省去写下物体运动轨迹等繁杂的代码,还能方便的通过Collider(碰撞体)来检测物体之间的碰撞,进而提升开发的速度这里只是简单的举例了U3D中的实用组件,其他未曾提到的组件并不代表

24、不够实用,不如说其中还有韬光养晦之物。在接下来的设计与实现中出现若一些其他组件便会再单独对其讲解。2.1.4 Unity常用函数U3D游戏引擎虽然使用的是C#编程语言,但在编写代码的时候并不需要遵循C#以Main函数为主的程序结构,因为它自身有一套函数来代替C#完成自身的生命周期更换,只要对这些函数重写便可以简单的运行并迭代进而使整个游戏运作起来。并且每个在U3D中创建的代码文件都会默认继承MonoBehaviour类,此类包含了大量U3D自带的API,是整个引擎的重点类之一。下面表2-1将介绍部分U3D中常用的函数:表2-2 Unity函数用法介绍函数名功能Awake()在绑定的对象初始化时

25、会被调用,不受绑定对象是否激活的影响Start()游戏保持运行的核心之一,会在游戏中每一帧都调用该函数FixedUpdate()游戏保持运作的核心之一,会在指定帧数间隔下调用该函数Destory()将对象销毁即移除游戏物体Instantiate GameObject.Instantiare(prefab)创建引擎中的预制体,通常用于生成已经设置好的物体GameObject.SetActive(false/true)通过参数来控制绑定物体的激活状态。true则为激活,反之便是取消激活状态和组件一样,U3D中也有数以万计的函数和类提供给游戏开发者使用,如果要将它们一一指出并解释都可以单独写一篇文章

26、。在接下来的设计与实现中若出现一些其他函数便会再单独对其讲解。2.1.5 GUI(图形用户界面)GUI指的是在屏幕上以图形的方式显示来帮助用户与计算机打交道的界面接口。它在U3D中乃至所有软件中都是画龙点睛的存在,能否让用户更加直观的使用软件功能是评价一个GUI界面优秀程度的标准。现今版本的U3D中的GUI也是为了更加人性化而一步步更新开发出来的,在早期的OnGUI时期,开发人员只能通过代码来控制GUI,这样的方式往往让一些想要了解GUI却没有代码经验的人无从下手;随后就有一位开发者通过制作了插件,实现了通过2D和3D界面控制GUI,这个插件就是赫赫有名的NGUI,不但功能完整还附带了集成动态

27、效果,受到了大量用户的喜爱;到后来的Unity4.x版本,官方直接聘请了开发NGUI的作者来帮助U3D完善了自己的GUI并作为官方系统称之为UGUI,由于对前面两种GUI类型取其精华,去其糟粕,不但只需通过简单的操作即达到想要的效果,还有许多深入的设置功能对高级开发者也有所帮助,所以直到现在都是U3D中最多开发者使用的GUI。2.2 游戏技术介绍2.2.1 游戏开发语言C#C#也叫称为面向对象语言,由微软发布的一款高级程序设计语言,它的特殊不单单是运转于NET Framework框架,还因为语言本身语法优雅、结构稳定、开发简单等功能深受使用者的喜爱,网络上经常会出现C#与JAVA孰强孰弱的争议

28、也是因为C#给人们带来的便利体验所致。而C#本身是没有多平台的概念,U3D将其设为引擎的主要语言对双方都有不小的受益,使得U3D的引擎使用更能得心易手。综上所述开发所涉及的软件将在C#语言下进行开发。2.2.2 IDE(继承开发环境)IDE是一种术语,通常表示既能通过书写代码进行编译与调试,又带有GUI界面的软件。此项目所用到编写C#的IDE同样也是微软开发出的“面向任何开发者的同类最佳工具”的Visual Studio也叫VS。该软件已经有20多年的开发历史,从支持的单独语言的4.0版本直到现在最新的16.0版本已经对不同种类的代码开发平台有了多元化的支持,经历了20多年的打磨也让该软件在当

29、下琳琅满目的IDE中独树一帜,成为了众多开发者喜爱的软件之一。2.2.3 3ds Max 软件3ds Max是由Discreet公司设计研发的软件,它因应用范围广、上手简单的3D建模软件,在如今3D建模软件各色各样的网络环境下也拥有着不少使用者,大部分的原因都是其本身既能兼容插件,丰富用户体验、又对PC配置要求偏低的情况下发挥强大的动画制作以及建模能力,可以说是入门建模软件中必不可少的一款。值得注意的是此项目设计所涉及的模型道具都会导入到此软件中进行修改。一是为了避免因不同的格式导致出错,二是使用该软件可以减少大部分时间消耗,进而加快开发进度。2.2.4 Photoshop 软件Photosh

30、op可以说是当今网络上路人皆知的一款数字图像处理软件,历经30年的版本更新让其在平面、界面、网页、广告等设计有着极大的发挥。同时Photoshop在游戏开发中对开发者的帮助也不小,像是设计GUI界面的各种按钮和图片、模型千奇百怪的贴图、角色立绘和场景原画等等。此软件将会在本次项目设计与实现中帮助游戏UI,开始界面等部分的制作,但具体的制作流程将不会一一展示。第三章 游戏需求分析3.1 受众群体模拟类型的游戏都有一个普遍的特性,不论是偏重于战斗策略的军事战争模拟,还是玩法设计都贴近于生活的概念模拟游戏,都是以模拟真实发生过的事情,并对相应内容感兴趣的群体进行开发。就像独立工作室Ndemis Cr

31、eation和他们所开发的种种模拟类以及军事类的策略游戏之一的反叛公司一样,因为在游戏内的战争模拟出了想要围剿恐怖组织却因滥杀无辜而导致行动失败的联军部队的“冰山螳螂”行动这一非常真实的因果关系,不单受到玩家的喜爱吹捧,还因为其独特的战略意义被美国五角大楼给看上,最后甚至改变了美国军方“武力优先”的行动方针3。而这一切都是因为游戏在开发初期确定了向那些玩家群体推销这款游戏,选着的受众群体终点之一便是对游戏选择的题材抱有兴趣,针对他们来对游戏内的部分细节深入设计,从而使玩家们对游戏更加的喜爱。反观本游戏在设计之初就有“将厨房下厨做饭的快乐分享给玩家”的理念,进而可以确定本项目开发的游戏受众群体。

32、一是对下厨做饭本身有兴趣的玩家,想通过本项目能重现做饭的快乐,二是想要学习厨艺的玩家,虽然本项目不能完美的模拟出下厨的流程,但是在节省材料、不做出多余的浪费、节能环保方面下还是有值得尝试的必要6。3.2 功能需求分析考虑到了受众群体之后,便能分析在游戏内加入什么功能会让群体满意。首先是作为一个厨房模拟必须要有的就是玩家所在的场景应该位于厨房,并且能操作各种厨房用具来进行烹饪,包括但不限于炉具、灶具以及计算烹饪时间的物品;在有了烹调用具之后就需要有不同种类的食材被料理的以及对食材进行加工的调理步骤,像是切菜、洗涤、调制等;制作完菜肴之后还需要用器皿盛放,还需要有一个商店提供玩家用具的购买;菜肴装

33、盘后还可以设计一个评分系统,模拟评委给玩家制作的菜品打分,增加游戏的丰富度1。综上所述,大致的功能可以分为:储藏、洗涤、调理、烹饪和评分系统。第四章 游戏设计与实现4.1 玩家功能设计 玩家功能设计部分讲述在游戏中玩家控制的对象功能设计,以及玩家在游戏中体验的流程。基本玩法:玩家通过第一人称视角操控人物在厨房场景中制作菜肴。游戏对象:场景:厨房物体:各种食材、厨具、调味料、锅碗瓢盆等 通过上述原因总结出以下两点主要功能。4.1.1 交互判断及文本显示根据设计猜想,因本游戏运用第一人称视角以及参考设计的结果得出,模拟厨房(一下称之为游戏)的核心之一即与游戏物体产生的交互。例如在玩家在游玩时,只差

34、最后一步添加调味料即可完成一道菜肴,这时玩家需要经过三次交互才能达成目标,分别是:拿到调味料、给食物加调味料和放下调味料。看似在顷刻间变诉说玩的操,放在设计上便需要分阶段来进行考虑,就如下图4-1所示:图 4-1 三种交互状态可以说在玩家游玩本游戏时,所有的交互状态都是以图4-1中的三种状态为原型,因此逻辑也基本确定为通过多个Switch语句封装成多个函数嵌套来判定手部状态以及对目标物体的交互操作。但在封装之前还需要将有着不同交互事件的物体以及不同的交互操作通过几个enum枚举举例出来方便接来下的Switch判断。创建一个名为HowtoInteraction的脚本输入以下代码:1. publi

35、cenumhandStateEnumnothing,food,tools,seasoning,vessel,table,door,tag,ashcan,btn,fireex,shop,timer;2. /游戏中可以手持或可能进行交互的物体3. 4. publicenumMouseBtnLeftEnum_isnull,_take,_putdown,_switch,_opcl,_cin,_cut,_addin,_throw,_buy,_read;5. /左键操作6. 7. publicenumMouseBtnRightEnum_isnull,_pop;8. /右键操作9. 10. publicen

36、umKeyEDownEnum_isnull,_settime,_outfire;11. /E键操作HandStateEnum枚举类型举例出了游戏中所有可以交互的物体类型:食物、工具、调味料、容器、桌面、门、标签、垃圾桶、开关、灭火器、商店、计时器以及空手状态。此枚举类型还会用于给游戏中的物体定义类型,检测物体中的该枚举属性的值便可得知类型,从而进行各种交互判断和操作函数。MouseBtnLeftEnum、MouseBtnRightEnum以及KeyEDownEnum三个枚举则是举例出所有交互操作:拿去、放下、切换、加入等等以及枚举为空时的无交互。因为在游戏中只会同时存在唯一的一组三个按键可以执

37、行的交互,这时static便有了很好的作用。1. publicstatichandStateEnum_handObjset;get;=handStateEnum.nothing;2. /当前手上物品默认空手3. /当空手时把所有UI枚举设为空4. publicstatichandStateEnum_aimObjset;get;=handStateEnum.nothing;5. /当前目标物体默认无6. publicstaticMouseBtnLeftEnum_mouseLeftUIget;privateset;=MouseBtnLeftEnum._isnull;7. /当前鼠标左键UI默认没有

38、外部只读8. publicstaticMouseBtnRightEnum_mouseRightUIget;privateset;=MouseBtnRightEnum._isnull;9. /当前鼠标右键UI默认没有外部只读10. publicstaticKeyEDownEnum_keyEDownUIget;privateset;=KeyEDownEnum._isnull;11. /当前E键UI默认没有外部只读之后是核心函数的封装,重点在于先传入目标物体,判断完是否空手之后便可用Switch判断目标物体的枚举类型的值,进而判断操作。首先创建HandDealEvent函数,通过两个简单的if语句筛

39、选出不需要的分支后,进行Switch判断。但单次的Swtich无法实现出两次筛选更不用想着得到结果,于是便先通过第一次Switch判断出当前手上的物品类型,再用一个Switch根据当前手上物体判断目标物体的类型,最后再将对应的UI显示并通过一个委托来装载当前三个不同按键可执行的操作。1. publicvoidHandDealEvent(handStateEnumtarAimObj)2. 3. if(tarAimObj=handStateEnum.nothing)return;/无目标4. _aimObj=tarAimObj;/设为目标5. 6. if(_handObj=handStateEnu

40、m.nothing)/空手直接抓取7. 8. NothingEvent(tarAimObj);9. return;10. 11. RightBtnEvent();12. KeyEBtnEvent();13. switch(_handObj)/判断手持物品14. 15. casehandStateEnum.food:16. FoodEvent();17. break;18. casehandStateEnum.seasoning:19. SeasonEvent();20. break;21. casehandStateEnum.tools:22. ToolEvent();23. break;24

41、. casehandStateEnum.vessel:25. VesselEvent();26. break;27. 28. AddtoDelegate();/加入委托29. 空手状态以手持物品状态所进行的Switch逻辑基本一致,为了避免多余的重复只展示部分代码。1. publicvoidNothingEvent(handStateEnumtarAimObj)2. 3. switch(tarAimObj)4. 5. casehandStateEnum.food:6. casehandStateEnum.tools:7. casehandStateEnum.seasoning:8. caseh

42、andStateEnum.vessel:9. casehandStateEnum.timer:10. casehandStateEnum.fireex:11. _mouseLeftUI=MouseBtnLeftEnum._take;/拿取12. break;13. casehandStateEnum.door:14. _mouseLeftUI=MouseBtnLeftEnum._opcl;/开关15. break;16. casehandStateEnum.btn:17. _mouseLeftUI=MouseBtnLeftEnum._switch;/切换18. break;19. caseha

43、ndStateEnum.shop:20. _mouseLeftUI=MouseBtnLeftEnum._buy;/购买21. break;22. casehandStateEnum.tag:23. _mouseLeftUI=MouseBtnLeftEnum._read;/阅读24. break;25. 26. 根据目标物体的类型设置对应的UI,并在函数的最后根据UI将不同的交互委托加入。可以说是一个多重的Switch嵌套函数。但是进行判断的条件之一便是需要获得传入值,也就是物体的属性,自然就需要用到在Unity中最著名有趣的功能之一射线交互。在Unity中如果想要获得观察物体的信息最好的方法之

44、一便是向观察的发射一条射线,射线会将射到的物体后即可调用bool Raycast(Ray ray, out RaycastHit hitInfo)函数16,获取存有射到的物体的相关信息的RaycastHit类型返回值,在其中可以获得碰撞体的Collector组件信息,从而获得碰撞体的所有信息。新建一个RayCollector类将游戏中所有由玩家自身发射射线观察物体的操作写入:1. Vector2my_center=newVector2(Screen.width/2,Screen.height/2);/屏幕中心2. publicstaticRaycastHit_taghit;/射线碰撞目标3. float_arm=1.5f;/手臂长度4. publicstaticbool_iscatchset;get;=false;/检测是否射到物体5. Objattribute_tage;/手抓到的目标6. 7. voidUpdate()8. 9. Rayray=

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 期刊短文 > 信息管理

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

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