游戏设计与开发详细设计_第1页
游戏设计与开发详细设计_第2页
游戏设计与开发详细设计_第3页
游戏设计与开发详细设计_第4页
游戏设计与开发详细设计_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中国矿业大学计算机学院本科生课程报告课程名称游戏设计与开发报告时间学生姓名学号专业任课教师任课教师评语任课教师评语(①对课程基础理论的掌握;②对课程知识应用能力的评价;③对课程报告相关实验、作品、软件等成果的评价;④课程学习态度和上课纪律;⑤课程成果和报告工作量;⑥总体评价和成绩;⑦存在问题等):成绩:任课教师签字:年月日摘要为了学习Unity3D游戏引擎,为了进一步了解并熟悉该款引擎,本文描述了如何制作了一个三维的RPG类游戏项目,这个游戏的背景来源于一部叫做《草原历险记》的电影。通过对该项目的制作和学习,来了解用Unity3D开发游戏的利与弊,以及这款游戏引擎未来的优势。本文所述的游戏项目开发所用的开发工具是Unity3D自带的开发工具,叫做MonoBehaviour,选择的开发语言是JavaScript。该游戏项目是一个小型的3D游戏制作,开发周期短,实现所涉及的技术也是学习Unity3D必备的一些知识,但是也是一些重要的基础知识,很多其他的Unity3D游戏制作,也是通过把Unity3D的各个功能模块一点点组织拼接起来而成的。关键词:Unity3D;游戏引擎;语言开发环境;RPG游戏。AbstractInordertoknowandlearnmoreaboutUnity3Dgameengine,thispapersdescribeshowIdevelopaparkourgameprojectwhosebackgroundcomesfromamoviecalledFrozen.Throughthestudyofthisgameproject,wewillgettoknowtheprosandconstousethegameengineandit’sadvantageofthefuture.Wedidthisgameprojectusingit’sowndevelopmenttoolnamedMonoBehaviour.WeusedJavaScriptasitsdevelopmentlanguage.Thisisasmall3DgamewithshortdevelopmentperiodandsomebasictechniqueswhichareimportantknowledgeManyotherUnity3DgamesaretheunionofsomeUnity3Dfunctionparts.Keywords:Unity3D;gameengine;languagedevelopmentenvironment;RPGgame.目录1概述 页1概述1.1游戏类型偏向动作的冒险类游戏(RPG)1.2内容概述这款游戏是一个简单的3d动作游戏,角色控制一个小机器人。为了克服前行道路上的障碍,他使用他的能力来改造和重新设计自己。1.3核心概念这款游戏的核心概念类似于当前流行的动作冒险游戏,集逃亡、寻宝、打斗为一体,并在形式上有所创新。游戏只有一个机器人主角,玩家可控制该机器人穿过森林、山丘、平原等险恶环境,并在前行的过程中同其他机器人作斗争,通过克服险恶环境和打败敌人来提升自己的力量,还可通过找到补给站的方式不断补充能量和生命值,并最终胜利到达目的地。1.4目标人群以青少年为主,不要求具备丰富的游戏经验。1.5收费设定设计原则:让玩家的消费能得到实际的好处,感觉“赚了”而不是“亏了”。消费引导:分级消费+消费前置。分级消费:对于缺乏消费能力的玩家,如果一开始就看到太多超出自身能力的消费,便会因门槛太高而放弃游戏,但如果收费的额度根据玩家的VIP等级来设定,以层层递进的方式引导消费,玩家就会更容易接受。消费前置:将欲取之必先与之,对于付费带来的好处,可以让玩家先有所体验,以此来促进消费,比如赠与有时限的VIP、赠与紫色套装的部件等。1.6主要特点单机化倾向和策略性。单机化倾向:页游玩家的时间较为零散,难以在短时间建立牢固的合作关系,为了降低交互门槛,游戏内大多玩法都采用SNS游戏异步交互的形式,且前期以体验剧情为主,但人与人之间的关系往往是让玩家留在游戏的重要原因,故游戏后期会加入大量以帮派为单位的活动。策略性:首先,玩家的选择是多样的,对于机器人的形式可以有多种选择,每一个小的关卡都有多种通关策略;其次,冒险类游戏对战术的制定与执行都有很高要求,只要操作得当便可战胜强过自己的对手。1.7玩家的追求点核心追求:玩家对于探险冒险的追求。长期追求:拓展剧情、通过精英关卡、竞技场名次、副本进度。短期追求:装备等级、冒险等级、通过关卡等级。1.8游戏竞争分析采用3D画面,制作精良、逼真。易于上手,能够抓住玩家的心理,激起玩家对于胜利的渴望,促使玩家继续玩下去。针对当前市场3D游戏大多过于复杂,操作不太方便,本款游戏风格简洁,清新自然,各种游戏元素引人入胜,音响效果出色。另一个亮点就是增加了环境陷阱,玩家在对付敌人的同时还得注意周围的环境。1.9独特卖点第三人称视角,视野辽阔,让你仿佛置身于游戏场景中,与角色融为一体,角色的成长就是你的成长,角色的情感就是你的情感,角色的胜利就是你的胜利!1.10游戏的主要玩法多人副本:形式:参考《魔兽世界》的副本设计,每一个boss都会有个性化的技能,玩家需要根据其特点来选择不同的应对策略。目的:难度较高,对玩家间的配合要求较高。作用:高级装备的主要来源。1.11游戏背景与代入感游戏背景:我们的主角正坐在一条运输船上,心情很复杂。他自己的国家被叛军围困了,国王命令他前往邻国搬救兵。不幸的事情发生了,船体由于受到激流的影响撞到了暗礁,船沉没了,他游到了下游的森林的岸边。由于刚才事故的影响,他发现自己的一些零件已经受到了损害,他必须找到地方对自己进行维修。他不知道他现在在什么地方,但他可以看到远处的摩天大楼的轮廓。他知道这就是他的目的地。为了完成自己的使命,他艰难地踏上了行程。很快,他遇到一个老路标站,这似乎是破旧的,已经坏了。这些旧站用于提供旅行机器人燃料和提供维修服务,但由于近年来航空旅行变得更加普遍,他们已经不再使用。为了克服前行道路上的障碍,他准备使用其服务,他开始寻找一种方法来修复自己。1.12游戏的后期开发用多种表现方式来延长数值区间,虽表现形式多样,但都是对数值的不断提升。针对数值的加成,设计相应的表现途径。1.13文档目的综合考虑到游戏的各个环节,使各零散系统相辅相成,关联成统一的整体,尽量避免开发后期对重要模块的修改。在设计初期考虑收费点、玩家追求、新手引导等重要环节,避免游戏成型后再生硬的加入这些设计。2主要玩法2.1剧情副本2.1.1设计原则平滑:副本间坡度平缓且副本数量多,玩家每一次能力的提升都会在剧情副本中得到及时的展现。2.1.2游戏定位1、承载游戏世界观。2、提供原始的装备积累(健康点和能量点等)。3、提供不同形式的武器。2.1.3收费点能量点和健康点的购买,增加副本的次数。2.1.4主要特点NPC参与:NPC会参与作战,一方面是为了更好的推动剧情,另一方面是在副本难度较高时帮助玩家顺利通过。难度分级:普通关卡只有一个难度,BOSS关卡会有普通和精英两个难度。副本评分:根据通过副本的回合数、剩余HP等因素对副本进行评分。2.2日常副本2.2.1设计原则基于冒险类游戏的特点,上手容易但策略性强,满足付费玩家和高端玩家的需求。2.2.2收费点增加每日副本的次数。2.2.3主要特点随着玩家能力的提升,可通过的关卡也会提升,主要由玩家的输出能力决定体现人民币玩家的优势。3游戏结构3.1核心游戏玩法游戏的玩法实际上就是玩家在不同的地图中一路前进,途中遇到不同的敌人,都需要将其一一打败,最终在关卡处玩家要打败多个Boss才能通关。3.2游戏方式3.2.1攻击阶段游戏的玩法非常简单。玩家可以沿着地图一直向前行进,玩家的攻击招数包括拳击,腿部攻击,兵器攻击。最后,游戏中的四个boss都有各自的绝招。玩家的生命也是有限的。3.2.2奖励阶段奖励阶段出现在攻击阶段之间,玩家在生存下来之后,获得一段短暂的休息时间作为奖励,当玩家受到的伤害玩家可以通过休息恢复一些生命。4游戏过程描述游戏开始-->说明-->游戏-->提示框4.1游戏开始阶段游戏开始时,应该有一段开场白,由电影或小动画构成。4.1.1说明模式当游戏未开始游戏时,《神龟闯关》会进入说明模式。在这个模式下,屏幕显示一些指示说明和高分,按下任意键开始游戏。4.1.2游戏模式这是游戏的主要娱乐模式。4.1.3提示框玩家在游戏的过程中将获得不同的提示,包括游戏的技巧,游戏的操作方法,以及游戏的打斗技巧,玩家需要根据不同的提示做出相应的操作。4.2游戏要素4.2.1玩家玩家控制一个机器人,扮演游戏的主角。4.2.2其他人物反派人物包括一些小喽啰,小兵,以及最终的Boss。它会上下左右在没有玩家的地方游动。5主要系统5.1设计原则连贯、简单、智能。连贯:节奏连贯,两回合之间不会专门留下等待操作的时间,需要玩家在回合内完成操作。简单:玩家参与战斗,可以什么都不做,系统会自动释放技能;可以只选择技能,系统会帮助玩家选择最合适的对象;也可以既选择技能又选择技能对象。智能:系统会根据boss的特点合理的选择技能与技能对象,使玩家重战术而轻操作。5.2主要特点回合制的战斗方式5.3角色设计机器人开始的时候能够使用一个简单的泰瑟枪攻击——一个短距离范围效果攻击,可以给任何周围的机器人造成少量伤害。他还可以使用泰瑟枪来重启任何机器人的驿站来补充泰瑟枪的能量。一旦他开始同该地区以外的城市的机器人战斗,他可以收集敌人掉落的零件,诸如齿轮零件,螺丝和其他更大的块。如果他集齐足够多的零件,他就可以为自己建立一个新的形式,玩家可以自由切换。不论机器人以何种形式存在,他总是保留加速和跳跃的能力。机器人的既有健康点和能源点是他的两个主要统计数据。如果他的健康状况下降为零,在受到敌人攻击或环境损害之前,他必须到达最近的中转站来重启自己。他利用能源来提高速度和在不同形式之间进行转换。进入中转站之后他的能源点和健康点又能够恢复正常。5.4.角色成长机器人在该游戏中有四种形式泰瑟枪形式:小部件的基本形式,他的特殊能力需要的形状,可以对周围任何事物造成少量伤害,它也可以用来启动破碎的机器人。防卫形式:当机器人获得一定的能量和积分后,可以自动生成一个盾牌来抵挡攻击者的攻击,主要用于防御。当时机合适时,机器人可以通过抛出盾牌来给敌人以一定的攻击。格斗形式:在这种形式下,机器人的身体会自动生成一个爪钩。机器人可以用爪钩可以射杀敌人,还可以利用爪钩让自己悬挂在悬崖上,让自己摇摆到另外的一个环境中。翼形式:在这种形式下机器人身体长出金属翅膀,让他从一个平台到另一个滑翔(但不是飞——他需要立刻解决或找到其他方法来真正提升自己)。翅膀也给他一个大范围效果(面积效应)攻击,翅膀周围形成能量漩涡,能够对严周围的任何东西造成严重的损害(比泰瑟枪的伤害能力更大)。这种攻击而更具破坏性,需要更长的时间来发动技能。一旦机器人获得一种新形式,一个按钮将出现在界面接口上,允许玩家切换可用的形式,当然得提供相应的能量。6游戏世界这里的世界布局包括五个不同的地区,每一个组成一个完整区域(某些地区可能会分成多个区域,这取决于其大小和复杂性)。玩家开始处在森林的区域,在一个小空地残骸包围圈中。起伏的平原森林中点缀着零零星星的树。小的道路蜿蜒穿过平原,最终结束在一座别墅的前面。穿过别墅,一个新的路径继续通过肥沃的牧场和农田。这里海拔开始逐渐升高,玩家的跳跃和追逐变得越来越困难。通过梯田农田后,机器人到达了荒凉的岩石区,这里非常陡峭,到处都有峡谷和风车。风车被电线和远方的城市连接起来,不断地输送着电能。在这里机器人为了在陡峭的悬崖上行走需要学习使用爪钩。在悬崖的顶部上,现在可以清晰地看到这个城市坐落在山谷中。这时机器人使用他的新滑翔能力,可以机动的路上,避开障碍物和其他飞行机器人。在悬崖底部,一个巨大的哨兵机器人守卫着城市的入口。这时机器人别无选择,为了完成自己的任务,他必须战胜这个大机器人。7游戏世界区域分解及剧情设计7.1森林机器人开始在森林地区,游戏开发者可以设计一个小地方作为安全区域,在这里玩家可以学习基本控制操作。练习结束后玩家遇到一个破旧的中转站,在这里得到他的第一个武器—泰瑟枪。当机器人进入恢复好的中转站后,通知机器人各种部件的使用方法,告诉他要小心。机器人必须用最后的能量来分解路径以顺利地通过废墟。7.2平原这个地区覆盖广泛,点缀着零零星星的树和花。小的道路蜿蜒穿行其中,在这里要提醒玩家应该往哪个方向前行,但是他也可以探索其它的地方。兔子形状的小型野生机器人和其他啮齿动物漫步在平原中。这些可怜的老机器人被先进的城市无情地抛弃,它们盲目攻击任何十字架状的东西。道路的尽头是一个漂亮的别墅,进入院子,机器人享受到了补充能量的服务。在补充完能量之后,机器人需要打败一个boss来获得进入下一个区域的权限。7.3农场机器人然后开始探索不断攀升的农场和牧场。机器人需要使用他的新形式以抵御新机器人的攻击,他们中的许多人拍小炮弹或扔石头。玩家还需要变得更善于跳跃,因为农场的地形是跌宕起伏的。顶部的农场在一个大的露台上,这里有另一个mini-boss——愤怒的拖拉机机器人。他不喜欢机器人在他的作物上滚,因为这样破坏了作物。他想要把机器人撕成碎片。拖拉机机器人不可战胜,玩家必须转移或避免。这时玩家要把机器人变换成防卫形式。成功躲避拖拉机机器人的攻击后,机器人到达一个可以塑造临时爪钩的中转站。7.4风车山之后下面的区域急剧上升,裸露的悬崖和岩石露出。在这更贫瘠的区域上覆盖着风车。利用他的新爪钩,机器人可以利用岩石峭壁把自己推到新的高度。聪明的玩家将使用风车上的爪钩,这样可以把机器人扔到很远的区域隐藏起来。在悬崖的顶部,风车机器人在等待着机器人。这个风车的移动速度非常快,它使用风车叶片的旋转剑,降低他们来攻击地上的机器人。机器人这时可以变换出他所有的形式,还可以使用爪钩扔石头。风车机器人在空中飞行着对机器人发动攻击,因为他的速度非常快,所以机器人必须和他保持着安全距离。7.5城市机器人的下一个到达地区是山谷城市所在地,这时他必须使用新的滑翔能力。这感觉更像一个滚动的赛车,球员需要控制机器的方向和攻击任何靠得太近的事物。这个区域没有boss,玩家可以节省在到达最后的中转站之前的能量。7.6护卫室现在机器人终于来到了这座城市,他必须战胜守卫在门口的哨兵机器人。这个boss使用近战和防御姿态,玩家必须切换不同形式来应对boss的一举一动。击败了boss后,玩家终于进入这座城市,完成了他的任务。7.7驿站驿站分散在世界各地用于多种目的,他们给机器人提供免费的健康点和能源点,并拥有修复机器人存储的能力。商店总是允许机器人卖回他多余的物品,如额外的螺丝,齿轮和修理工具。并且,如果机器人有一定的组合项目的库存,他可以通过交易来获取一种新形式。8玩家界面8.1说明/高分界面在图示上有一些简单的说明,以及得分列表。高分会被保存下来。并且,在此点击任意键开始游戏。8.2游戏控制机器人是由键盘控制,用箭头或WASD键控制运动和特殊分配键映射到增强能力,逃避和跳跃功能。使用鼠标选择界面上的按钮,如果玩家喜欢,也可以映射到特定的键。8.3基本的战斗1、右击攻击。每个转换都有自己的攻击动画。2、敌人遵循两种基本模式。3、当玩家敲击GotHit动画,把玩家推离敌人。4、如果击败敌人,敌人就消失了,在设定的时间后重生。5、如果机器人被打败了,需要重生,当然需要付出能量值。9多媒体素材9.1美术主要有游戏的地图设计,包括森林、平原、农场地图以及城市地图。9.2音乐音效9.2.1整体目标该款游戏的音乐应该带有武侠的风格。格斗的声音会经常发出,音乐应该制造紧张感和兴奋感。9.2.2音效5~10种不同的打斗音效多个人物的特色音效。9.2.3音乐游戏开始时的音乐攻击阶段的音乐新游戏/狂暴模式的音乐每一关结束的音乐高分的音乐。10玩家的体验流程10.1新手引导10.1.1引导内容一些操作是玩家必须掌握后才能进行游戏的,新手引导着重对这类操作进行指引。其次是对游戏的亮点进行展示,比如一些特色的系统、深刻的剧情或优美的场景。再次是对一些攻略性的内容进行指引,使玩家能够快速的理解游戏模式。1、剧情副本让玩家了解游戏背景,学会如何进入剧情副本剧情副本从画卷中展开,画卷为地图关卡,首先出现简单癿文字介绍历史,之后大陆被切割成几块,玩家点击进入。2、接交任务让玩家在不知做什么癿时候形成查看任务癿习惯引导玩家查看当前任务,在任务完成时提交。3、使用技能让玩家学会如何使用技能战斗中引导玩家点击技能栏图标使用技能。4、使用装备让玩家学会如何使用装备打开道具栏,双击装备。5、进入家园让玩家学会如何进入家园点击主菜单进入家园。6.、恢复PP让玩家学会如何恢复PP。7.、强化装备让玩家学会如何强化装备8.、消费指引进行付费癿挃引增加训练位置,让玩家更好癿10.1.2引导方式操作流程:每步引导都是一个任务,让玩家形成习惯,从任务中查看下一步做什么。每步引导都有“下一步”的按钮,且位置不变,玩家可以不移动鼠标点击“下一步”来。通过引导:如果玩家长时间未操作,引导会自动进行。指引方式:将玩家的短期目标罗列出来,让玩家明白当前操作的目的。当玩家完成一些任务步骤后会有成就提示,一些高额奖励也会突出显示。NPC贯穿新手指引,他会和玩家并肩作战、也会帮助玩家完成强化、训练等操作功能随着等级的提升而开放,对于玩家暂时无法体验的功能将屏蔽入口。在新手阶段之后,引导方式变为条件触发,当玩家有需求时才进行引导。11开发环境(Unity3D)介绍11.1Unity3D简介Unity3D是由UnityTechnologies开发的一个游戏引擎,操作界面如下图1.1所示,它集快速性交互性于一体,带有强大的渲染引擎,对DirectX、OpenGL拥有高度优化的图形渲染管道,能够允许开发者能够高效直观的开发出2D或者3D游戏,是一个全面整合的游戏引擎。并且,Unity3D游戏引擎能够十分方便的将开发出

