已阅读5页,还剩39页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学 号 07022801470125分类号本科生毕业论文(设计)题目: 基于Unity游戏引擎的游戏设计 院 (系) 电子与信息工程系 专 业 计算机科学与技术 班 级 2007级 学 生 姓 名 指导教师(职称) 提 交 时 间 二零一一年五月 摘 要基于Unity游戏引擎的游戏设计胡涛(安康学院电子与信息工程系,陕西安康,725000)摘 要 游戏,目前已经是最大众化的娱乐之一,而其中的3D游戏也是技术含量较高的项目之一。Unity3D是一个3D游戏开发工具和游戏引擎套件,其中包括了图形、音频、物理、网络等多方面的引擎支持,并且有一个非常强大的编辑器来整合这一切,非常适合于游戏开发。本文主要是以Unity3.1.0为开发环境,设计并开发一款单机版的三维游戏直升机大战,旨在介绍直升机战斗游戏的实现方法,并逐步介绍使用Unity3D开发3D游戏的方法和技巧。通过这次游戏制作,使我体会到了,制作一个游戏所需要做的工作,包括前期的游戏策划,素材的制作,到后期的游戏的设计,代码实现等,最终形成一个完整的3D游戏,并通过Unity3D选择平台生成可执行文件。但本次设计的直升机战斗游戏所做工作还不够完善,开始场景中菜单比较简单,游戏中武器只有一种,关卡也只有一个,这些都需要以后进一步设计和完善。关键词 游戏设计;Unity3D;直升机大战Unitygame enginebased ongame designHU Tao(Department of Electronic and Information Engineering, Ankang University,Ankang,725000)Abstract Game, has been one of the most popular entertainment , of which high-tech 3D game is also one of the projects .Unity3D is a 3D game development tools and game engine kit, which includes graphics, audio, physical, network and other aspects of the engine, and has a very powerful editor to integrate all of this ,very suitable for game development.This article is Unity3.1.0 for the development environment, design and develop a stand-alone version the three-dimensional game-helicopter war, purpose is to introduce the realization method of the helicopter combat game , and gradually introduced 3D game using Unity3D developed methods and techniques. Through the game production, so I understand, and make a game to do the work, including pre-game planning, material production to the late game design, code, etc., forming a complete 3D games, and Select the platform through Unity3D an executable file. However, this design work done by helicopter combat game is not perfect, start menu, the scene is relatively simple, only one weapon in the game, only one level, these require further design and improvement of the future.Key Words Game design; Unity3D; Helicopter War目 录目 录1 绪论11.1 引言11.2 Unity3D介绍11.2.1 Unity3D简介11.2.2 Unity3D特色21.3 JavaScript脚本语言介绍21.4 研究目的及意义32 Unity3D界面及基本操作52.1 屏幕布局52.2 在3D空间查找游戏对象52.3 创建游戏对象62.4 场景视图导航62.5 移动游戏对象62.6 缩放游戏对象72.7 游戏视图72.8 资源的使用72.9 复制82.10 添加组件83 游戏策划93.1 游戏的简要介绍93.2 背景和情节93.3 游戏各角色物品和各场景素材103.3.1 角色的设计103.3.2 物品的设计103.3.3 游戏场景的设计113.4 游戏的操作方法114 游戏的设计与实现134.1 创建游戏工程134.2 地形的设计134.2.1 创建地形134.2.2 设计地表轮廓134.2.3 给地形添加材质和光照154.3 模型的导入154.4角色及其程序设计164.4.1 玩家角色设计164.4.2 敌方角色的设计224.5 GUI的设计264.5.1 玩家血条的设计264.5.2 血量及得分显示284.5.3 游戏胜利或结束时的GUI按钮284.6 医疗箱的设计294.7 游戏的开始场景设计304.8 游戏场景的管理及发布325 总结与展望33参考文献34致 谢35附件36绪 论1 绪论1.1 引言早期由于硬件的限制,游戏画面上还没有3D的概念,仅停留在2D的显示状态,随着个人电脑配置的提升和游戏开发环境的进一步完善,人们开始对电脑游戏的画面产生了更为苛刻的要求,以往的2D画面已经远远不能满足这些挑剔的游戏玩家的眼光。于是,如何利用现有的2D显示设备(如各种CRT和液晶显示器)更好的显示出3D的游戏画面以满足玩家们日益增长的画面要求,开始成为游戏制作者和高级程序员们不断挑战的课题。Unity3D是一个让你轻松创作的多平台的游戏开发工具,是一个全面整合的专业游戏引擎。它是由丹麦Unity公司开发的游戏开发工具,具体的特性包含整合的编辑器、跨平台发布、地形编辑、着色器,脚本,网络,物理,版本控制等特性。通过Unity简单的用户界面,你可以完成任何工作。这些为你节省了大量的时间。然而对于一个商业化的游戏引擎来说,快速高效的完成类似的特效应该是分内之事。游戏引擎的初衷就是将游戏开发者筋力转移到游戏的可玩性上来。那么Unity3D为什么会吸引开发者的目光呢,重要的原因是廉价,并且能够发布为基于浏览器的网页格式。这个是目前的一大趋势,玩家无须下载庞大的客户端,打开浏览器即可进入游戏。1.2 Unity3D介绍1.2.1 Unity3D简介Unity3D是一个全面整合的专业游戏引擎。它是由丹麦Unity公司开发的游戏开发工具,具体的特性包含整合的编辑器、跨平台发布、地形编辑、着色器,脚本,网络,物理,版本控制等特性。Unity3D内置的NVIDIA®PhysX®物理引擎带给你生活的互动。在植被方面使用了Unitree, 并内置了大量的Shader供开发者使用,这些Shader即可满足开发者的常用效果,能让开发者轻松的创作多平台的游戏。 Unity公司在在脚本方面不可不谓之强悍,Unity3D支持JavaScript, C#, Boo,如果开发非网页的独立版还可使用插件。Unity3D的经典演示就是热带的岛屿,工期为3个人一周完成,可以将其看作一个效果展示,主要展示了地形,水,光影效果。 相信很多人看过后都联想起孤岛惊魂的引擎CryEngine ,因此Unity3D吸引了国内很多游戏开发者和VR开发者的目光,非常看好Unity3D的前景。1.2.2 Unity3D特色综合编辑: 通过Unity简单的用户界面,你可以完成任何工作。为游戏开发者节省了大量的时间。图形动力: Unity对DirectX和OpenGL拥有高度优化的图形渲染管道。资源导入: Unity支持所有主要的文件格式,并能和大部分相关的应用程序协同工作。一键部署: Unity可以让你的作品在多平台上呈现。Wii的发布: Unity让业界最流行的游戏平台软件更容易开发。iPhone发布: Unity让革命性的游戏开发降临革命性的设备。着色器: Unity的着色器系统整合了易用性、灵活性和高性能。地形: 低端硬件亦可流畅运行广阔茂盛的植被景观。联网: 从单人游戏到全实时多人游戏。物理特效: Unity内置的NVIDIA®PhysX®物理引擎带给你生活的互动。音频和视频: 实时三维图形混合音频流、视频流。脚本: Unity支持3种语言:JavaScript,C#,Boo。Unity资源服务器: Unity资源服务器是一个附加的包括版本控制的产品。光影: Unity提供了具有柔和阴影与烘焙lightmaps的高度完善的光影渲染系统。文档: Unity为你提供逐步的指导、文档和实例方案。1.3 JavaScript脚本语言介绍Unity3D支持3种语言:JavaScript,C#,Boo ,本次设计主要使用JavaScript脚本语言。JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言。同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,比如响应用户的各种操作。它最初由网景公司的Brendan Eich设计,是一种动态、弱类型、基于原型的语言,内置支持类。JavaScript是Sun公司的注册商标。Ecma国际以JavaScript为基础制定了ECMAScript标准。JavaScript也可以用于其他场合,如服务器端编程。完整的JavaScript实现包含三个部分:ECMAScript,文档对象模型,字节顺序记号。1.4 研究目的及意义随着电脑技术的发展,配置的不断提升,游戏开发环境也不断改善,使游戏开发者能开发出画面效果越来越好的游戏。电脑游戏已经成为最大众化的娱乐方式之一,从以往的二维平面游戏到现在的三维游戏,玩家对游戏的要求越来越高,以往的二维画面已难以满足游戏玩家挑剔的眼光。游戏从二维向三维发展已成为必然趋势,Unity3D正是一个3D游戏开发工具和游戏引擎套件,其强大的功能能够让游戏开发者轻松的开发出3D游戏。并且Unity3D包括了图形、音频、物理、网络等多方面的引擎支持,并且有一个非常强大的编辑器来整合这一切,非常适合于游戏开发。对它的学习使用使得学生对程序和艺术的设计都有一个整体的锻炼和提高。对其学习知识有总体的检验。所以本文介绍使用Unity3D开发一款直升机战斗的3D游戏,以此来介绍使用Unity3D开发3D游戏的方法和技巧。37Unity3D界面及基本操作2 Unity3D界面及基本操作2.1 屏幕布局下载并安装好Unity3D,第一次打开显示的是默认项目,如果使用的是试用版则打开后是一个空项目,需要新建一个项目,选择File-New Project 就可以新建一个游戏工程,然后在开始之前,让我们确定屏布局在2 Split模式。选择Window-Layouts-2 Split这样视图现在分为5个主要区域,如图2.1所示。这5个主要区域分别为:(1)场景视图(Scene View):用于摆放游戏对象。(2)游戏视图(Game View):显示游戏运行后的样子。(3)层次视图(Hierarchy View ):列出所有在目前场景视图中所用到的游戏对象。(4)项目视图(Project View):显示资源目录下所有可用的资源列表。(5)检视视图(Inspector View):显示所选中游戏对象的属性信息。图2.1 Unity3d界面2.2 在3D空间查找游戏对象启动Unity,进入到我们建好的项目,就会看到游戏场景中各种游戏对象,新建的项目开始场景中仅包含一个主相机,你能从层次视图Hierarchy中看到这个唯一项。如果在场景视图中看不到相机,在层次视图中点击主相机Main Camera ,然后光标移动到场景视图中,按F(frame select)键,主相机就显示在场景视图的中心,当然也可以直接在层次视图中双击主相机,也可以快速在场景视图中找到。这个技巧可以用来查找你在场景中创建或导入的任何游戏对象。2.3 创建游戏对象要加入一些游戏对象到场景中,可以用Unity菜单Game Object-Create Other创建,也可以从外部导入。从外部导入游戏对象,首先要导入到项目视图Project中,然后直接拖到场景或层次中。用Unity的Game Object 创建游戏对象,比如选择Game Object -Create Other -Plane 就可以在场景中创建一个平面供角色行走。添加一个立方体到游戏场景中,选择Game Object-Create Other-Cube。添加一个点光源,选择Game Object -Create Other-Point Light 。2.4 场景视图导航用下列方法你可以从任何角度查看3D模型:旋转:Alt+鼠标左键平移:Alt+鼠标中键缩放:Alt+鼠标右键或者你也可以选择Unity左上角的手形工具,选择手形工具后,鼠标左键平移,鼠标右旋转,鼠标中键缩放。2.5 移动游戏对象在Unity中你可以用下列方法移动三维空间中任何游戏对象:(1)移动工具(快捷键W)。选中任何游戏对象,然后按W键,将显示三个箭头,如图2.2所示。红色是X轴,绿色的是Y轴,蓝色的是Z轴,即红绿蓝分别对应X、Y、Z轴。要移动一个对象,鼠标左键点击一个箭头并作适当移动,也可以点击中间整体移动。在移动的同时,检视面板中游戏对象的位置坐标Position的值也会改变,你也可以在此处键入坐标值将游戏对象移动到相应位置。(2)旋转工具(快捷键E)。选中任何游戏对象,然后按E键,就可以用鼠标左键来旋转游戏对象,如图2.3所示。在旋转的同时,检视面板中旋转值Rotation也会相应变化,你也可以在Rotation下面的三个文本框中键入各轴旋转的角度值来旋转游戏对象。 图2.2移动游戏对象 图2.3旋转游戏对象2.6 缩放游戏对象缩放游戏对象要使用缩放工具(快捷键R),选中游戏对象,按R键后,会显示三个坐标轴,如图2.4所示。每个轴末端都有一个小方块,拖动轴末端的小方块来实现对游戏对象在该轴方向的缩放,也可以点击中间,实现整体按比例缩放。在缩放的同时,检视面板中Scale的值也会相应改变,也可以直接在该处键入精确的缩放数值。图2.4缩放游戏对象2.7 游戏视图游戏视图显示的是游戏运行时的样子,有完整的纹理、照明等,如果在游戏视图中不能看到场景中的对象,是因为相机没有找到正确的朝向。选中Main Camera 会出现一个倒金字塔线框,这就是相机的视角,如果视角方向没有指向游戏对象,在场景中找到游戏对象,选择Main Camera 并选择Game Object-Align With View ,这样游戏视图就会匹配场景视图,当然也可以通过移动工具和旋转工具将主相机移动到合适的位置,旋转到合适的角度。2.8 资源的使用电脑游戏是由三维模型,纹理,声音文件,游戏代码等构成,这些被称作为游戏的资源assets 。Unity已包含有标准资源包,甚至是专业的资源包,我们可以使用资源包的资源。比如我们从内置的资源中添加一个角色到我们的游戏场景中,在项目视图中展开标准资源Standard Assets文件夹,预设prefab是将游戏对象预组装到一个逻辑分组里,我们能够在预设文件夹内看到第一人称控制器FPS Controller ,只用将第一人称控制器拖到场景视图中。这时游戏视图中有变化,因为第一人称控制器预设里包含自己的相机,将替换主相机的视野,确保第一人称控制器没以陷入地形平面以下,然后删除主相机,点击播放按钮启动游戏,这样就可以在游戏视图中通过光标键或W,S,A,D控制第一人称在场景中行走,用鼠标环顾四周,按下空格跳跃。再次点击播放按钮停止游戏运行。要注意在当光标处于任何视图内的时候按下空格键,这将是该视图最大化,有助于更好的在场景中做调整或在游戏视图中玩游戏,在最大化的视图中再次按下空格键返回以前的布局模式,这个功能在游戏运行时不能使用,必须先停止或暂停游戏。2.9 复制复制游戏对象是一个强大的功能,当复制一个对象,它所有的功能和行为也会被复制,这是在场景中创建多个相同对象的非常快捷的方法。复制的方法是在层次视图中选中需要复制的游戏对象,然后按下Ctrl+D,或者是从Edit菜单中也可以做到这个。注意在层次视图部将多出一个相同的游戏对象,但是你不能在场景视图中发现它,因为它和场景中原有的对象是重叠在一起的,只需使用移动工具将一个移动到适合的位置即可。2.10 添加组件游戏对象可以是由若干个组件或行为组合而成,点击任何游戏对象,都可以在检视视图中看到它所附加的组件,如Transform, Box Collider等等。我们可以通过Unity的菜单给游戏对象添加适当的组件。比如我们从外部导入的模型,一般都不能产生碰撞,因为它没有物理属性,我们可以通过Unity给它添加一个刚体( Rigidbody )组件。Rigidbody组件允许游戏对象拥有一个重力,即对象会向下下降,碰到含有碰撞(collider)组件的物体为止。操作方法为:选中游戏对象,选择Component-Physics-Rigidbody .这将添加刚体组件到当前所选择的游戏 对象,在检视面板中也会看到刚体组件被添加。游戏策划3 游戏策划3.1 游戏的简要介绍本文使用Unity 3D软件设计一款直升机射击类的三维游戏直升机大战。游戏中操控Apache直升机在空中与敌机作战,也可以向地面发射炮弹摧毁敌人地面的火力点。当前地图中的所有敌人都被摧毁,则游戏胜利。若驾驶的Apache直升机被敌人击毁,则游戏失败。游戏利用Unity地形系统设计出一个山地的地形,并且一面临海,再使用Unity中的一些地形材质,树,草等构成了一个青山绿水的游戏环境。天空盒也是使用的Unity自带的天空盒,游戏英雄则是一架Apache战斗直升机,玩家驾驶战机在此场景中与敌人作战。游戏中海水也是Unity资源包中设计好的预置体,只须拖到游戏场景中放在合适的位置即可。游戏中采用了第三人称视觉,玩家在电脑屏幕上看到的画面就是通过游戏里的摄像机拍摄出来的,摄像机会跟随玩家战机移动。玩家角色和敌人角色都是通过JavaScript脚本控制的,同时GUI的显示效果也是脚本程序来实现的。游戏中的GUI设计有GUI Texture ,GUI Label ,GUI Button 三种形式。游戏为导弹和游戏对象被击毁时的爆炸效果添加了声音,还给所有的敌人都设计了AI,敌人在玩家战机接近到一定区域后向玩家发射炮弹,可以移动的敌人还能追击玩家战机。游戏仅设计了两个场景,一个是开始场景,主要通过3D文本显示出两个菜单,开始游戏和退出游戏。另一个就是主要的游戏场景,此场景中建立了游戏地形,并添加各种材质使地形看起来很美观,导入了各种游戏对象有玩家战斗机,敌人战斗机,地面的炮台,海上的战舰等。游戏虽然只有两个场景,但3D射击游戏的主要功能都实现了,且本文旨在通过此游戏的设计与开发来介绍使用Unity3d开发3D游戏的方法和技巧。3.2 背景和情节游戏发生在一个战斗任务中,玩家Apache战斗直升机被派往一个临海地区执行搜索和消灭敌军的任务,而该地区的敌人火力十分强大,也同样拥有Apache战机,而且地面还设有炮台,近海停有一艘战舰。于是玩家驾驶着强大的战斗机与敌人展开激烈的战斗,最终消灭所有敌军。3.3 游戏各角色物品和各场景素材3.3.1 角色的设计游戏中角色设计如下表所示:表3.1角色属性表生命值攻击力速度外形玩家战机1001080敌人炮台5010固定不动敌人战机501040敌人战舰50010固定不动3.3.2 物品的设计游戏中设计了医疗箱,如图3.1所示。击毁该箱子后玩家能增加30点血量。血量不能超过玩家的总血量100。游戏中还设计导弹,如图3.2所示。导弹攻击力为10,所有游戏角色都使用该导弹攻击。 图3.1医疗箱 图3.2导弹3.3.3 游戏场景的设计游戏场景是用Unity3D自带的地形系统设计而成的,创建地形后,通过Unity地形工具,绘制出山体,河谷,并给地形加入了各种材质,树木,海水等,使之构成一幅沿海山地的场景。Unity的地形系统非常强大,开发者可以通过使用它设计非常美丽的游戏场景。Unity3D的经典演示就是热带的岛屿,工期为3个人一周完成,可以将其看作一个效果展示,主要展示了地形,水,光影效果。3.4 游戏的操作方法游戏采用非常简单的操作方法,与常规3D射击游戏类似,具体如下:视角及前进方向控制:通过鼠标控制方向及视角攻击:鼠标左键向前: W键向后:S键向左:A键向右:D键垂直上升:空格键垂直下降: E 键游戏的设计与实现4 游戏的设计与实现4.1 创建游戏工程在开始设计游戏时,首先要创建一个游戏工程。启动Unity3D,我们将开始创建一个新工程。从主菜单选择File-New Project ,设定名字为“Helicopter War”并点击Create Project按钮,Unity将导入资源(assets)如声音,纹理,模型等,这里需要我们选择资源包导入,将我们会用到的Unity系统自带资源包导入到工程中,一般需要导入标准资源包Standard Assets ,试用版是将Standard Assets 分成了很多小部分,所以选择时都可以选上,如图4.1所示。导入完成后,游戏工程就创建完成了,这时会看到游戏场景,当然,此场景中仅包含一个主相机Main Camera.图4.1 创建游戏工程4.2 地形的设计4.2.1 创建地形游戏的设计,首先要设计地形,因为所有的游戏对象都是在地形上运动的,使用Unity设计地形也非常方便。打开我们创建好的工程,展示在我们面前是一个空场景,只有一个主相机。选择菜单Terrain-Create Terrain 就可以建一个地形。此时地形上什么都没有,展平而没有材质。4.2.2 设计地表轮廓地形创建好后,只是一个平面,其余什么都没有。我们首先要设计地表的轮廓。由于地形要设计海水,而海面处地形应低于整个地平面,所以在开始设计之初,我们需要将整个地平面抬高30个单位。选择菜单Terrain-Flatten Heightmap 在Height 后键入30,然后点击Flatten即可抬高整个地形。下面开始设计地形的轮廓,首先选中地形,在检视面板中我们会看到地形工具,如图4.3所示。图4.3地形工具选择第一个工具增高工具,此工具可以增高或降低地形。然后再在Brushes中选择合适的笔刷,并在Settings中设置好笔刷的大小以及增高或降低的程度,在地形上点击鼠标左键可以就绘制出山峰这样的地形,按住Shift再点击左键可以降低地形,可以降低山峰的高度,或形成谷地。选择不同形状的笔刷可绘制不同形状的山脉。山体绘制完成后, 有些地方需要平台的可以选择第二个工具,此工具可以地面抬高,但顶部形成一个平面,比如设计一个高台。同样选择合适的笔刷,合适的大小,点击鼠标左键可以在地形上绘制出高台,按住Shift再点击左键可使地面下降且底部平整,可用来设计河道或降低地平面。第三个工具,使用此工具可以使地面一此尖锐的地方变的圆润一些,使之看起来更自然一些。使用以上三种工具就可以设计出地形的整体轮廓了,如图4.4所示。图4.4地形轮廓4.2.3 给地形添加材质和光照地形的轮廓设计好后,就需要给地形添加一些材质。同样选择地形工具中的第四个工具,下面也会有笔刷的形状大小等,而且会多一个Textures项,在此项中点击Edit Textures -Add Textures 再点击splat后面的圆,就可预览资源中的各种材质,选择好材质后点Add就可以添加该材质。添加的第一种材质会自动添加给整个地形,一般选择土地的颜色,通过上述方法可以为地形添加多种材质,使用该工具,选择好材质和笔刷,在地形中需要该材质的地方点击鼠标左键即可。使用工具可在地形中种植树木等,点击该工具后,在Trees项目中点击Edit Trees -Add Trees 再点击tree后面的圆,可以从资源中选择合适的树,再点击Add就可以添加该树。然后在地形中适当位置点击鼠标左键就可以种植在地形中了。给地形添加海水,海水可以使用Unity资源包中的预置体资源,在Project视图中,Standard Assets文件中Water(Basic)中有Daylight Simple Water这个预置体,将它拖到场景中,进行适当的缩放,再放到合适的位置即可。给地形添加光照,在Unity主菜单中选择Game Object-Create Other-Directional light 可为场景添加平行光光源,用旋转工具旋转光照角度即可。这样,整个地形基本就做好了,效果如图4.5所示。图4.5整体地形4.3 模型的导入地形建好后,就需要导入游戏模型,为游戏添加敌我双方的游戏角色。Unity模型的导入非常简单,本游戏使用的模型都是3ds Max模型,将下载的或自己做Max模型文件,用3ds Max软件转换为FBX格式的文件。然后可以在Project视图中新建一个文件夹,命名为“My Assets”,将转换好的FBX文件复制到My Assets文件夹中即可,Unity会自动保存该模型的材质。本游戏主要导入的有战舰模型boat,炮台模型Cannon,直升机模型copter,导弹模型daodan 。场景中需要使用该模型时,只需从Project视图中的My Assets文件夹中拖入场景或层次面板中即可。4.4角色及其程序设计4.4.1 玩家角色设计(1)设置Player角色将导入的直升机模型拖入场景合适位置,通过缩放工具调整其大小,由于直升机将向进飞行,而Unity中前是指Z轴的方向,模型Z轴不一定是指向飞机前方的,所以我们需要创建一个立方体,选择Game Object-Create Other-Cube 这样就创建好了一个立方体。将该Cube的Mesh Renderer 去掉,这样就游戏运行时就不会显示该立方体。将cube和直升机放在同一位置,用旋转工具使直升机的前方向与cube的Z轴相同。缩放cube的大小,使之刚好能包围住直升机。在层次面板中将直升机copter拖到cube上,这样,直升机就和cube成为一个整体,将cube改名为Player.给Player添加刚体组件,这样使它能与场景中其它游戏对象产生碰撞。选中Player ,选择菜单Component-Physics-Rigidbody 就可以为Player添加刚体属性。当然直升机在场景中飞行不需要重力,所以在Inspector面板中,Rigidbody中要去掉Use Gravity 后的勾号。(2)使螺旋桨旋转我导入的直升机模型由于没有设置动态属性,螺旋桨不能够旋转。我们可以选中飞机的螺旋桨部件,给它添加一个简单的脚本就可以了。在Hierarchy面板中点击Player左边三角展开,下级有我们的直升机copter,这是上面拖放上去的。Copter中找到Apache展开,里面ApacRoto,ApacRot2,ApacRot3 这三个部分组成螺旋桨,拖动其中两个放在ApacRoto上,使三个部分成为一个整体。在Project面板中新建一个文件夹Scripts,用来放置代码。在Scripts文件夹中右键选项中选择Create-JavaScript ,就可以在文件中创建一个JavaScript脚本文件。将该文体改名为“luoxuanjiang”双击进入编辑程序。在打开的文件中输入:function Update () this.transform.Rotate(Vector3.forward*Time.deltaTime*900);关闭保存该程序,并将其拖放到ApacRoto上,这样选中ApacRoto时,Inspector面板中就会多一个luoxuanjiang(Script)属性,这表明,已经将该程序添加到ApacRoto上了,这样游戏运行时,直升机螺旋桨就会旋转。(3)直升机的飞行程序在刚才建好Scripts文件夹中,再建一个JavaScript文件,命名为“playermove”在其中输入:var MoveSpeed=80;var UpSpeed=30;function Start () var angles = transform.eulerAngles; x = angles.y; y = angles.x;/ 使直升机碰撞后能够恢复原来的方向 if (rigidbody)rigidbody.freezeRotation = true;function Update () if(Input.GetKey(KeyCode.W) this.transform.Translate(Vector3.forward*Time.deltaTime*MoveSpeed);/按W键飞机向前移动else if (Input.GetKey(KeyCode.S) this.transform.Translate(Vector3.forward*Time.deltaTime*-MoveSpeed); else if(Input.GetKey(KeyCode.A) this.transform.Translate(Vector3.right*Time.deltaTime*-MoveSpeed);else if(Input.GetKey(KeyCode.D)this.transform.Translate(Vector3.right*Time.deltaTime*MoveSpeed);else if(Input.GetKey(KeyCode.Space)this.transform.Translate(Vector3.up*Time.deltaTime*UpSpeed);else if(Input.GetKey(KeyCode.E)this.transform.Translate(Vector3.up*Time.deltaTime*-UpSpeed);关闭保存该程序,并将其拖放到Hierarchy面板中Player上,则游戏运行时可以通过按W,S,A,D键控制Player向前,后,左,右移动,还可以通过按Space(空格),E键控制Player垂直上升,下降。(4)Player方向的控制直升机方向的控制可用Unity资源包用自带的脚本代码控制,在Project面板中,展开Standard Assets - Character Controllers-Sources-Scripts ,在这个Scripts文件夹中有一个名为MouseLook的C#程序,将MouseLook拖放到Hierarchy面板中的Player上,则可以实现用鼠标控制Player的方向。(5)导弹的设计将导入的3D导弹模型daodan拖到场景中,同样新建一个cube, 去掉Cube的Mesh Renderer 。将导弹调整到合适大小,方向旋转到与cube的Z轴方向相同,调整cube的大小,将导弹放入cube中。并在Hierarchy面板中,将daodan拖放到cube上,使之成为cube的子对象。通过Unity的粒子系统,为导弹增加尾焰。选择GameObject-Create Other-Particle System 可在场景中增加一个粒子系统,将它移动到导弹的尾部,在Inspector面板中设置粒子的属性,使之成火焰状。然后也将Particle System 拖到cube上成为子对象。给cube也加上Rigidbody属性,改名为daodan.给daodan添加爆炸效果,使之碰撞后产生爆炸。在Project面板中搜explosion 将会找到Unity资源包中做好的爆炸效果,将它拖到场景中,并在Inspector面板中调整它的属性,使其成为我们需要的爆炸效果。在Project中创建一个新文件夹名为Audio,将爆炸声音的mp3文件复制到里面取名为exp1 ,将它拖给explosion 成为explosion的子对象,这样在调用explosion时将会有爆炸效果和声音。在Project面板中创建一个新文件夹名为Prefabs,右键选择Create-Prefab ,创建一个空的预置体,将做好的爆炸效果explosion拖放到新建的Prefab上,取名为exp1,这样这个预置体exp1包含了完整的爆炸效果和声音,下次需要使用时直接调用Prefabs文件夹中的exp1即可。场景现在不需要爆炸效果,所以将Hierarchy面板中的explosion删除。在Scripts文件夹中,新建一个JavaScript文件,取名为DaodanDestroy,并在其中输入以下代码:var LifeTime=2.0;/导弹存在的时间var explosionPrefab: Transform;function Awake () Destroy(gameObject,LifeTime);function OnCollisionStay(collisionInfo : Collision) Destroy(gameObject);Instantiate(explosionPrefab,transform.position,Quaternion.identity);保存并将其拖给Hierarchy中daodan,在游戏运行时,当调用daodan时,代码将会被执行,导弹最长存在时间为2秒,如果没有击中任何物体,导弹将会在2秒后销毁,如果与其它游戏对象产生碰撞,则碰撞时销毁导弹,且同时在碰撞处调用爆炸效果。而在Inspector面板中,Daodan Destroy中的Explosion Prefab 后面的值为none ,这是因为在程序中并没有给ExplosionPrefab赋值,而Unity脚本中的申明的变量,只要不设为private 都可以从外部赋值,只需将Project 中Prefabs文件夹里我们上面做好的爆炸效果预置体exp1拖到Explosion Prefab后的位置,就可以给它赋值为exp1 。这样,程序执行时,调用的爆炸效果就是exp1,此预置体中包含爆炸的效果和声音都会被执行。最后,在Prefabs文件夹中新建一个Prefab,并将Hierarchy中的daodan拖放到该预置体上,并取名为daodan,这样,设置好的导弹属性和代码全都放在daodan这个预置体中了,调用导弹时,只需调用这个预置体,就可以了。因为场景中此时不需要导弹,所以在Hierarchy面板中删除掉daodan 。(6)发射导弹控制在Project面板中,我们自己建的Scripts文件夹中,再建一个JavaScript脚本文件,取名为“MyFire”在其中输入代码:var FirePonit:Transform;var Bullet:Rigidbody;function Update () if(Input.GetButtonDown(Fire1)var clone:Rigidbody;clone=Instantiate(Bullet,FirePonit.position,FirePonit.rotation);clone.velocity=transform.TransformDirection(Vector3.forward*350);保存并将其拖给Player ,这时在Inspector面板中Player的属性将会多出一个My Fire(Script)项,其中Fire Point 和Bullet项后都为none,这是因为我们在程序开始就申明了FirePoint和Bullet变量,并且对其值的类型做了规定,FirePoint(开火方向)的类型为Transform,Bullet(子弹)的类型为Rigidbody ,但是在程序中都没有对它们进行初始化,也就是没有对它们赋值,所以属性中为none 。在场景中新建一个空对象,选择GameObject-Create Empty就可以创建一个空对象,该对象为空,游戏运行时是看不到的,但其有一个方向。将其放在Player 正前方,Z轴与Player的Z轴方向相同,将其改名为FirePoint,并拖放到Player上,使之成为Player的子对象。这样无论Player运动到哪个位置,FirePoint 总是处于Player的正前方,并且从该处发射导弹。然后将FirePoint拖到Inspector面板中Fire Point的后面,这样,就为Fire Point赋上了值,Inspector面板中Fire Point不再是none 。同样,从Project面板中,prefabs文件夹中导弹的预置体daodan拖到Bullet后面的位置,这样就为Bullet赋了值,Bullet的值为daodan 。(7)Player被击毁程序Player被击中时血量会下降,血量为0时则销毁Player并产生爆炸。同样在Scripts文件夹中新建一个JavaScript脚本,取名为PlayerDestroy ,其代码如下:var explosionPrefab: Transform;function OnCollisionStay(collision : Collision) if (collision.rigidbody) HealthControl.HEALTH-=10; if(HealthControl.HEALTH=0) Destroy(gameObject); Instantiate(explosionPrefab,transform.position,Quaternion.identity);保存并将其拖给Player,这时Inspector面板中Player Destroy(Script)下边的Explosion Prefab 后边的值为none . 同样使用Unity资源包中的爆炸效果,调整一个比exp1更大一些的爆炸效果,复制一个更宏亮一些的爆炸声音到Audio文件中取名为exp2,将声音拖给爆炸效果,并在Prefabs文件中新建一个Prefab ,将调整好的爆炸效果赋给它,并取名为exp2 ,删除Hierarchy中的爆炸效果。将exp2拖到Player Destroy 下边的Explosion Prefab 后的位置,将exp2赋给它。这样,在运行游戏时,被击中后HealthControl.HEALTH (player的血量)值就会减10 ,当血量为0时,销毁Player并调用exp2产生爆炸效果和声音。这里需要说明是HealthControl.HEALTH指的是HealthControl这个程序中的HEALTH变量,HealthControl是血条控制程序,该程序中HEALTH的值为100,在下面讲到GUI设计时将会详细说明该程序。4.4.2 敌方角色的设计(1)敌方战机属性设计与上面玩家战机的设计相同,从My Assets中将copter拖入场景中,对它进缩放,并建一个Cube,与上面操作相同将copter放入cube中,使copter的前方向与cube的Z轴相同,在层次面板Hierarchy中,将copter拖放到cube上,成为cube的子对象,然后把cube名字改为Copter 。同样创建一个空对象,名为FirePoint ,放在战机的正前方,Z轴与Copter的Z轴方向相同,将FirePoint拖放到Copter上,使之成了Copter的子对象。与上面玩家战机相同,将luoxuanjiang程序拖给Copter中的ApacRoto
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年国际足球赛事场地租赁合同
- 2024年建筑施工劳务承包简约合同样本
- 2024桩基础工程专业分包合同模板
- 2024代理合同样式
- 2024技术参股合作协议书
- 2024版药品代理合同
- 二手房交易合同
- 店面承租协议书范本
- 2024项目开发全过程专项法律服务合同
- 2024常用合作合同范本
- 2023~2024学年第一学期高一期中考试数学试题含答案
- 2023年全国中学生英语能力竞赛初三年级组试题及答案
- (完整版)青年就业创业见习基地汇报材料(完整版)
- 月光(羽泉)原版五线谱钢琴谱正谱乐谱.docx
- 660MW机组空预器声波吹灰器可行性研究报告最新(精华版)
- 控制柜安装施工方案
- 动车组火灾检测(报警)系统
- 水面垃圾自动打捞船的设计 (全套图纸)
- 烟草企业安全生产标准化 规范
- 装饰施工技术标准及要求
- 2018秋七年级虎外考试卷英语试卷
评论
0/150
提交评论