爱问 爱问共享资料 爱问分类
首页 >IT资料 >手机软件 >Unity3D_V3.X中文快速入门教程.pdf

Unity3D_V3.X中文快速入门教程.pdf举报

简介:

关于unity快速入门书籍

强大的跨平台3D游戏开发工具——Unity3D其实本书早就应该面世了的,由于期间牵涉到了Unity3D这款软件的版本不断更新与升级,我的教程也随之改了又改,书也就一拖再拖的耽搁了下来。不过还好的是Unity3D最新的正式版并没有让我们失望,其强大的游戏制作功能已经达到让人膛目结舌的地步。尤其是它在3.0里面制作那款第一人称战争游戏,画质效果丝毫不逊色于当下十分流行的《穿越火线》、《战地之王》等等的游戏。下图为Demo中的截图效果:Unity3D的官方网站:http://unity3d.comUnity3D的下载地址:http://unity3d.com/unity/download/下载好之后,您必须到它官方网站注册一个邮箱,才能获得30天试用。如果您觉得对这款软件满意,还可在购买之后继续使用。其中购买pro版本的Unity3D,会获得更多的功能。一、Unity3D的基本界面介绍场景面板:该面板为Unity3D的编辑面板;您可以将您所有的模型、灯光、以及其他材质对象拖放到该场景中。构建游戏中所能呈现景象。动画面板:与场景面板不同,该面板是用来渲染场景面板中景象的。该面板不能用作编辑,但却可以呈现完整的动画效果。层次清单栏:该面板栏主要功能是显示放在场景面板中所有的物体对象。项目文件栏:该面板栏主要功能是显示该项目文件中的所有资源列表。除了模型、材质、字体等,还包括该项目的各个场景文件。对象属性栏:该面板栏会呈现出任何对象的所固有的属性,包括三维坐标、旋转量、缩放大小、脚本的变量和对象等等。场景调整工具:可改变您在编辑过程中的场景视角、物体世界坐标和本地坐标的更换、物体法线中心的位子,以及物体在场景中的坐标位置,缩放大小等等。下面我重点详解一下菜单栏:菜单栏中包含有八个菜单选项:分别是File【文件】Edit【编辑】Assets【资源】GameObject【游戏对象】Component【组件】Terrain【地形】Window【窗口】Help(帮助)。其各自又有自己的子菜单:主菜单包含的子菜单File【文件】NewScene【新建场景】OpenScene【打开场景】SaveScene【保存场景】SaveSceneas…【场景另存为…】NewProject…【新建工程文件】OpenProject…【打开工程文件】SaveProject…【保存工程文件】BuildSettings…【创建设置】(这里指创建游戏设置)Build&Run【创建并运行】(这里指创建并运行游戏)Exit【退出】Edit【编辑】Undo【撤销】Redo【重复】Cut【剪切】Copy【拷贝】Paste【粘贴】Duplicate【复制】Delete【删除】Frameselected【当前镜头移动到所选的物体前】SelectAll【选择全部】Preferences【首选参数设置】Play【播放】Pause【暂停】Step【步骤】Loadselection【载入所选】Saveselection【存储所选】Projectsettings【工程文件设置】(包含:可执行文件EXE图标设置,画面抗锯齿功能设置等)Rendersettings【渲染设置】(如果您觉得整体画面的色彩质量不尽人意,可在此处进行调节)Graphicsemulation【图形仿真】(主要是配合一些图形加速器的处理)Networkemulation【网络仿真】(可选择相应的网络类型进行仿真)Snapsettings【临时环境】Assets(资源)Reimport【重新导入】Create【创建】(包含:文件夹、材质、脚本等等)ShowinExplor【显示项目资源所在的文件夹】Open【打开】ImportNewAsset...【导入新的资源】Refresh【刷新】ImportPackage...【导入资源包】ExportPackage...【导出资源包】SelectDependencies【选择相关】Exportoggfile【导出OGG文件】ReimportAll【重新导入所有】SyncVisualStudioProject【与VS项目同步】GameObject【游戏项目】CreateOther【创建其他组件】CenterOnChildren【子物体归位到父物体中心点】MakeParent【创建父集】ClearParent【取消父集】ApplyChangesToPrefab【应用变更为预置】MoveToView【移动物体到视窗的中心点】AlignWithView【移动物体与视窗对齐】AlignViewtoSelected【移动视窗与物体对齐】Component(组件)Mesh【网络】Particles【粒子系统】(能打造出非常棒的流体效果)Physics【物理系统】(可使物体带有对应的物理属性)Audio【音频】(可创建声音源和声音的听者)Rendering【渲染】Miscellaneous【杂项】Scripts【脚本】(Unity内置的一些功能很强大的脚本)Camera-Control【摄像机控制】Terrain(地形)CreateTerrain【创建地形】ImportHeightmap-Raw...【导入高度图】ExportHeightmap-Raw...【导出高度图】SetResolution...【设置分辨率】CreateLightmap...【创建光影图】MassPlaceTrees...【批量种植树】FlattenHeightmap...【展平高度图】RefreshTreeandDetailPrototypes【刷新树及预置细节】Window(窗口)NextWindow【下个窗口】PreviousWindow【前一个窗口】Layouts【布局】Scene【场景窗口】Game【游戏窗口】Inspector【检视窗口】(这里主要指各个对象的属性)Hierarchy【层次窗口】Project【工程窗口】Animation【动画窗口】(用于创建时间动画的面板)Profiler【探查窗口】AssetServer【源服务器】Console【控制台】Help(帮助)AboutUnity【关于Unity】Enterserialnumber【输入序列号】UnityManual【Unity手册】ReferenceManual【参考手册】ScriptingManual【脚本手册】UnityForum【Unity论坛】WelcomeScreen【欢迎窗口】ReleaseNotes【发行说明】ReportaProblem【问题反馈】二、Unity3D的一个简单预览每个Unity3D版本都会自带一个demo源文件。在3.0正式版中,自带的Demo就是网上展示的那款强大的射击游戏。在一般情况下,您只要第一次打开Unity3Dv3.0就会看见自带的那个demo项目文件。但如果Unity3D并没有打开这个项目文件,您可以在Unity3D里的“File”菜单下点击“OpenProject…”,在随后弹出的“Unity–ProjectWizard”对话框中点击“OpenOther…”按钮,在“C:\DocumentsandSettings\AllUsers\Documents\UnityProjects”这个路径下找到项目文件夹“BootcampDemo”,选择并打开它。打开项目之后,在舞台场景面板中依然什么都没有显示的的话,请在Project【项目文件栏】双击场景文件。稍等片刻之后,该舞台场景的所有对象就可导入舞台场景面板中。导入成功之后效果如下图所示:点击一下中间的播放按钮做一下测试(如果您的机器配置不是太高,可能等待的时间会稍长)。过了不一会,您就可以在Game【动画面板】中看到一个正在运行的射击游戏了。在这个游戏场景中,您能看到比其他游戏还要细腻的游戏画面,例如各个物体的实时阴影。当然如果您的机器配置比较高,那您还可以点击“ESC”键来将画质进一步调高。我们将画面质量调高之前,和画面质量调高之后的效果做一下对比,如下所示:看看河水是不是真实了许多。三、在Unity3D中创建一个山势地形图第一步:打开Unity3D软件,它可能会自动载入上一次的“BootcampDemo”项目文件。不管它,在软件打开之后点击“File”——>“OpenProject…”,在弹出的“Unity–ProjectWizard”对话框中找到“ProjectLocation:”输入创建项目的文件夹地址,或者点击后面的“Browse…”选择一个文件夹地址(注:已创建Unity3D项目的文件夹,不能当作新创建项目的文件夹来使用),然后在“Importthefollowingpackages:”中选择要导入的项目文件包,每个文件包都带有一些插件功能,由于我们第一次创建项目文件,所以我们将所有的复选框都打上勾。但这样做会使得Unity3D在开始加载的时候速度偏慢,等以后我们大家对各个包的作用熟悉了,在创建Unity3D项目文件的时候,我们只勾选需要使用到的包就可以了。全部设置好之后,我们点击“Create”创建项目。第二步:在创建一个新项目之后,我们会看见新项目的各个面板中,只有Project【项目文件栏】包含了“StandardAssets”和“StandardAssets(Mobile)”两个文件夹,这两个文件夹里面装的是之前所导入项目文件包里的所有文件。除此之外,其他版面都是空空如也。不要紧万丈高楼平地起,咱们马上就利用文件包和系统功能来丰富各个面板。首先我们点击菜单栏上的“Terrain”——>“CreateTerrain”创建一个带有地形属性的平面。如图所示:但我们发现Game【动画面板】中依然没有任何画面。其实道理很简单,就像演唱会的实况直播。您把场景全部搭建好了,演员请上场了,但没有加上摄像机,电视机前面的观众有如何能够收到演出的信号呢?第三步:点击“GameObject”——>“CreateOther”——>“Camera”,在场景中创建一个摄像机,这时您就可以在Game【动画面板】中观看到摄像机所观察到的景象了。下面我们来改变一下这个光秃秃的地面。第四步:点击菜单栏上的“Terrain”——>“SetResolution…”弹出“SetHeightmapresolution”面板来调节地面的大小。在“TerrainWidth”的后面将数字改成500,然后再在“TerrainLength”的后面将数字改成500,设置好之后点击“SetResolution”按钮来将原来的地形改成500*500大小的地形。第五步:在场景面板中选中刚才创建的地面对象“Terrain”,如果您觉得场景中不是很好选择所需要的对象,那么您还可以在Hierarchy【层次清单栏】选中您所需的对象,该栏中包含了所有场景面板中的物体对象。选中地面对象“Terrain”之后,我们会在Inspector【属性面板】中马上发现与之对应的属性,包含有:Position【坐标】、Rotation【旋转量】、Scale【缩放尺寸】、以及地面对象固有的“Terrain(Script)”和“TerrainCollider”。如下图所示:其中这个像画笔一样的按钮,是用来改变地面材质的。我们点击它之后,可以在下面找到,点击“EditTextures…”——>“AddTexture”来到“AddTerrainTexture”面板。然后我们单击后面的圆圈,就可以为地面添加您所喜欢的材质了。选择好之后请点击“Add”按钮来填入新材质。添加材质之后的地面如图所示:如果您觉得这个地形的材质过于单调,那么您可以继续点击“EditTextures…”——>“AddTexture”来添加第二个材质,然后在“Brushes”中选择您想要的笔刷形状,接着在场景面板中刷出新材质的区域范围。第六步:点击这三个按钮其中的一个,选择合适的笔刷,在地形图中可以刷出高山的形状,如图所示:如果您觉得现在山峰太高,或者说某处的山峰有些多余。您可以按住Shift键不放,用刚才的笔刷进行反向平刷。第七步:接下来就是给地形种草和种树了。具体的种草按钮是,而种树按钮是。而他们的设置方法与地形材质的设置方法十分雷同,都是先点击按钮来添加您所需要的花草或树木,然后在场景面板中刷出您所需要的区域。如图所示:这里大家需要注意一下,Unity3D在编辑模式下为了节约资源,采取了资源剔除的方法。如果您在利用笔刷“种草”的过程中,没有看到您所“种”上去的草,这时您只需将画面拉近即可观察到效果。第八步:点击,来设置地形上的风速、阴影等效果。第九步:地形的所有效果已经设置完毕,但我们发觉在Game【动画面板】画面似乎很暗,这是由于没有加入灯光的缘故。点击“GameObject”——>“CreateOther”——>“DirectionalLight”创建一个太阳光。太阳光和自身的位置没有多大的关系,只与自身的角度有关,这和我们平时生活中的太阳光是一致的。所以为了让场景变得更亮,我们就需要用到场景调整工具中的旋转按钮来对太阳光进行旋转。当然您也可以在属性面板中对它进行调节。根据我们生活的常识,当太阳光90直射地面的时候,光线最强。调整之后效果如下:这时的Game【动画面板】画面是不是亮了许多?第十步:为了让摄像机全方位的观察我们刚才所创建的场景,您可以在Project【项目文件栏】中找到、、这三个脚本文件,并将他们依次拖放到场景中的摄像机上面。如果您觉得Project【项目文件栏】中的文件过多,不容易寻找这三个文件,您还可以在Project【项目文件栏】上方的搜索框输入他们的名字,进行搜索,这样很快就能找到对应的文件了。放置完毕之后,点击测试按钮,您就可以身临其境的在您刚才创建的Game【动画面板】中进行漫游了。用鼠标控制视角,用键盘的方向键控制行走。漫游的过程中,您可以清晰的看见您创建的草随微风缓缓摆动。第十一步:再次点击测试按钮,退出动画模式。下面我们来为场景加上蓝天和光照效果。选中场景中的摄像机对象,然后点选菜单栏中的“Component”——>“Rendering”——>“Skybox”为摄像机添加一个天空盒。添加成功之后,您就能在摄像机的属性面板中找到刚才添加的天空盒了。接着我们去Project【项目文件栏】找到“StandardAssets”文件夹下的“Skyboxes”文件夹。这里面摆放了许多关于天空的材质球,您只需要选中一个您喜爱的天空材质球,并拖放给摄像机里的天空盒【Skyboxe】的材质属性【CustomSkybox】,就可让场景的天空布满这种材质效果。选中场景中的光照对象“Directionallight”,然后在它的属性面板中找到“Flare”,并点选它后面的圆圈。在它弹出的“SelectFlare”对话框中选中双击这种光照效果,这样就可以使得您在动画模式中清楚的看见太阳所在的位置。再运行一下动画看看效果:第十二步:为了让场景更加的逼真,我们还可以为场景添加光照阴影效果。具体的做法如下:选中光照对象“Directionallight”,在它的属性面板中找到“ShadowType”【阴影模式】,它默认的是“NoShadows”【没有阴影】,您可以将它改成“SoftShadows”【软渲染阴影】或是“HardShadows”【硬件渲染阴影】。“SoftShadows”【软渲染阴影】以消耗CPU的计算为代价来产生阴影效果,这种模式运行速度较慢,但对于机器配置比较落后的使用者是唯一的选择。“HardShadows”【硬件渲染阴影】可利用新一代GPU的显卡加速功能来为游戏进行阴影效果的渲染处理,其运行速度比较快,渲染效果也比较理想。但无论您选择哪一个选项,动画场景的物体都会相对于阳光产生阴影效果。如图所示:第十三步:所有的场景效果调试完毕,按下Ctrl+S来保存场景文件,取名叫做“terrain”以便日后调用。如果保存成功,您会在您项目的Project【项目文件栏】中看到一个这样的文件。四、为地形添加水源、各种水流以及水下的模糊效果。第一步:打开Unity3D软件并导入上一次的“firstUnity”项目文件。由于我在上一次的地形创作中就已经在山峰之间制作了一块洼地,它可以作为一个承载湖水的地方。如果您上次的创作并没有这样的地形,那么请您重新创建一个山势地形图,就当作自己的一次练习吧。在场景面板中点击Y方向的绿色箭头切换到顶视图,这样可以便于我们很快的找到洼地的所在地方。然后用鼠标滚轮迅速的推进观测距离。接着再到Project【项目文件栏】找到“StandardAssets”文件夹下的“Water(ProOnly)”【仅限专业版使用,如果是非专业版请转到‘Water(Basic)’】文件夹中,拖拽一个DaylightWater【白天光照效果的水模型】到洼地的中央,并利用场景调整工具中的缩放工具,将水模型调整到合适的大小。紧接着我们再点击场景面板中右上角的白色小方块,将视角切换到透视图。然后利用场景调整工具中的位移工具,将水模型调整到合适的高度。这时您只需在播放时,将摄像机移动到洼地这个地方就可以看见湖水的效果了。第二步:但这样的效果略显单调了一些,既然是山中泉水我们还得有一些瀑布和溅起的浪花。为了节约时间,我们直接在Project【项目文件栏】上方的搜索框输入字符“waterf”,就可以查出如图所示的材质和模型。在这里面中,“WaterFountain”是一个喷泉模型,“WaterSurfaceSplash”是一个水面的飞溅模型,“WaterFall”是一个瀑布模型。我们先拖入一个“WaterFall”到洼地,然后利用场景调整工具来调整它的位置和角度。这时的瀑布略显小了一些,我们可以先选中它,然后到它的属性面板去调整成您想要的效果。再接着我们在瀑布下的水面上方放置一个水面飞溅模型“WaterSurfaceSplash”。由于它的高度一定要和水面高度一致,所以我们先点选水平面看看它Y轴的数字,然后在点选“WaterSurfaceSplash”到它的属性面板中输入同样的Y轴数字,以确保它浮在水面上。紧接着到它的属性面板中调整它的属性,让改模型变成您想要得到的效果。第三步:我运行一下游戏,然后将镜头移动到泉水的水面下。大家会发现,水下的视觉和在平地上的视觉效果是完全一样的。这和我们平时的生活现状是不相符的,所以我们还得做一下相应的调整。首先点击“GameObject”——>“CreateOther”——>“Cube”创建一个立方体,并运用场景调整工具将它调整到整个水洼的实体部分。(注:运用其他形体也可以,其主要是用来覆盖水洼的实体部分,以用来和摄像机作碰撞检测,让摄像机的镜头变得模糊。)接着,确保您创建的这个Cube是被选中状态,到它的属性面板中,将“BoxCollider”卷展栏中的“IsTrigger”复选框打上勾(如果这里不打勾,这个立方体将作为一个实物,当摄像机撞上它时,就像撞上一堵墙,无法通过)。然后再将“MeshRenderer”卷展栏下的所有复选框全部点掉,使这个立方体只作为一个形体存在,而不让它在场景中作出任何的显示渲染。接着在属性面板的最上方将它的名字由“Cube”更改为“WaterColler”,再选中“Tag”的下拉框——>“AddTag…”新添加一个“WaterColler”的标签分类。然将这个“WaterColler”水洼碰撞体的Tag也改成“WaterColler”。第四步:在菜单栏中选中“Assets”——>“Create”——>“JavaScript”新添加一个JS脚本。到Project【项目文件栏】找到刚才新建的JS脚本,按下F2键更改它的名字为“UnderWaterEffect”,并双击编辑它,输入如下代码:privatevardefaultFog=RenderSettings.fog;privatevardefaultFogColor=RenderSettings.fogColor;privatevardefaultFogDensity=RenderSettings.fogDensity;privatevardefaultSkybox=RenderSettings.skybox;varnoSkybox:Material;functionOnTriggerStay(hit:Collider){if(hit.gameObject.tag=="WaterColler"){RenderSettings.fog=true;RenderSettings.fogColor=Color(0,0.4,0.7,0.6);RenderSettings.fogDensity=0.04;RenderSettings.skybox=noSkybox;}}functionOnTriggerExit(hit:Collider){if(hit.gameObject.tag=="WaterColler"){RenderSettings.fog=defaultFog;RenderSettings.fogColor=defaultFogColor;RenderSettings.fogDensity=defaultFogDensity;RenderSettings.skybox=defaultSkybox;}}输入完毕,按Ctrl+S保存代码并关闭退出,然后将代码拖拽给摄像机使用。重新运行一下游戏,将摄像机移动到水下,就可以看到一片模糊的景象了。在Unity3D中,关于水的设置是一门非常深的研究课程。Unity3D群里的“黑魔麟”、“模模糊糊”等都有比较深的造诣,但在这本书中我并不作出过多的阐述,因为本人也在联系各位U3D高手们,打造一本U3D的黄金书籍,这里大家先入个门。下面为各位高手们制作的一些水效截图:五、U3D中脚本的简单概述和前面的所学3D软件一样,U3D作为一个类播放器的3D集成软件有着良好的时间层级关系。比方说Start()里面的语言,总是在播放器初始化时执行一次,而后就不再执行。例如下面用JS写的一个列子:在菜单栏上选中“Assets”——>“Create”——>“JavaScript”。functionStart(){print("Gameisstart");}将这段代码拖拽给Hierarchy【层次清单栏】中任意一个对象,您就会在播放器刚开始播放的时候,在左下方的控制台面板中看到“Gameisstart”这样一句话,证明您的Game播放器已经开始工作了。(*注:这个控制台面板以后大家会经常使用到它,因为它可以用作您代码片段的调试,以及您程序出错了的提示框,详细的提示您出错的原因所在。)当然有了初始化函数,就一定会有我们的刷帧函数Update(),该函数内所有的代码会在播放器每播放一帧时执行,例如下面用JS写的一个列子:在菜单栏上选中“Assets”——>“Create”——>“JavaScript”。functionUpdate(){print(Time.time);}该代码会在播放器每播放一帧的时候,显示游戏开始到现在所消耗的时间值。U3D中有着非常强大的接口处理功能,您可以在代码中为对象制定任意一个空接口用于和对应类型的对象进行交互,例如下面用JS写的一个列子:在菜单栏上选中“Assets”——>“Create”——>“JavaScript”。varAddSpeed=5;functionUpdate(){transform.Translate(0,0,AddSpeed);}该代码为对象添加了一个在Z方向上的初始速度,如果在没有其他外力的作用下,物体将一直沿着Z方向以5的速度行驶。并且当您将这段代码拖拽给一个物体对象之后,它的这个初始速度可以作为一个接口在它的属性面板中进行修改。除了数字作为接口外,接口还可以是对象,例如下面用JS写的一个列子:在菜单栏上选中“Assets”——>“Create”——>“JavaScript”。varAddSpeed=5;//定义一个变换对象cubeGOvarcubeGO:Transform;functionUpdate(){//在逐帧播放的过程当中,一旦按下G键cubeGO就以AddSpeed速度,朝Z轴方向运动if(Input.GetKey(KeyCode.G)){cubeGO.Translate(0,0,AddSpeed);}}您可以将这段代码拖放给Hierarchy【层次清单栏】中任意一个对象,因为它在这里定义了一个Transform类接口对象cubeGO,所以它几乎与拖拽的对象无关。拖拽成功之后来到该物体的属性面板中,您可以看到这样的一个属性卷展栏,cubeGO的后面有个很明显未定义对象填写栏“None(Transform)”,然后我们把想要使之运动的物体拖拽到这个上面来,如图所示:当我们运行游戏时,只要按下“G”键就可以看到Cube作为“cubeGO”的指代对象,朝着“Z”轴方向运动了。六、8QLW\'中的C#6FULSW编程的注意事项也许您在学习U3D之前,已经是一位C#的编程高手了。但在U3D中的C#并像真正的C#那般强大,在U3D的C#中必须全部继承自MonoBehaviour,像这样的格式publicclassNewBehaviourScript:MonoBehaviour{...}。下面为一段C#Script完整代码:usingSystem.Collections;usingUnityEngine;publicclassNewBehaviourScript:MonoBehaviour{IEnumeratorSomeCoroutine(){yieldreturn0;yieldreturnnewWaitForSeconds(2);}}除此之外它不支持空间命名,但官方说它们很有可能会在以后的版本中支持这一功能。在U3D中,JavaScript和C#Script的编程效果近乎一样。只是为了不同程序爱好者设立了不同的编程模式。并且JavaScript所编写的代码对象可以和C#Script编写的代码对象交叉使用,并不发生任何冲突。七、利用MonoDevelop编写代码,来和U3D协同作战。和我们前面所学到的软件一样,U3D同样有着一个为它提供强大编程支持的脚本编辑器《MonoDevelop》。这个软件会在您安装Unity3D3.0的时候自动安装。您可以在计算机的开始菜单下的Unity3D目录中找到这个软件,如图所示:打开MonoDevelop之后,点击新建按钮。直接单击“Unity”就可以看到它所对应的几个编程语言,其中的UnityScript指的就是JavaScript。同样的,在里面输入代码就会弹出相应的提示,使用起来比用U3D中的脚本编辑方便了许多。如图所示:八、修改MonoDevelop编辑器为U3D的默认编辑器。通常情况下U3d默认的编辑器都是“UniSciTE”,它用起来十分轻巧快捷,就像记事本一样。但如果要开发一些大型的项目,显然“UniSciTE”简单的功能就不足以支撑它的工作了。但如果您每回在编辑脚本的时候,都去用“MonoDevelop”一个一个的打开,又显得很麻烦。所以我们就要在U3D中做一些设置,让“MonoDevelop”成为默认的脚本编辑器。具体的步骤是:在菜单栏中找到“Edit”——>“Preferences…”,在弹出的“UnityPreferences”对话框中找到“ExternalScriptEditor”并将它后面的下拉框选中为“Browse…”浏览到我们“MonoDevelop”可执行文件存放的地方。这个路径一般都和您U3D文件夹在一起,比方说您的U3D安装在D盘的ProgramFiles文件夹中,那么您可以直接在这个路径“D:\ProgramFiles\Unity\MonoDevelop\bin”找到“MonoDevelop.exe”这个文件。设置好之后,重新在U3D中点选下脚本文件,发现已经能用“MonoDevelop”软件打开了,但第一次打开的时候会稍显慢一点,因为“MonoDevelop”要加载很多东西。效果如下图所示:(注:如果您是一个C#和VisualStudio忠实编程爱好者,你可以用同样的方法来设置VisualStudio的软件的路径,让VisualStudio成为U3D的脚本默认编辑器。)九、向U3D中导入外部模型U3D支持多种外部模型格式,但它并不是对每一种外部模型的属性都支持。具体的支持参数,您可以对照如下列表:网络材质动画骨骼Maya的.mb和.ma1格式3DStudioMax的.max1格式Cheetah3D的.jas1格式Cinema4D的.c4d12格式Blender1格式的.blendCarrara1COLLADALightwave1AutodeskFBX的.dae格式XSI5的.x1格式SketchUpPro1Wings3D13DStudio的.3ds格式Wavefront的.obj格式DrawingInterchangeFiles的.dxf格式下面的实例中,我们利用3DMax来制作一个完整的动画,并导出FBX的格式给Unity3D使用。第一步:创建一个名为“Turret”的项目文件夹。然后打开Unity3D软件,选择“File”——>“NewProject…”创建一个新工程项目,在项目路径中点击“Browse…”选择找到我们刚才的“Turret”文件夹,并点选我们需要导入的包文件,然后点击“Create”来创建一个Unity3D是无法以非空的文第二步:打开3DMax软件制作一个炮塔模型,并将制作好的模型保存在“Turret”文件夹中的“Assets”【资源】文件夹下面。下图为3DMax中的模型样图:新的工程文件。(注:这个步骤千万不能乱,因为件夹作为工程文件夹来创建项目的。)为了保障模型在U3D中的显示效果,我们给模型添加一些光照,并将添加了光照的模型渲染为烘焙贴图,这样可使得模型本身带有一些明暗纹理效果。其烘焙贴图的方法请参看第三章的3.8小节,烘焙之后的效果图如下所示:烘焙完毕之后,按住Ctrl+S保存文件。质贴图文件了。第三步:重新来到Unity3D的软件环境中,这时大家已经能在Project【项目文件栏】看到我们刚才用3DMax导出的模型文件和材接着利用我们前面章节中所学到知识,为场景文件添加地形和阳光。然后在地形图上找一个合适的位置,将我们的炮塔拖拽上去。但这样看着,似乎太小了一点。在改变外部模型的尺寸的时候,有一个技巧,您不必在场景中修改它。而可以到该模型所在的属性面板中去修改它的“ScaleFactor”大小。它的默认值是0.01,我们在这里将它改为0.1,并在属性面板的最下方找到“Apply”按钮,点击它让模型尺寸在U3D中得到改变。再来看看我们的炮塔,是不是雄壮了许多?但是,我们并不赞同这样的模型导入方法。因为根据官方的说法,他们建议您将做好的模型导出成为FBX格式的模型文件给Unity3D使用。也许这样会使模型在Unity3D中的运行速度得以提高吧。所以说我们还得回到3DMax的软件环境下面,做一下导出工作。第四步:在3DMax中,点击File【文件】——>export【导出】,将模型文件导出为FBX文件,保存到“Turret”文件夹中的“Assets”【资源】文件夹下面。注意一下弹出的“FBXExport”面板,这里包含了模型动画、骨骼工具、材质等等一系列的导出设置。如果您没有在模型中添入这些东西,就请您将不必要的复选框点掉。第五步:回到Unity3D的软件环境,在Hierarchy【层次清单栏】中选中原先的炮塔模型,按下Delete键将其删除。然后在Project【项目文件栏】中找到刚刚导入FBX模型,点击选中它,用前面修改模型尺寸的方法来修改FBX模型的尺寸。然后将其放置在场景中合适的位置上。十、预制对象Prefab,及其它的调用方法。还记得我们在第二章中对Flash的学习吗?如果您不想让某些物体出现在舞台上,但您又想通过代码随时的来调用这些物体。就比方说游戏中的炮弹或子弹这类似的物体。那我们就要先在flash的库中创建一个这样的影片剪辑,但并不把它拖放到舞台上显示,然后用鼠标的右键点击它,并在它的属性面板里面将“为ActionScript导出”复选框打上钩,这便可以随时随刻的用代码将它调入或调出舞台了。Unity3D中同样有着类似的功能,但它和flash在用法上稍稍不同。具体的做法是:在菜单栏中点选“Assets”——>“Create”——>“Prefab”在Project【项目文件栏】中创建一个预制类对象,这时您会发现预制类对象前面的小方框是灰色的,这说明它是一个空对象,如果您现在用代码调用它,您并不能看到任何的东西。但如果您在Project【项目文件栏】中向它拖入任意物体,那么你立马就可以在调用“newprefab”的地方看到这个被拖入的物体,并且看见“newprefab”前面的图标变为了实际的蓝色。预置类对象“Prefab”就像一个空着的盒子,您可以为它填充任何的东西,并利用代码在舞台上显示它。十一、图形用户界面类G.U.I您在玩很多3D游戏的时候,不知是否注意到在游戏界面中,总有一些图形和文字信息是不随着3D视觉的改变而改变的。这也是由于游戏本身的要求所决定的,比方说英雄的生命值,聊天窗口的文字信息等等。这一些不被改变的类就被称作G.U.I。下面我们一起在U3D中简单做两个G.U.I实例,来说明它的用法。第一步:打开Unity3D,它会自动导入上一次的工程项目。为了节省篇幅,我们还是使用前面的“Turret”工程项目来做说明。假设我们就现在的项目来做一个炮弹发射的游戏,想想我们都需要做写什么工作?是不是应该在画面的一个角落显示炮弹填发的情况?就像大多数3D游戏那样,您的魔法值在使用完毕之后需要一定恢复时间。第二步:用PhotoShop制作弹药的填发时间图。并将它们全部保存为PNG文件到工程项目的“Assets”文件夹内。上面为PhotoShop制作的填发时间图,一共5张。第三步:回到Unity3D软件环境中,为了归类我们在Project【项目文件栏】中右键——>“Create”——>“Folder”新建一个文件夹,并按F2将其更名为“shortTime”,再将导入的五张图片拖入文件夹内。第四步:在菜单栏中选中“GameObject”——>“CreateOther”——>“GUITexture”创建一个GUI图标,这时大家会在Scene【场景面板】中看到一个默认Unity3D的图标,如图所示:在Hierarchy【层次清单栏】选中它之后,来到它的属性面板中,点击Texture后面的来改变它的图标为我们刚导入弹药填充图标。再通过属性面板中其他属性值的更改,得到图标最终的显示大小和显示位置,如图所示:第五步:在菜单栏中选中“GameObject”——>“CreateOther”——>“GUIText”创建一个GUI文字在图标的旁边作为说明。其文字输入、文字大小、文字样式等等也同样在它的属性面板中调节。十二、怎样让Unity3D支持中文字体在上一节当中,大家学习了G.U.I图形和文字的使用方法。但细心一点的朋友可能会发现,在“GUIText”中输入中文是完全没有作用的,这是由于现在Unity3D还不支持中文的缘故。但是,这并不能影响我们对中文作品的开发。Unity3D中可以将任意的字体作为材质文件赋予“GUIText”,其中就包含中文字体。具体做法如下:第一步:将您需要的中文字体拷贝到项目文件中的“Assets”文件夹内。第二步:在菜单栏中选中“GameObject”——>“CreateOther”——>“GUIText”创建一个GUI文字,然后在它的属性面板中找到“Font”点选他后面的,将它的字体类型改为您刚才拷贝进来的那个字体,接着在属性面板中找到“Text”后面的输入框输入您想要的输入的中文字体。观察场景面板,得到如下效果:十三、制作炮塔的旋转第一步:给炮塔的上半部分添加一个旋转函数,使得炮塔随着鼠标在X方向上的移动而移动。在Project【项目文件栏】中右键——>“Create”——>“JavaScript”新建一个JavaScript函数,并按F2将其更名为“turretRotate”,然后输入如下代码。varspeed:float=20.0;//旋转速度functionUpdate(){//这里乘以Time.deltaTime函数是为了使旋转效果更加的平滑。transform.Rotate(Vector3(0,0,Input.GetAxis("MouseX"))*Time.deltaTime*speed);}点选场景面板中的炮塔,找到炮塔上半部分所对应的对象,如图:接着将刚才的“turretRotate.Js”文件拖拽给这个对象。第二步:选中摄像机对象“Camera”,点选菜单栏中的“Component”——>“Camera-Control”——>“SmoothFollow”为摄像机添加一个平滑的跟随代码,但这里并没有设置跟随对象。第三步:继续选中摄像机对象,在它属性面板中找到“SmoothFollow(Script)”卷展栏下的“Target”,然后将炮塔上半身对象拖放给它。第四步:点击测试按钮,试着移动下鼠标看看炮塔的旋转效果。摄像机随着炮塔的旋转而旋转,而GUI图标和GUI文字一直在左上方,效果很不错。十四、制作炮弹的射击和爆炸效果第一步:点击菜单栏的“GameObject”——>“CreateOther”——>“Sphere”创建一个球体模型,并利用场景调整工具将其调整到和炮口差不多的大小。第二步:找两张金属材质的贴图,第一张为基本RGB贴图,第二张为普通显示贴图。图一图二这样做是为了一会在给物体赋予材质时,让它有立体的感觉。您也可以只给物体找一张贴图材质。找到想要的材质贴图之后,将它们拷贝到项目文件夹中“Assets”文件夹内。第三步:选中刚才的球体模型,在它的属性面板中找到材质球下拉选项框。将它的渲染模式改为“BumpedDiffuse”,紧接着将深色的材质贴图拖放给第一个材质框,将浅色的材质贴图拖放给第二个材质框。得到一个带有材质感的炮弹,如图所示:第四步:在菜单栏中点选“Assets”——>“Create”——>“Prefab”创建一个预制类对象,并按下F2键更改它的名字为“Shot”,然后将球体模型模型拖入到预制对象中,并删除场景面板中的炮弹。但这时的球体模型仅仅是在外观上有了炮弹的样子,我们还得让它有炮弹一样的物理特性。接着在菜单栏中点选“Component”——>“Physics”——>“Rigidbody”为炮弹添加一个刚体属性。第五步:在菜单栏中点选“GameObject”——>“CreateEmpty”创建一个空对象放置在炮口,作为一会炮弹发射的起始点。按下F2将其更名为“FirePoint”。然后在Hierarchy【层次清单栏】中,把“FirePoint”拖到炮塔上半身的旋转对象中去,这样可以使得它和炮塔一起旋转。第六步:为炮弹创建一个发射函数。在Project【项目文件栏】中右键——>“Create”——>“JavaScript”,创建好之后按下F2将其更名为“openfire”。然后双击该文件,输入如下代码://定义一个变换对象FirePoint作为发射点对象的代码的接口varFirePoint:Transform;//定义一个刚体对象Bullet作为炮弹对象的代码接口varBullet:Rigidbody;functionUpdate(){//当鼠标左键按下的时候,就在场景中创建一枚炮弹,并发射它if(Input.GetMouseButtonDown(0)){varclone:Rigidbody;//重新实例化对象clone,让它的坐标位置和方向与发射点对象的一致。clone=Instantiate(Bullet,FirePoint.position,FirePoint.rotation);//实例化完毕,让炮弹以100的速度朝前发射。clone.velocity=transform.TransformDirection(Vector3.forward*100);}}输入完毕之后,将该代码拖拽给Hierarchy【层次清单栏】中的发射点对象“FirePoint”,然后我们会在属性面板中的“FirePoint”接口和“Bullet”接口对象为空。所以我们必须得把发射点对象“FirePoint”和炮弹对象“shot”拖到两个对应的接口上。第七步:按下测试按钮看看效果。大家会发现朝前发射的炮弹在碰到山体之后,都被弹了起来。所以说此时的炮弹顶多只能算得上一个钢弹,它并不会

相关资料推荐

  • 名称/格式
  • 下载次数
  • 资料大小

用户评论

0/200
暂无评论

资料阅读排行

该用户的其它资料

关闭

请选择举报的类型

关闭

提示

提交成功!

感谢您对爱问共享资料的支持,我们将尽快核实并处理您的举报信息。

关闭

提示

提交失败!

您的举报信息提交失败,请重试!

关闭

提示

重复举报!

亲爱的用户!感觉您对爱问共享资料的支持,请勿重复举报噢!

收藏
资料评价:

所需积分:2 立即下载
返回
顶部
举报
资料
关闭

温馨提示

感谢您对爱问共享资料的支持,精彩活动将尽快为您呈现,敬请期待!