的游戏发布到各个平台,如iPhone、Android等平台。此外,还可以用UnityWebPlayer插件将作品发布成网页游戏,玩

家只需下载这个很小的插件就能轻轻松松的玩Unity网页版游戏。Unity3D游戏引擎通过使用植被系统Unitree,提供了大量的Shader供开发者使用,这些Shader完全足以满足开发者的需求,使得即使在低端硬件设备下也

够运行广阔茂盛的植被景观。打开地形编辑器,从左到右依次是:地形拉升降低、准确的绘制地形高度、地形圆滑、地形文理绘制、地形植被绘制树木、地形植被绘制-草及小物体、地形参数设置。另外,它支持所有主要

的文件格式,并能和其他应用程序协同工作。它还用了PhysX的物理引擎,使得开发者能够轻松的实现各种物理效果。Unity游戏引擎提供了柔和阴影与烘焙的高度完善的光影渲染系统,它的着色器整合了易用性、灵活性和高性能的特点。目前,Unity3D游戏引擎最新版本是Unity4.0,它能将你的作品发布到MAC、Windows、安卓等十个以上当今盛行的平台。此外,购买功能更加强大的正版Unity3D游戏引擎,经授权之后可以安装在2个不同的系统,如一个Windows,一个Mac,官方网址是。Unity3D游戏引擎研讨会正在茁壮发展。第一次Unity3D游戏引擎研讨会是在2010年5月,举办地点是在韩国,引发了许许多多的商家投资并签订了引擎预定协议。亚洲作为Unity3D游戏引擎公司的一个重要战略地,2013

