基于Unity3D生存解谜游戏设计与实现(v1.1).docx
基于Unity3D生存解谜游戏设计与实现(v1.1) 基于Unity3D的生存解谜嬉戏的设计与实现 Design and Implementation of Survival Puzzle Game base on Unity3D 内容摘要 自我国进入二十世纪八十代以来,国民经济如日方升,人民的生活方式也面貌一新,慢慢地人们对消遣的需求越来越大,消遣的方式也变得越来越多样化。然而电子嬉戏作为年轻一代的主要消遣方式,其地位在年轻一代的心中也愈发重要。许多人都会通过嬉戏的简洁操作完成好玩的任务,获得放松与欢乐;通过角色扮演,在虚拟世界中找寻嬉戏的快感。2020年各行各业都受到了肯定程度的冲击,嬉戏行业的发展也将充溢了新的机遇和挑战。 本文主要阐述的是The twelfth door的具体开发过程,包括我的探讨思路、该嬉戏的开发环境以和开发工具、嬉戏的需求分析、嬉戏素材的收集以及嬉戏功能的实现。The twelfth door是一款基于Unity3D嬉戏引擎的生存冒险解谜类嬉戏,玩家须要通过扮演冒险者的角色,通过信息和物品的收集,解决每一个房间里面的谜题,才能对应打开每一个房间的门,通过十二扇门即可获得成功。该嬉戏主要考验了玩家的视察实力、解决谜题的实力、手动收集信息和物品的实力,更多地须要玩家自己去探究和探讨。本项目主要涉及到了Unity中场景的搭建、UI界面的设计、动画的创建、player玩家的移动与摄像机的跟随、背包系统的设计与实现和Event System响应事务。利用Autodesk 3ds Max 2014和Maya 2014进行建模,Unity3D引擎进行嬉戏设计,C#脚本语言编写嬉戏代码。 关键词: 电子嬉戏 角色扮演 Unity3D 解谜 Abstract Since our country entered the 1980s, the national economy has been rising rapidly, and the way people live has also been changed. peoples demand for entertainment is increasing, and the ways of entertainment are becoming increasingly pluralism.However, as the main entertainment method of the younger generation, the status of electronic games are becoming more and more important in the younger generations mind.Many people will complete the interesting tasks through the simple operation of the game to get relaxation and happiness; through role playing, look for the thrill of the game in the virtual world.In 2020, all trades and professions have been impacted to a certain degree, and the evolvement of the game industry will also full of new opportunities and challenges. This article mainly describes the detailed development process of The twelfth door, including my research ideas, the development environment and development tools of the game, the demand analysis of the game, the collection of the game materials and the implementation process of the game functions. The twelfth door is a survival and adventure puzzle game based on the Unity3D game engine. Players need to solve the puzzles in each room by playing the role of an adventurer and collecting information and items in order to open each room.Open all the doors and you can win this game.The game mainly tests the players ability to observe, solve puzzles, and collect information and items manually. It requires more exploration and research by the player. This project mainly involves the construction of scenes in Unity, the design of UI interfaces, the creation of animations, the movement of player players and the follow-up of cameras, the design and implementation of backpack systems, and the Event System response events. Use Autodesk 3ds Max 2014 and Maya 2014 for modeling, Unity3D engine for game design, C # scripting language to write game code. Key words:Electronic Game Role-Playing Unity3d Puzzle solving 目 录 第一章 绪论 1 1.1 课题探讨的背景与意义 1 1.2 国内外相关探讨状况 2 其次章 相关技术介绍 5 2.1 开发工具 5 2.1.1 Unity3D嬉戏引擎简介 5 2.1.2 3d Max简介 5 2.2 开发语言 6 2.2.1 C#语言简介 6 2.3 嬉戏开发环境 6 第三章 嬉戏的需求分析 7 3.1用户需求分析 7 3.2功能需求分析 7 3.3数据存储需求分析 8 第四章 嬉戏的整体设计 9 4.1 嬉戏的主要架构设计 9 4.2 嬉戏的剧情设计 9 4.3 嬉戏关卡设计 10 第五章 嬉戏的具体设计与实现 11 5.1嬉戏的场景搭建 11 5.1.1起先场景UI设计 11 5.1.2嬉戏场景搭建 11 5.2物品道具的设计 12 5.2.1物品道具动画设置 12 5.2.2物品道具的生成 14 5.3 角色的移动 15 5.4摄像机跟随 15 5.5背包系统的实现 16 5.5.1 搭建背包的UI 16 5.5.2 背包数据存储 17 5.5.3 展示物品信息 19 5.5.4 实现鼠标拖拽物品 22 5.6线索提示 23 5.6.1 干脆线索 23 5.6.2 嬉戏线索 24 5.7响应事务 25 5.8 数字密码锁的设置 26 第六章 嬉戏测试 28 6.1嬉戏功能测试 28 第七章 总结与展望 29 7.1总结 29 7.2展望 29 致谢 31 参考文献 32 第一章 绪论 1.1 课题探讨的背景与意义 当今社会,电子产品越来越得到普及,我们的网络环境也越来越得到普及和完善。自我国进入二十世纪八十年头以来,国家经济如日方升,国民除了满意自身的基本生活需求以外,也慢慢关注到精神层面上的需求。因此人们对于消遣的需求也越来越大,消遣的方式也变得越来越多样化。近年来,嬉戏产业的发展蒸蒸而上和网络技术的日益进步,就是像是电子嬉戏的催化剂,极大地推动了电子嬉戏的发展。与此同时,由电子产品衍生而来的电子嬉戏快速收到广阔玩家的青睐,各种电子嬉戏如雨后春笋般涌现,电子嬉戏越来越成为人们日常生活中不行或缺的一部分。 电子嬉戏其实是数字媒介的一种,同时也是现代普罗大众自我消遣的一种方式。嬉戏里面的角色丰富多样,人物特性显明、富有心情、血肉饱满,再协作上特定的故事或者历史背景,加上适当的背景音乐,让人仿佛置身其中。电子嬉戏变更了我们的生活方式、消遣方式和交友方式。RPG嬉戏,也就是我们常常所说的角色扮演类嬉戏,须要玩家扮演嬉戏世界当中的主子公,通过角色扮演完成相关嬉戏情节,在嬉戏世界中获得快感。角色扮演类嬉戏不仅仅对玩家起到肯定的减压效用,还可以训练玩家的抗压实力、生存实力、社交实力和信息搜寻的实力。有的人认为嬉戏是另外一种人生,在开发者所构建的虚拟世界里,你可以透过角色扮演体验到在现实生活中体验不到的世界,做任何你想做的事情,从而得到满意。在适当的时候去玩上一把嬉戏,除了可以帮我们褪去工作的负担,还可以带给我们即时满意的快感。有的时候玩嬉戏不仅仅是在玩嬉戏,虚拟的嬉戏世界就像是一个巨大的社交平台。通过嬉戏,你可以获得较为真实的社交体验,可以相识到志同道合的嬉戏好友,收获满满的友情。当然,因嬉戏之缘,收获爱情的人也比比皆是。电子嬉戏的受众相当广泛,它不仅面对年轻一代的玩家,就算是小孩或者老人也同样适用。嬉戏的意义在于消遣,但并不局限于此。目前许多的嬉戏都被给予了宣扬和教化的重大意义,把嬉戏和教化学问有机地结合起来,那么我们就可以在嬉戏的同时学习到各个领域的其他学问。在消遣中学习、在学习中消遣也未尝不是一件好的事情。因此能够做到寓教于乐,也是嬉戏的一大意义。随着我国嬉戏产业的飞速发展以及嬉戏用户规模日益扩大,嬉戏产业及其衍生的相关行业都创建了巨大的商业价值,对我国的经济的发展起到了特别重要的推动作用。电子嬉戏在经济发展中创建巨大价值的同时,也作为社会文化的重要成分影响着人们价值观念的构建1。电子嬉戏越来越成为当代人的主要消遣方式,在塑造社会文化方面也发挥着极其重要的作用。事实上,大众对待电子嬉戏的看法也是千人千面。无论如何,嬉戏产业也已经快速地成长起来了,嬉戏也成为了当代中国人们生活当中不行或缺的一部分。曾经有国外探讨者指出,嬉戏的最终目的是实现与现实世界的互动,也就是说一款嬉戏的设计应当基于现实的社会生活。将来,我们须要对嬉戏玩家的心理、嬉戏与教化学问的有机结合、嬉戏与现实生活的互动、嬉戏与社会文化的有机结合等等进行更加深化的探讨,信任我国的嬉戏市场也会越来越好。本课题主要结合了RPG嬉戏和解谜类嬉戏的两大特点,让玩家既能体验到角色扮演的快感,也可以享受到解谜和探究的乐趣。 1.2 国内外相关探讨状况 二十世纪四十年头,历史上出现了第一台电子计算机,为互联网时代的到来奠定了坚实的基础。1985年,诞生了世界上的第一款电子互动嬉戏,电子嬉戏也起先进入萌芽初期。二十世纪六十年头,计算机编程语言出现并起先逐步发展。科技发展日新月异,各个领域对计算机技术的需求也不断加大,计算机编程语言起先变得困难化和多样化,大大推动了计算机编程语言的发展。编程语言的出现,大大削减了计算机编程的人力和物力,同时也促进了电子嬉戏的进一步发展。二十世纪七十年头初,嬉戏公司起先出现在大众的视线中,一马当先的就应当是Atari(雅达利)公司了。随后雅达利公司开发出一款可以通过嬉戏主机接入电视运用的嬉戏,使得嬉戏画面第一次在电视上面播放。玩家可以借助其他的协助设备,可以限制人物在电视屏幕上的移动轨迹和操作,使得嬉戏的可玩性大大提高。不仅如此,Atari(雅达利)公司的业务范围起先涉及到嬉戏机的制造,并且取得了非常不错的成果,促进了家用嬉戏机的发展。随后街机嬉戏起先兴起,Atari(雅达利)公司所生产的家用嬉戏机销量急剧上升,玩家可以足不出户就能玩到街机嬉戏,玩家人数也起先增多,电子嬉戏也越来越被大众所接受。九十年头初期,各种电子嬉戏犹如雨后春笋般涌现,电子嬉戏行业发展得如火如荼,渐渐地电子嬉戏行业所带来的巨大商业价值也起先被更多的嬉戏开发商所望见。1889年,一家名为任天堂的消遣公司在日本成立。这家公司成立之初主要负责骨牌扎花的生产,在二十世纪七十年头后期看到电子嬉戏行业的巨大前景后,起先投身电子嬉戏行业,主要嬉戏的开发和嬉戏机的制造。在之后的十年里,任天堂可谓是硕果累累,推出了很多款堪称经典的嬉戏,成为最具影响力的嬉戏平台生产商之一,Atari(雅达利)也渐渐慢慢走向衰落,渐渐退出电子嬉戏的历史舞台。1994年索尼推出了一款名为PlayStation(简称PS)的32位家用嬉戏机,这不仅仅撼动了由任天堂所主导的长达十年的电子嬉戏市场,也大大加快了由2D嬉戏向3D嬉戏迈进的全新篇章。随着科学技术的不断进步,个人电脑的性能进一步提升,大大促进了PC嬉戏的发展。PC嬉戏的出现对嬉戏机的改革也起到了非常重要的促进作用。进入二十一世纪,电子嬉戏行业百花齐放,微软也起先进入大众的视野,凭借着XBox胜利打入嬉戏市场。随着PC嬉戏的快速发展,很多嬉戏厂商也看到了电子嬉戏更多的可能性,研发方向也起先转向多平台研发。2002年,一个名为Steam的嬉戏集合下载的平台诞生,电子嬉戏起先在其他平台得到发展。2008年,支持第三方开发的苹果App Store正式上线,为移动嬉戏的开发奠定了坚实的基础。随着智能手机的推广和普及,移动端嬉戏也迅猛发展起来。近年来,由于虚拟现实技术不断发展,随之出现了虚拟现实嬉戏(简称VR嬉戏),只要你打开嬉戏,连接虚拟现实设备,带上特定的嬉戏头盔,你就可以走进嬉戏的虚拟世界体验身临其境的感觉,使得玩家的代入感越来越强。虚拟现实技术的出现,使得嬉戏从平面真正走向立体,VR嬉戏的发展前景也是一片光明的。现如今,电子嬉戏行业的发展越来越好,嬉戏的画质和清楚度也在不断提升,嬉戏的玩法也更加丰富多彩也更加富有剧情,嬉戏的操作难度也越来越简洁化。简而言之,电子嬉戏行业的发展也正稳步发展中。 虽然中国的嬉戏产业起步相较于国外来说比较晚,但是国内其实不缺乏嬉戏公司,也不缺乏各种各样的电子嬉戏。手游和页游开发和制作周期相对较短,投资回报率相对较高,所以我国的电子嬉戏都是手游和页游居多。目前我国的单机嬉戏发展势头良好,但好像这条道路上也充溢了各种各样的机遇和挑战。从国内最近几年的主流嬉戏来看,大众普遍宠爱的还是手游居多,其中比较受欢迎的有王者荣耀、第五人格、阴阳师、和平精英等等。它们大多都有着精致的嬉戏场景、丰富的嬉戏特效、富有感染力的嬉戏情节和绝美的嬉戏体验。不管是嬉戏操作体验还是嬉戏画面都符合了现阶段广阔玩家的消遣需求。如今中国的嬉戏市场正百花齐放蓬勃发展,玩家对于国产嬉戏的接纳度也不断提高,已经有相当一部分玩家起先支持优秀的国产嬉戏。2019年中国嬉戏产业整体保持稳中向好、稳中有升的良好态势2。依据中国音数协嬉戏工委(GPC)在2019年12月发布的2019年中国嬉戏产业报告(2019 China Gaming Industry Report)显示,2019年中国的嬉戏市场实际销售收入为2308.8亿元,同比增长7.7%,嬉戏用户规模突破6.4亿人2。国内嬉戏市场将会越趋于稳定和成熟。 其次章 相关技术介绍 2.1 开发工具 2.1.1 Unity3D嬉戏引擎简介 说到嬉戏开发工具,我们首先想到的就是Unity3D嬉戏引擎,它是众多嬉戏爱好者和开发者的天堂,它不仅为我们供应了嬉戏开发中所用到的最基本的功能,还支持各种各样的unity插件,利用这一款嬉戏开发工具可以使我们更快更好地完成我们的嬉戏项目设计。它是由Unity Technologies开发的一款具有可视化编辑、属性编辑器以及动态预览功能,以交互图形化为首要方式的综合型嬉戏开发工具,是一个全面整合的专业嬉戏引擎3。它可以让开发人员能够轻松创建诸如3D嬉戏、工业仿真、室内设计、虚拟教化、实时三维动画等类型的应用程序3。Unity3D不仅仅支持3D嬉戏的开发,对于2D嬉戏的开发亦同样适合。Unity3D嬉戏引擎的功能非常强大,支持多种资源格式的导入、支持创建多个基本嬉戏场景、有用于渲染的粒子系统、丰富的动画系统、物理系统、光照贴图系统以及自动寻路系统。Unity3D嬉戏引擎还支持三种脚本语言:JavaScript、C#和Boo,开发者可选择自己最为熟识的一种脚本语言来进行代码的编写工作。另外,在Unity开发的嬉戏可以一键部署到多个平台当中,嬉戏的载体也变得越来越多样化。Unity 可将嬉戏发布至 Windows、Mac、iPhone、WebGL(须要 HTML5)、Windows phone 8 和 Android 平台,移动设备支持虚拟摇杆,大大提高了开发者的开发效率4。Unity3D的自由性大、功能性又好,目前是适用范围最广的嬉戏引擎,也慢慢成为世界范围内的主流嬉戏引擎。作为一款强大的嬉戏引擎,对于嬉戏开发来说,Unity3D确定是笔者的首选。 2.1.2 3d Max简介 3d Max是一款用于三维立体模型创建的软件,其文件的导出格式(.fbx格式)在Unity3D嬉戏引擎中可以兼容并且运用。3d Max界面清爽简洁、操作也相对简洁,因此上手也相对简单。另外,它对于硬件系统的配置要求相对较低,大大节约了嬉戏的开发成本。3d Max拥有强大的角色建模功能以及动画制作的功能,是3D嬉戏角色建模的一大帮手。 2.2 开发语言 2.2.1 C#语言简介 C#语言作为众多高级编程语言当中的一种,它是由C语言和C+语言衍生出来的3。它在继承C和C+强大功能的同时去掉了一些它们的困难特性(例如没有宏和模版,不允很多重继承)3。如今电子嬉戏行业发展得如火如荼,Unity3D嬉戏引擎也被越来越多地用于嬉戏的开发当中,而Unity3D嬉戏引擎目前只支持Java、C#和Boo三种脚本语言,C#语言也是被运用最多的嬉戏脚本语言。所以说,用C#语言来进行整个嬉戏的开发就再适合不过了。 2.3 嬉戏开发环境 电脑型号 DELL DESKTOP-5M7PV2K 操作系统 Win10操作系统 处理器 Intel(R)Core(TM)i5-6200U CPU2.30GHz 2.40GHz 内存 8GB ( 金士顿 DDR3L 1600MHz ) 第三章 嬉戏的需求分析 3.1用户需求分析 2020年是多灾多难的一年,在乍暖还寒的二月,一场新冠病毒以迅雷不及掩耳之势在我国武汉爆发并快速席卷全球。目前,该病毒是众多传染病之中危害最大的一种病毒,它的潜藏期时间长、传播途径广、传播实力强,一旦入侵人体都将有致命的危急。在疫情全面爆发之前,国家快速做出决策,大到武汉封城,建设小汤山医院,小到小区的人流出入管控,我们每个人都不能置身事外。疫情期间,足不出户都在为国家做贡献,此时嬉戏就成为了人们消磨时间、自娱自乐的一大利器。 本项目主要是一款3D的生存解谜类嬉戏,属于益智类的解谜闯关嬉戏。开门是玩家的主线任务,玩家通过角色扮演进入到嬉戏的世界中,利用场景给出的道具获得线索,通过思索和推敲解决设置在每个关卡中的小谜题,即可完成一个开门任务。通过嬉戏不仅仅可以让玩家得到消遣和放松,还可以提高玩家分析问题的实力和逻辑思维实力。 3.2功能需求分析 在本项目中将要实现的功能有UI界面的设计、玩家的寻路和移动、动画配置、背包系统和事务交互系统。 UI界面设计:实现场景跳转、给出帮助信息和退出嬉戏三个功能 玩家寻路和移动:通过寻路网格设置玩家可走区域,实现玩家移动 动画配置:为主要的交互道具设置动画 背包系统:帮助存储物品道具的基本信息 事务交互系统:通过鼠标点击,完成人物与物品道具的交互 图3.2 the twelfth door功能图 3.3数据存储需求分析 在本项目中的数据存储方式主要用到了二进制序列化存储和ScriptableObject类存储两种。其中二进制序列化存储用于一般的物品数据存储,先把须要用到的数据存储到一个类里面,经过封装后,通过外部的方法进行读取和保存。而ScriptableObject类主要用在背包系统的物品数据存储,它是Unity自带的一个类,是一个可存储数据的脚本化对象,是可序列化的。当我们重新运行场景时,可保留这个类里面的数据。 图3.2 The twelfth door E-R图 第四章 嬉戏的整体设计 4.1 嬉戏的主要架构设计 本项目主要设计了两个场景,分别是起先场景和嬉戏场景。在起先场景中主要设置了三个Button按钮,分别是Start起先嬉戏的按钮、Exit退出嬉戏的按钮和Help帮助按钮。当玩家点击Start按钮时,就会进入切换场景,进入嬉戏场景。当玩家点击Exit按钮时,退出整个嬉戏。当玩家点击Help按钮,屏幕中会弹出带有帮助信息的面板,玩家可自行查看嬉戏玩法等具体信息,点击关闭按钮即可回到起先场景界面。 图3.1 嬉戏整体结构图 4.2 嬉戏的剧情设计 在本嬉戏项目中,该嬉戏的名字叫“The twelfth door”,顾名思义也可以叫做第十二扇门。嬉戏的主子公被困在一个房间之中,然而眼前所见并非全部,解开一个房间的门,等待着他的将是下一扇门,当玩家解开全部的门的时候,才会发觉这原来是一个巨大的迷宫,走出迷宫才能获得最终的成功。玩家一起先诞生在一个特定的房间里面,通过收集线索和微小的视察,找到属于打开这扇门的全部信息并触发开门的机关,方能走出这个房间进入下一扇门的空间。在嬉戏场景中我们设置了许多小的物品道具,每一个物品道具都将是解开门的关键信息。 4.3 嬉戏关卡设计 在本嬉戏项目中,只有一个大的嬉戏场景,并没有明确的关卡切换,只是通过打开嬉戏场景中的门进入下一个空间,而这个空间也还是在同一个场景中,所以玩家就只能在一个场景中进行活动。玩家起先嬉戏时,只能在一个房间中活动,但随着玩家解开的门越来越多,活动范围也越来越广袤。 嬉戏规定时长:五分钟 嬉戏规则:玩家通过WSAD或方向键进行移动,鼠标滑动限制摄像机视角,鼠标点击拾取物品并放入背包系统。玩家在五分钟之内,找齐线索解决谜题,打开全部的门并走出迷宫即可获得嬉戏成功。若是五分钟倒计时结束,玩家没有打开全部的门或者没有走出迷宫,嬉戏失败。嬉戏道具:门、神奇的挂画、火柴、毛巾、精灵之家、宝箱、简笔地图 关卡设计(以前面两个关卡举例说明): 第一扇门:门的提示信息为隐藏的五角星。利用毛巾擦拭墙上神奇的挂画,找出隐藏的五角星。所用道具:毛巾、神奇的挂画、火柴 其次扇门:门的提示信息为精灵之家。打开宝箱,找到6个精灵进入精灵之家,完成精灵之间的对消嬉戏。所用道具:宝箱、精灵之家 第五章 嬉戏的具体设计与实现 5.1嬉戏的场景搭建 5.1.1起先场景UI设计 在起先场景中,我们简洁设计了一个UI界面。首先在场景中添加Canvas画布,创建背景面板,分别添加Start起先按钮、Exit退出按钮和Help帮助按钮。当玩家点击Start按钮时,跳转到嬉戏的主要场景中,起先进行嬉戏;当玩家点击Exit按钮时,退出嬉戏;当玩家点击Help按钮时,弹出帮助提示信息面板,玩家可查看帮助提示信息,更好地参加嬉戏。 图5.1.1-1 起先场景 图5.1.1-2 帮助信息面板 5.1.2嬉戏场景搭建 本项目的场景大部分都是利用Unity自带的Cube搭建完成,以Plane作为地板、Cube作为墙面搭建迷宫。在这个大的场景中,我设计了十二扇门(即十二个关卡),利用墙面和门形成了一个个密闭的空间,在空间内部适当添加一些物体便于玩家快速解谜打开十二扇门。 图5.1.2 嬉戏场景图 5.2物品道具的设计 5.2.1物品道具动画设置 在本项目中,我们为物品设置了动画系统,下面主要以门的动画和宝箱的动画来举例。开门的动画:首先创建一个空物体作为门的一个父物体,打开Animation动画面板,点击Add Propetry,选择Transform/Rotation,点击录制,使得门围绕父物体的Y轴旋转90度,最终去掉勾选Loop Time选项,使其不会重复播放动画,完成开门动画的创建。打开Animator面板,添加一个空的闲置状态,使其一起先就进入这个闲置状态,然后点击Parameters添加一个Trigger并且将其命名为push。在闲置状态(idle)中建立一个新的联系到开门状态(open),点击中间的小箭头,在Inspector面板的Conditions中把名为push的Trigger添加进来。实现效果:门一起先属于闲置状态,当玩家按下push键,起先播放open的开门动画,实现点击按钮播放动画的效果。 图5.2.1 开门动画 开宝箱的动画:首先从外部导入一个顶部能够分别的宝箱,打开打开Animation动画面板,点击Add Propetry,选择宝箱的顶部box_top并为其设置动画。点击红色小圆点起先录制,设置宝箱顶部先向z轴平移,然后围绕x轴旋转-40度,最终再向z轴移动一小段距离,点击停止按钮,完成打开宝箱动画的设置。最终去掉勾选Loop Time选项,使其不会重复播放动画。 图5.2.1-2 开宝箱动画 5.2.2物品道具的生成 在本项目中,在每一个房间中都会随机出现一种帮助我们得出最终一个密码的道具,在这里我们采纳Random.Range()方法在使其在一个固定的空间里随机生成物体。首先须要定义一个预制体,通过for循环实现须要生成物品的数量,利用Random.Range()方法在X为1到-10,Y为0,Z为-5到22的区域内随机生成物品道具。把CreatProp 脚本挂载到场景中的空物体上,并把须要生成的物品道具拖拽到prefab当中,运行场景得到该范围内随机生成的物品道具。主要代码如下: 图5.2.2 随机生成道具代码 5.3 角色的移动 Unity中常用的几种实现人物移动的方法主要有以下三种:第一,通过Transforn组件来限制角色的移动,Transforn组件主要供应了三个函数分别是position、rotation和scale,通过限制position的X、Y、Z的值可以模拟角色位置移动。通过限制rotation的X、Y、Z的值可以变更角色的旋转角度。其次,通过添加刚体组件移动,刚体组件通常带有物理特性,可以更好地模拟角色在力的作用移动。第三,通过添加角色限制器组件来实现人物移动。它可以很好地模拟人物的一些动作,比如上坡、跳动等等。在本次嬉戏项目中,我们将运用第三种方法来实现角色的移动。首先,创建一个空物体,命名为Player。在player的子级添加一个capsule,并为其添加角色限制器组件,通过编写人物移动的脚本(PlayerControl),实现角色的移动。主要代码如下图所示: 图5.3 角色移动代码 5.4摄像机跟随 在玩家移动的过程中,要求摄像机跟随玩家移动。我们可以把摄像机拉到player下面,让player作为它的父级,调整摄像机的位置始终在玩家的右后方,这样当玩家移动时,摄像机也会跟着玩家一起移动。在嬉戏中,玩家通常须要获得更加广袤的有嬉戏视角,为此可以通过移动鼠标变更摄像机的旋转角度来实现。首先须要通过Transform获得玩家,定义鼠标移动的值和鼠标的灵敏度,在Updata()方法中获得鼠标X轴和Y轴移动的值,当玩家旋转时摄像机也跟随玩家旋转。这里我们还用到了Mathf.Clamp()方法限制摄像机Y轴的旋转。主要代码如下图所示: 图5.4 摄像机跟随代码 5.5背包系统的实现 背包系统是嬉戏中最常用到的系统之一,嬉戏背包可以增加嬉戏与玩家之间的互动。玩家可以通过嬉戏拾取道具放入背包系统中,打开背包系统,能够直观了解到自己在嬉戏过程中获得的物品道具。也许思路主要是通过玩家操控鼠标点击获得物品,物品会自动添加到我们的背包当中,背包方格的右下角中展示物品的持有数量,点击背包当中的物品,底栏显示该物品的具体信息。设置按下键盘O键打开或者关闭背包系统,通过鼠标拖拽可实现物品之间的位置交换。运用鼠标拖拽可以调整背包的位置。 5.5.1 搭建背包的UI 整个背包主要由背包的父级面板、标题、关闭按钮、格子和具体信息五个部分组成。首先创建一个panel面板并调整好适应屏幕的位置,为其添加背景图片,作为整个背包的父级。在父级下面设置一个Image改名为Title作为背包的标题。在父级面板的右上角添加一个关闭按钮,并为其设置点击事务,把整个父级面板拖拽过去,就可以实现点击关闭按钮关闭背包的功能。添加一个panel用于存放格子,并为其添加Grid Layout Group组件,通过调整第一个格子的大小和每个格子之间的空隙来规范每个单元格的大小。最终在父级面板的底栏增加一个text,用于存放物品的具体详情。 图5.5.1-1 Grid Layout Group的设置 图5.5.1-2 背包UI效果图 5.5.2 背包数据存储 ScriptableObject是Unity自带的一个类,继承于UnityEngine.Object,在本项目中我们利用它来实现背包系统数据的存储。创建一个新的类Item,用于存放物品的全部属性信息,例如物品的名字(itemName)、物品的图片(itemImage)、物品的数量(itemHeld)、物品的具体信息(itemInfo)。主要代码如下图所示: 图5.5.2 Item类 创建一个新的脚本Inventory,用List列表存储我全部的物品。也许思路是当嬉戏角色的鼠标点击到世界地图上面的物品之后,List列表中的物品增加一个,查看当前点击到的物品分别属于那个类,并把item获得进来。首先把物品放置在场景中,为该物品添加一个Box Collider组件并勾选Is Trigger,编写添加物品到背包中的代码。利用 OnMouseDown()方法推断鼠标是否点击了该物品,假如鼠标点击了该物品,则在List列表中存储该物品的相关信息。假如List列表中已经含有该物品信息,则在该物品原有数量的基础上增加一。最终把嬉戏世界当中的物品销毁,并把代码挂载到须要碰撞的物品上面。主要代码如下: 图5.5.2-1 Inventory代码 图5.5.2-2 点击添加物品代码 5.5.3 展示物品信息 创建一个新的脚本Slot,继承Item里面的属性,把脚本挂载到prefab上。在Slot方法中添加一个ItemOnClicked()方法,用于实现点击背包上面的物品弹出该物品的具体信息。主要代码如下: 图5.5.3 Slot代码 新建一个脚本Inventory Manager主要用于限制我们的背包并把脚本挂载到Canvas上。用List列表存放生成的格子,在UpdateItemInfo()方法中,更新物品的具体信息。用 RereshItem()方法获得到ItemLIst里面全部的信息,然后把这些信息传给Slot类,最终在prefab里面展示这些信息。主要代码如下: 图5.5.3-1 Inventory Manager代码 图5.5.3-2 Inventory Manager代码 5.5.4 实现鼠标拖拽物品 打开背包,可以通过鼠标拖拽移动背包中物品的位置,假如拖拽到的格子里面没有物品,则干脆把物品存放在拖拽的格子中;假如拖拽的格子中已经有物品,则格子中的物品与鼠标拖拽的物品位置发生交换。新建一个新的C#脚本,运用UnityEngine.EventSystem事务管理库里面的三个方法,完成拖拽。首先使当前物品的位置等于鼠标点击的位置,运用SetParent()方法更改物品的父级,使其不会被其他的格子拦住。在拖拽过程中,我们须要推断物品重新放置的位置,这里我们会运用鼠标推断射线的方法来实现。假设我们通过点击鼠标拖拽物品时,我们的Main Camera会在按下鼠标的这个位置向屏幕的方向放射一条射线,在最上面的一层会被射线碰撞到,返回这个物品的一系列信息,比如说物品的名字、图片等等。在预制体slot中挂载一个Canvas Group组件,起先拖拽时须要设置Blocks Raycasts为false,这样就可以获得我们当前拖拽的物品信息。在拖拽过程中和结束拖拽时,须要设置设置Blocks Raycasts为true,获得拖拽后格子的物品信息,完成物品位置的交换。主要代码如下图所示: 图5.5.4-1 鼠标拖拽物品 图5.5.4-2 鼠标拖拽物品 图5.5.4-3 鼠标拖拽物品 5.6线索提示 5.6.1 干脆线索 在本项目中是主要通过找出设置在每一个房间中的答案信息从而打开各个房间的门,所以线索提示就显得尤为重要。例如:在第一个房间中,玩家鼠标移动到门的位置,屏幕就会给出一条提示信息,提示第一个房间中的信息就是要找到隐藏的五角星;鼠标离开则提示信息自动消逝。首先我们在Canvas画布中添加一个panel,在panel中添加一个text,把我们须要给出的提示信息记录在text中。这个时候我们须要用到的是UI事务当中的Pointer指针事务,当我们的鼠标指针与UI物体进行接触时,就会触发相应的指针事务。也就是说,当鼠标移动到该物体上,屏幕给出相应的提示信息;当鼠标离开该物体,屏幕上面的提示信息对应消逝。主要代码如下: 图5.6.1-1 鼠标指向给出提示信息 图5.6.1-2 线索提示效果 5.6.2 嬉戏线索 在本嬉戏中除了鼠标检测到物体给出的干脆线索外,还设计了嬉戏线索,即通过完成简洁的嬉戏来获得线索。例如在其次个关卡中,我们设置了简洁的对消嬉戏,玩家通过每次点击两张卡片,完成对消,获得开门的密码。若点击的两张图片相同,则显示胜利的图片;若两张图片不相同,则返回可重新点击。 图5.6.2 线索提示效果 5.7响应事务 Unity嬉戏引擎中供应了一套完整的事务响应系统,因此我们可以很好利用它来实现的我们所须要的功能。例如:在第一个房间中,玩家须要找到隐藏的五角星方能打开第一扇门。主要设计方案是当玩家找到隐藏的五角星(即点击五角星所在区域),第一个房间通关胜利,第一扇门自动打开。首先我们要在场景中添加一个EventSystem,然后在挂载Main Camrea的player中添加一个Physics Raycaster组件,添加一个Cube将它设置为按钮并添加box collider碰撞组件,最终添加Event Trigger组件,把预制体Door1拖拽到Event Trigger组件当中,选择Animator.SetTrigger方法,实现点击button按钮打开门,并播放开门的动画。 图5.7 Event Trigger的配置 5.8 数字密码锁的设置 在本嬉戏项目中,我们用到了许多输入数字密码开锁的功能。在嬉戏场景中,当玩家拿到解锁的密码后,这时候就须要进一步的解锁动作,这里我们用数字密码锁实现。大致思路是当玩家输入正确的数字密码,点击确定按钮,