年在上海举办了研讨会。不久Unity3D游戏引擎公司又宣布取消支持对Flash的支持。11.2Unity3D语言开发环境及开发工具Unity3D是一款综合型的游戏开发引擎。其中MonoBehaviour是该公司自己开发的一个编译工具,自然跟Unity3D是十分兼容的,比如调试等就十分方便。当然,也可以选择自己的编译工具,如VisualStudio2010,只需要在菜单里面设置一下默认编译工具就行,这样在你创建并打开代码文档时就默认打开了你所设置的编译工具。目前,Unity3D只允许3种编程语言:C#、javascript、Mobo。其中C#运用较为广泛,因为它的兼容性比较好,便于更好的发布到各个平台。11.3Unity3D应用目前,用Unity3D游戏设计引擎开发手机游戏的比较多,如勇者之心、神庙逃亡系列、愤怒的小鸟等;也有用来开发单机游戏的,如轩辕剑六、捣蛋猪等;网页游戏诸如新仙剑Online、QQ乐团等。在虚拟现实方面,只需要将在Maya或者Max等其他三维软件里面做出的模型导出为fbx格式,然后导入Unity3D,设置摄像机代

码、UI、Build。11.4需要解决的问题11.4.1游戏项目中要解决的问题游戏项目要解决的问题很多,所以最关键的是先要管理好资源文件,分类明确有条理。在项目文件的预设目录下,共创建了8个文件夹,分别存放动画文件、材质文件、模型文件、Prefab文件、场景文件、代码文件、音效文件和纹理文件.11.4.2碰撞检测问题Unity3D中实现碰撞检测的方式有两种:碰撞器和触发器。碰撞器有很多的种类,如盒子碰撞器、球形碰撞器、胶囊碰撞器等,要使用这些碰撞器都必须把该碰撞器组件添加到一个游戏对象上面。如果在检视面板中勾选了IsTrigger,那么就成了触发器。下面介绍MonoBehaviour类里面两个函数:1、MonoBehaviour.OnTriggerEnter(Collidercollider)进入触发器。2、MonoBehaviour.OnCollisionEnter(Collisioncollision)进入碰撞器。本游戏项目所涉及到的碰撞检测都是进入时的检测,即刚发生碰撞,没有退出和逗留时的碰撞检测,所以另外四个接口函数就不在赘述,添加碰撞检测组件碰撞检测器。添加方法:Component->Physics->Collider;Component->Physics->Rigidbody;IsTrigger属性在勾选状态下,那么该对象就是触发器。下面其它参数则是设置碰撞体的大小、半径。Mass是质量,Drag是阻力,AngularDrag是角阻力。UseGravity是否使用重力,如果勾选物体将相对向下做自由落体运动。IsKinematic是否相对地面静止,如果勾选物体将相对地面静止。Constraints属性块是设置物体的位置和旋转是否静止,例如勾选了FreezePositionZ那么物体在Z轴方向不能移动,用脚本也不能让它移动;这是很必要的,比如你做的是一个2D游戏,自然不希望它在Z轴发生移动而影响碰撞检测。11.4.3粒子系统Unity3D自带的粒子系统完全足以满足开发者各种这方面的需求,比如在制作烟雾、云雨、爆炸、火焰、天气等。在创建好游戏对象并添加粒子系统组件之后,正如你所见的,会出现很多属性。参数设置在运行后出现的效果是一个下雪的效果。具体各个参数的意思,在这就不赘述了,举几个常用的参数。Looping是否循环,比如此下雪的粒子效果,当然要他循环,再如爆炸之类的就不需要循环。StartSpeed初始速度,可以设置一个参数,也可以设置两个,即在这两个参数之间随机产生一个参数,这个比较常用,StartScale用法与StartSpeed类似11.4.4函数不管用什么编程语言,创建的脚本都必须继承MonoBehaviour类,他包括了许许多多的函数,诸如上述的碰撞检测函数。如果在检视器里面修改了脚本文件的名称,一定要记得在编译器里面修改类名,不然就会出现异常的错误。这里介绍几个常用的函数。MonoBehaviour.OnGUI()接口有许多的属性,如GUI.Label用于绘制列表,它有6个接口:像游戏分数统计等,又如GUI.TextArea用于绘制文本区域,它有4个借口,这里不再赘述。最常用的是GUI.Button,设置各种按钮。所有的GUI属性都可以在检视器里面创建一个GUISkin,来设置个性化的按钮、图片背景等。其中mySkin用来接收在检视器窗口创建的GUISkin游戏对象,在游戏对象里面你可以指定个性化的按钮图片,可以是两张,一张是正常情况下的大小,指定在CustomStyles的Normal和OnNormal属性上面,一张是鼠标移动上去的大小,指定在CustomStyles的Hover和OnHover属性上面,这样就会达到鼠标移动上去按钮变大的效果。2、MonoBehaviour.Start和MonoBehaviour.Update函数。MonoBehaviour.Start函数就是对游戏的一些预设,并且在游戏执行的整个周期中,此函数只调用一次。比如隐藏光标:voidStart(){Screen.showCursor=false;//隐藏光标Screen.showCursor=true;//显示光标}通过这样的设置,我们就可以编写响应的代码来实现个性化的光标了。MonoBehaviour.Update函数功能就是在执行完MonoBehaviour.Start函数之后,游戏的每一帧都会执行该函数,来绘制每帧的画面,这是非常重要的,否则游戏将无法运行。精灵动画的函数就必须放在这里面。11.5JavaScript语言Javascript是一种由Netscape的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如Perl,遗留的速度问题,为客户提供更流畅的浏览效果。当时服务端需要对数据进行验证,由于网络速度相当缓慢,只有28.8kbps,验证步骤浪费的时间太多。于是Netscape的浏览器Navigator加入了Javascript,提供了数据验证的基本功能。JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言。同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,比如响应用户的各种操作。它最初由网景公司的BrendanEich设计,是一种动态、弱类型、基于原型的语言,内置支持类。JavaScript是Sun公司的注册商标。Ecma国际以JavaScript为基础制定了ECMAScript标准。JavaScript也可以用于其他场合,如服务器端编程。完整的JavaScript实现包含三个部分:ECMAScript,文档对象模型,字节顺序记号。Netscape公司在最初将其脚本语言命名为LiveScript来Netscape在与Sun合作之后将其改名为JavaScript。JavaScript最初受Java启发而开始设计的,目的之一就是“看上去像Java”,因此语法上有类似之处,一些名称和命名规范也借自Java。但JavaScript的主要设计原则源自Self和Scheme。JavaScript与Java名称上的近似,是当时网景为了营销考虑与Sun公司达成协议的结果。为了取得技术优势,微软推出了JScript来迎战JavaScript的脚本语言。为了互用性,Ecma国际(前身为欧洲计算机制造商协会)创建了ECMA-262(ECMAScript)。现在两者都属于ECMAScript的实现。尽管JavaScript作为给非程序人员的脚本语言,而非作为给程序人员的编程语言来推广和宣传,但是JavaScript具有非常丰富的特性。12创建环境:导入基本的定制资源12.1先设计,后创建在开始创建环境之前,先在纸上或是使用图元对象在引擎中为此建立一个模型,这叫做灰盒法。当在绘制地图时,首先为各种需要创建的物品做标注,即创建自己的资源列表。在开始时就创建一个这样的资源列表,这可以确保不会在稍后的开发中遗忘任何东西。在Assets文件夹中加入下列文件夹:Audio(音频)Charactrers(角色)GUI(图形用户界面)Editor(编辑器)Particles(粒子)Props(道具)Scenes(场景(Scrips(脚本)Skybox(天空盒)Terrain(地形)12.2导入贴图打开Unity并创建一个新的场景文件。将贴图资源文件拖曳到项目中的Assets文件夹里。12.2.1制作游戏的地图在新场景里,创建一个有向光源并且对其进行旋转,以使得它不是直接指向下方。在Project视图中展开StandardAssets文件夹,并且打开Prefabs文件夹。把FirstPersonController预制模型拖曳到Scene视图或是Hierarchy视图中。在Hierarchy视图中选择默认的MainCamera,然后按Delete键以将其删除。这个控制器预制模型带有一个附加的游戏摄像机。创建一个新地形,并且把它的分辨率设置为200米长、200米宽。重命名地形。使用Inspector视图中的Terrain工具加入一张地表贴图。将X和Y平铺大小修改为200*200,也就是这个地形的分辨率。为地形绘制高度。把可玩区域变得大约两米高—这样就可以在一个略低的高度建立道路和河流。使用TargetHeight工具来绘制平缓过渡的高原,并且使用一个不透明度比较低的选项来渐渐地建立区域。12.3导入基本网格Unity内置地支持Maya、Cinema4D、3dxMax、Cheetah3D和Blender的场景文件,将这些文件保存到Asserts文件夹中。在地形上四处放置一些树木以及其它对象。单击Apply按钮来完成对该资源进行的任何改变,并让Unity重新导入它。当导入一个网格时,Unity会试图随之导入所有的贴图和材质,这可以避免在导入之后还需要重新对此进行设置。12.4设置简单的着色器和材质12.4.1Unity提供的着色器Unity带有一个很大的、预先创建的着色器库,绝大部分着色器都按照种类来划分:Normal(普通)、Transparent(透明)、Nature(自然)、Self-ILLuminated(自发光)、Reflective(反射)以及Lightmapped(光照图)。12.4.2凹凸贴图、高光贴图、立方环境贴图和细节贴图凹凸贴图凹凸贴图是用来定义对象高度或深度的灰度图像。该贴图上比较暗的区域看上去好像缩在对象里面,贴图上较亮的区域标记了该对象应该抬高或是突出的部位。在导入一张将要用作凹凸贴图的贴图时,在导入设置上选择GenerateBumMap(生成凹凸贴图)复选框实际上会让Unity为贴图创建一张法线贴图。法线贴图是使用RGB而不是灰度来编码的图像,它使用颜色数据来定义对象上的凹凸和褶皱。根据创建法线贴图的方法,它们通常可以使得结果比使用普通的灰度凹凸贴图更好看。在生成一张法线贴图时,尝试改变凹凸度滑块来增加其效果。高光和发光贴图高光贴图定义了对象上哪些部分是有光泽的而哪些部分不是。高光信息通常作为灰度图像保存在贴图的alpha通道里,而不是像凹凸贴图一样是一张独立的贴图。立方环境贴图立方环境贴图是另一种特殊类型的贴图,事实上它是由6张独立的贴图组成的,它们分别和一个虚拟立方体的6个面相对应。天空盒就是一种特殊的立方环境贴图。细节贴图细节贴图是另一种特殊贴图,它们仅仅由DiffuseDetail(散射细节)着色器所使用。细节贴图就好像是一张反转的mipmap,因为当你靠近一个对象时,这个特别的着色器才会开始作用。细节贴图通常是灰度的,并且必须是在各个方向都完全是平铺的,否则会看到缝隙。12.4.3指定着色器和材质关闭Shadertest项目,并且重新打开该项目。在Protect视图中右击并选择Create—Material。这会在项目层次中的当前文件夹中放置一个新的材质对象。默认情况下,新材质是空的并且赋予了基本的散射着色器。此时,为这种材质选择一种颜色。将tree2游戏对象从Protect视图中拖曳到Scene试图中,以将它加入到游戏中。这会创建该对象的一个实例。单击并把新材质从Project视图拖曳到tree2的两个部分上:树叶和树干。在Scene视图中,查看树以看看新材质的效果12.4.4创建一种定制的天空盒材质StandardAssets包中的天空盒和游戏的艺术方向不符合,因此需要创建一种定制的天空盒。天空盒需要使用6张独立的贴图来创建,每张贴图都对应于立方体6个面中的一个。这个虚拟的立方体会在游戏场景的周围和后面渲染,这可以造成在远处有一片很大的天空的假象。创建6张无缝的、相互连接的贴图,并且让Unity生成一张立方环境贴图。12.4.5添加水体这幅地图的场景中最后需要添加的一个重要部分就是水体。创建一个新的游戏对象plane,并且把它放置在(100,0.2,100),使得它位于地图的中心并且略高于地面。在每条轴上把它放大21倍,使得它可以覆盖整张地图创建一种新材质,把它命名为Water,并且在Shader下拉菜单中选择Water,为其指定Water着色器。把这种新材质放在Material文件夹中,并且把它赋给Plane对象。将WaterSimple脚本拖曳到Plane对象上。将水面贴图放到WavesBumpmap和WaveSpeed贴图框中。在Project视图中选择Water-DIFF贴图,并把其GenerateCumbmap的导入选项修改为Spheremap(球体贴图)。单击Apply按钮使得Unity重新导入这张贴图,并为其创建立方环境贴图。把这张新建的立方环境贴图应用到水体的反射颜色贴图上,对Horizon和Wavescale滑块进行修改,得到想要的效果。13创建角色13.1导入角色以及其它非静态网格该游戏的角色身体分为两个带有蒙皮的部分,分别名为“Body”和“Wheels”。该动画剪辑使用一个独立的属性来显示其采用率,以及该文件是不是已经压缩了。这些带有蒙皮的网格部分,显示了为它们每一部分所创建的默认材质以及该部分的带有贴图的预览。如果只是单击Mesh部分,该部分会只使用线框来显示。选择“Widget”层次的根部,以在Inspector视图中显示其所有导入属性。启用GenerateColliders功能,并让Unity为每张贴图生成一种材质。随后选择Animations子菜单。在SplitAnimations表中,选择”+”号来创建一段新的剪辑。默认情况下,Unity会使用一个名为“idle”的示例剪辑以及一些随机的数字来填充这些字段。单击Apply按钮保存。新创建的剪辑会加入到Project视图的层次中。从Project视图中把该项目的动画剪辑中的某一段拖曳到Animation域中。在Scene视图中把视野居中,然后按下“播放”按钮来观看动画。现在角色已经就绪了,可以将其导入到游戏中的任何场景文件中。14编写角色和状态控制脚本14.1计划和设计该角色的控制器需要能够以某种方式处理下列基本功能:WASD键移动控制。角色必须随着D键和A键旋转并且随着W键和S键向前或向后移动。Widget需要能够跳跃、滚动(消耗能量的高速滚动)和匍匐。在匍匐时,其物理碰撞体应该变小。控制器必须为其移动和旋转速度提供可编辑的变量,并且需要提供一些变量来记它是否是可控制的(如果它在冒险中死了,在其被屠杀的过程中,玩家不应该还能控制它)。脚本还需要在接受移动输入时确保角色在地面上,这样它就不会意外地悬浮或是飞行—这个机器人绝对是只能在地面上移动的。把一些摄像机设置成能够平滑的跟随角色。14.2一个简单的第三人称控制器要让角色移动,需要把前面这个列表转化为可用的代码。在Assets文件夹中的Scripts目录中创建一个新的JavaScript文件,并把它命名为WidgetController。14.2.1控制器变量定义已经知道会在脚本文件中需要的变量,并为它们赋一些基本的值。在选择的编辑器中打开角色的控制器,加入成员变量,例如rollSpeed、fastRollSpeed、jumpSpeed、gravity、rotateSpeed、duckSpeed等。这些定义为成员便利变量,并且可以在Inspector视图中编辑。这些变量可以控制角色在其任何一个动作中多快地移动。需要角色的重力(gravity)变量,在每一帧中它作用于角色之上,以使得它会在地面上,将其值设置为20。其他的变量控制角色可以多快地在游戏世界中进行滚动、移动以及旋转。也需要一些私有变量来记录角色的当前移动方向、它是否在地面上以及它在匍匐时的当前高度。将下面这些变量声明为private类型。moveDirection、grounded、moveHorz、normalHeight、duckHeight、rotateDirection。旋转和移动方向定义为一个3D变量,这使得可以在需要的时候同时在三个平面上对移动进行计算。MoveHorz变量决定了玩家在旋转中的方向,grounded布尔值保存了角色当前是否在地面上。14.2.2FixedUpdate:让角色移动第三人称控制器脚本会遵循以下的基本逻辑:如果这个角色是可控制的,允许玩家的移动输入。如果这个角色在地面上,允许玩家在地面上常规的移动输入获取玩家的输入并且对其进行变换,使得它适用于世界坐标系把任何特殊的玩家控制应用到移动上,例如,跳跃、匍匐或者加速。施加游戏世界重力的影响,使得角色可以自然地下落和跳跃。这里介绍一下Unity脚本编程中的一个重要的类—time。time类允许访问一些很有用的只读数据,例如,这个游戏运行了多久了或是当前关卡载入多久了。DeltaTime是另一个只读数据,它描述了完成上一帧所花的时间,其单位为秒。通常把重力常量乘以完成帧所花费的时间,实际上就计算了每秒重力对角色的影响。在任何时候,如果想要每秒都做些什么,把它乘以Time.deltaTime。14.3设置Unity的输入管理器要在Unity中设置定制的控制方式,只需要单击几次按钮就可以很方便地在编辑器内部完成了。Unity支持从键盘、鼠标、游戏手柄和摇杆的输入,并且可以在一个游戏中把任意多个这样的输入设备混合起来,这使得玩家可以选用自己喜欢的控制方式。每个新项目默认可以定义17个输入轴(inputaxis),包含了标准的键盘和鼠标控制。一条轴就是任何预先定义的移动或是按下按钮动作,例如,Jump(跳跃)、Run(奔跑)、Strafe(扫射)或是LeftMouseClick(左击)。设置输入管理器的步骤如下:把Size字段修改为6,以删除不需要的轴。角色的控制非常简单,不需要默认的选项。保持Horizontal和Vertical不变—这两条轴已经映射为同时使用WASD键和方向键。展开Fire1并把它重命名为Attack。保持默认赋值的左Ctrl和mouse0,。把Fire2轴、Fire3轴分别重命名为Boost和Duck。让Boost使用左Shift键,Duck使用CapsLock键。保持Jump轴不变。14.4连接摄像机现在角色的功能已经完整并且可以控制了,还需要某些方法来保持摄像机总是跟随者它,否则玩家会很容易就跑出摄像机的视野。要做到这点,需要创建一个平滑跟随脚本,以控制摄像机的移动和旋转。希望定制摄像机可以做如下一些基本的事情:总是以一个预先设置的、特定的距离跟随角色。在跟随速度上有一个小小的延迟,这样摄像机的移动就不会抖动—想要让它可以随着玩家四处移动而平缓地改变方向和更新设置。总是会更新其当前的旋转角度,以便它查看角色。否则一个跳跃动作就会让角色飞出视野。在Scripts文件夹中创建一个新的JavaScript文件,并把它命名为Widget-Camera。在该脚本中实现连接摄像机的功能。14.5装配状态控制器现在,角色已经可以移动了,它需要能够保存自己的状态和重要数据,从而在遇到诸如物品和敌人之类的东西是可以进行更新。它需要:用来记录生命(如能量、最大生命、和最大能量)的变量,以及其他变量来确定需要多少能量才能进行加速旋转。在某个时刻,它需要表示受到攻击以及濒死的音频变量。用来添加生命和能量以及进行伤害并减少生命的函数。某些种类的死亡函数,以便处理不幸发生的提前结束及其在游戏中的重生。在Scripts文件夹中创建一个新的JavaSc文件,并把它命名为Widget-Status,实现上述功能。15连接动画15.1Unity中的动画在Unity中,可以用几种不同的方式来处理动画:可以在其他编辑器中创建它们并且导入,可以使用脚本来进行程序化地生成,也可以直接在Unity的Animation视图中创建。这些方法中的每一种都有其优缺点,相对于其他方法来说,某种方法可能会给一些特定的任务带来更多的好处。一个复杂的、具有多个部分的角色可以在Animation视图中进行动画,但是制作角色的美工可能会法线诸如Maya这样的独立编辑器更好用。一段拾取生命或是弹药的动画可以在外部软件中进行,但是使用简单的脚本来创建某些简单的动画效果会更为有效。另一方面,如果无法使用第三方动画编辑器,可以在Unity中处理需要的任何操作。15.2动画API关于这个API需要掌握的最关键的方面之一,就是动画图层的概念。在Unity中,一个给定游戏对象上的所有可以使用的动画剪辑,都会被赋予一个图层,默认为0.根据图层的索引,一段剪辑在被赋予混合权重时,会得到一个更高的优先级。一个较高图层中的动画在需要获得优先级时可以很方便地覆盖一个较低图层中的动画。15.3创建动画状态管理器在Scripts目录中,创建一个新的JavaScript文件,并把它命名为Wdiget-Animation。在该脚本中实现动画管理的功能。16使用触发器并创建环境交互16.1触发器和碰撞在游戏中,一个触发器基本上就是任何可以激活和绊倒的东西,它会因此发送某种形式的消息或是开始一个时间。触发器通常是包含一个给定空间的不可见区域或是形体,一旦玩家进入这个区域或是在这个区域里进行特定的动作(例如,按下一个按钮),就会触发触发器。很多和玩家相关的行动(例如,打开某个东西,如门和箱子,启动电梯或是拾取一个掉下的物品)能够工作,是因为触发器和它们的形体。所有的游戏引擎对触发器和触发器形体的定义都是不同的,Unity也不例外。在Unity中,触发器和GameObject直接相连—这两者不能离开另一个而独自存在。每当玩家和GO的碰撞形体发生碰撞,触发器都会通过脚本来激活。GameObject自身可以是不可见的,并且定义了一个松散的区域,它也可以描述玩家可以看到的一个有形物体,例如一扇门。16.2设置一个简单的触发器对象1、导入贴图,使用一种名为generic-pickups的新材质对其进行设置,并给它一个lightedoutlineToonshader。2、为这个对象创建一个预制模型并且把它命名为Pickup-Gear。把这个物品放在最后的场景文件中。3、在Project视图中选中这个齿轮,并选择SphereCollider,为这个物品赋予一个新的Sphere碰撞体。4、在SphereCollider组件的Radius设置上面,单击IsTrigger框把它设置为True。创建一个新的JavaScript脚本,并把它命名为PickupItems。把它放在Scrips目录中。这个脚本是一个通用的脚本,用来处理游戏中所有可能的可拾取的物品。16.2.1背囊管理在拾取已经完成并且正确工作后,需要创建一个背囊管理器使得角色可以真正地保存其新找到的奖品。需要某种类型的对象或是数组,来保存可以获得的物品并且记录真正被角色搜集到的物品,在Scripts目录中创建一个新的JavaScript文件,并把它命名为Widget-Inventory,这个脚本用来实现上述功能。17创建探险和AI17.1设置一个简单的敌人角色第一次遭遇的敌人是一只简单的机器兔子,它是在山地中土生土长的。这个敌人的AI可以让玩家在没有生命危险的情况下就能熟练地控制。在开始编写脚本之前,需要在Unity中设置好游戏资源并且让一切就绪。打开保存的项目并且创建一个新的场景。下面是实现的步骤:在项目中创建一个新场景,并且把一个基本的平面游戏对象放置在游戏世界中。改变其大小使得它提供足够的空间以四处奔跑。导入兔子游戏对象,命名为E-Bunny。把E-Bunny对象的Scale参数设置为1。为这个兔子角色创建一个新的预制模型并且用E-Bunny对象来填充它。使用Toon着色器来设置所提供的材质,并且把所提供的贴图赋值给它。为这个小兔子预制模型加入一个Animation组件,并且在Inspector视图中把这个动画数组的大小改为3.因为这个小兔子需要和世界进行交互并且在世界中四处移动,所以它还需要一个角色控制器。使用Component—Physics菜单来加入这个组件,并且把碰撞体的height和radius改为0.65,把center改为(0,0.52,0)。17.1.1AI控制器现在,新的敌人角色已经设置完成并且一切就绪了,需要为它定义所希望的表现。用一句话来说,你想要这个小兔子自由地四处游荡,直到它看到一个玩家去追捕它。在一个小范围内缓慢而随机地移动。如果角色在某个设定的区域范围内,专项并向其移动。如果和角色发生碰撞,就攻击。短暂地停顿一下以让玩家进行反击。如果角色还在范围内并且可以看到的话,再次向它移动。否则,视图找到它。如果角色移动到范围以外,继续游荡。如果被打败,丢下一个随机的小物品并且消失。在Scripts目录中创建一个名为Ebunny-AIController的脚本文件,实现兔子角色的人工智能。17.1.2为一只简单的小兔子编写简单的状态控制管理器和角色不同,小兔子并不需要记录很多东西—它只需要记录生命值。在Scripts目录中创建一个名为EBunny-Status的脚本文件,实现上述功能。17.2产生和优化在小兔子敌人上加入另一个功能,这也可以减少一些内存空间的占用以更好地优化游戏。现在,在玩家杀死测试的小兔子之后,它放下它的奖励并且消失。然后,通过加入一个产生点,可以让新的小兔子出现并且可以让角色面对更多的对手。同时,通过使用产生点,可以在角色离开他们的雷达时删除这些敌人,以节约不需要的空间。在Scripts目录中创建名为Enemy-RespawnPoint。完成上述功能。18创建光影18.1灯光的类型Unity预制了三种类型的光源,每种类型都模拟现实世界中的一种常见光源—有向、点和聚光灯。有向光源的功能和太阳类似:它们模拟一个大的、远的光源,指向一个方向。在场景中所有的东西都会被这个光源以相同的方式照亮,任何投影投射也会使用相同的方向。把有向光源组合起来可以迅速地照亮整个场景,但是它们也可以让一些细节消失或是把一些希望保持不可见的区域照亮。点光源的作用和一个常见的灯泡一样—它们从一个中心点向外、在一个球体中发光。这个光源可以自然地渐渐变暗,也可以停止在一条线上。聚光灯光源的功能就像其名称所显示的那样。光源从一个确定的点沿着一个方向向外照射,其形状就像一个圆锥。这种光源也可以自然地渐渐变暗,聚光灯的椎体角度也可以改变。18.2照亮游戏世界18.2.1光照贴图Unity拥有完整的集成光照烘培贴图工具,即IlluminateLabs的Beast,这意味着Beast可根据场景在Unity中的设置并考虑到网格、材质、纹理和灯光,烘培场景中的光照贴图。也意味着光照贴图是渲染引擎中不可缺少的一部分。创建光照贴图后无需进行任何操作,就会被对象自动应用。18.2.2准备场景并烘焙光照贴图从菜单中选择窗口(Window)—光照贴图(Lightmapping),打开光照贴图(Lightmapping)窗口:确保想要进行光照映射的任何网格都有适当的UV供进行光照映射。最简单的方法是从网格导入设置(meshimportsettings)中选择生成光照贴图UV(GenerateLightmapUVs)选项。2、在对象(Object)窗格中将任何网格渲染器(MeshRenderer)、蒙皮网格渲染器(SkinnedMeshRenderer)或地形(Terrain)

标记为静态(static),告诉Unity这些对象不会移动或更改,可进行光照贴图。3、要控制光照贴图的分辨率,请转到烘培

(Bake)

窗格并调整分辨率(Resolution)值(如要更好地了解如何安排光照贴图的纹元,请查看场景视图(SceneView)中的光照贴图显示(LightmapDisplay)小窗口,并选择显示分辨率(ShowResolution))。4、点击烘培(Bake)按钮。5、Unity编辑器(Editor)的状态栏上出现一个进度条(右下角)。6、烘培完成时可在光照贴图编辑器(LightmapEditor)窗口底部看到所有已烘培的光照贴图。场景和游戏视图将更新,场景已完成光照映射。18.2.3调整烘焙设置选择灯光并打开光照贴图(Lightmapping)窗口中的对象(Object)窗格,出现阴影半径(ShadowRadius)和阴影样本(ShadowSamples)属性。将阴影半径(ShadowRadius)设置为1.2,阴影样本(ShadowSamples)设置为100,重新烘培产生带有宽半阴影的软阴影,图片看起来效果就好很多。在Unity专业版中可启用全局照明(GlobalIllumination)并添加天光(SkyLight),进一步处理场景。在烘培(Bake)窗格中将反弹(Bounces)值设置为1,天光强度(SkyLightIntensity)设为0.5。结果使灯光更软,稍稍带漫反射相互反射效果(从绿色和蓝色立方体中渗色)。虽然还是3个立方体和一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论