unity3d有手机版吗如何设计漂浮字体

1、为什么unity3d有手机版吗自带字体能對中文加粗而自定义字体不能对中文加粗,如何解决2、如何给文本描边?我没看到如何关于描边的功能... 1、为什么unity3d有手机版吗自带字體能对中文加粗,而自定义字体不能对中文加粗如何解决?2、如何给文本描边我没看到如何关于描边的功能。

在新2113的Unity版本中UGUI字体描边昰需要有额外5261的脚本支持4102

另外就是字体加粗的问题,这个个人认为有可能是跟你用的字体有关,我这里换了一个字体还是有其加粗效果在的

推荐先试一下换一个字体,看一看是不是字体文件本身的问题如果不是再查看一下程序脚本中是不是做出了相关设定。

我那個自定义字体是XP系统自带的宋体在网上下载的

这个据我所知有可能跟字体、机器都有可能有关,如果方便的话麻烦发一份字体文件我這里试一下。我这里用宋体貌似也可加粗

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜頭里或许有别人想知道的答案。

1.1 Unity简介 随着计算机软硬件技术的发展对游戏品质的要求越来越高,技术上的研发也变得越来越困难一些有实力的公司开发了自己的技术,推出了不同的游戏引擎使开發者可以重用已有的技术,集中精力在游戏的逻辑和设计上很大程度提高了生产效率。 Unity(也称Unity 3D)是一套包括图形、声音、物理等功能的遊戏引擎提供了一个强大的关卡编辑器,支持大部分主流3D软件格式使用C#或JavaScript等高级语言实现脚本功能,使开发者无需了解底层复杂的技術快速地开发出具有高性能、高品质的游戏产品。 Unity是跨平台的3D游戏引擎支持的平台包括PC、Mac、Linux、Web、iOS、Android、Xbox360、Play Station3等大部分主流游戏平台,还可鉯将游戏直接导出为Flash格式放到网页上如图1-1所示。很多时候可以选择在PC平台开发和测试,然后只需要很少的改动即可将游戏移植到其怹平台。 图1-1 Unity支持的游戏平台 Unity是一个成熟的游戏引擎其能力是毋庸置疑的,随着iOS、Android手机的大量普及和3D网页游戏的兴起Unity因其强大的功能、良好的可移植性,在手机和网页平台得到了广泛地应用和传播 在手机移动市场可以找到大量使用Unity开发的游戏,如Battle heart、Zombieville USA、AirAttack HD、Samurai II: Dojo等Unity不但能开发3D遊戏,也能开发2D游戏而且画面效果出众。 使用Unity开发的游戏可以方便地发布到网页上面比如笔者开发的塔防游戏“野人大作战”,除了茬iPhone和iPad上发布也发布到了在线游戏网站KONGREGATE上,每天都有很多玩家在玩这个游戏如果有兴趣,可访问

然后搜索游戏的英文名Wild Defense,就可以玩到這个游戏了如图1-2所示。 图1-2 网页版野人大作战 Unity内置了Raknet网络引擎如果只是需要制作玩家与玩家之间直接连接的网络游戏,使用这些功能就夠了 经常会有人问,Unity能做MMO游戏吗答案是肯定的。但Unity只能完成客户端部分服务器部分通常是由C++、Java,或者PHP之类的技术完成的 在Unity中,可鉯使用标准的Socket功能完成长连接网络通信也可以使用Unity提供的WWW功能提交HTTP网络请求。 Asset Store是Unity官方在线商店的名称里面主要是出售Unity的插件或美术资源。严格来说这并不能算是Unity的一个功能但它确实已经成为Unity的一部分,很多Unity的插件已经成为Unity开发中的必要组成部分如NGUI等。 1.2 运行Unity 本节介绍洳何安装和运行Unity示例工程及安装Visual Studio为使用Unity开发游戏创建一个工程环境。 1.2.1 Unity的版本 Unity提供了基础版和专业版两个版本专业版相对于基础版有更哆的高级功能,比如实时阴影效果、屏幕特效等 在PC和Mac平台上,基础版是完全免费的但针对Flash、iOS、Android等平台则要收取授权费用。到Unity的在线商店

可以了解到详细的价格情况 1.2.2 安装Unity 在Unity的官方网站

可以免费下载Unity,包括PC版和Mac版这是完整的安装包,包括专业版和针对Flash、iOS、Android等平台的全部功能下载完Unity后,运行安装程序按提示安装即可。 1.2.3 在线激活Unity 第一次运行Unity会提示在Enter your serial number处输入Unity的序列号如图1-3所示。 对于没有序列号的用户鈳以选择【Activate the free version of Unity】使用免费的基础版,如图1-4所示 图1-3 输入序列号 图1-4 选择基础版 在正式使用免费版之前,需要输入Unity的用户名和密码如果还没有賬户,选择【Create Account】即可创建一个新的账户如图1-5所示。 图1-5 登录账户 1.2.4 运行示例工程 第一次启动Unity会打开Unity的工程向导对话框,如图1-6所示选择【Open Other】,浏览路径到示例工程存放的位置默认存放在“我的文档”目录下的Unity Projects\4-0_AngryBots中,当在浏览器中看到Assets这个文件夹时选择【选择文件夹】即可咑开示例工程。 图1-6 工程向导对话框 打开示例工程后会看到Unity的编辑器界面,几乎所有的开发工作都要在这个编辑器中完成在编辑器的视圖中,开发者可以像操作3D图形软件一样设置游戏场景编辑游戏对象,所有的游戏资源(包括模型、贴图、脚本等)都需要导入到编辑器Φ才能使用Unity编辑器中包括Hierarchy、Project、Inspector、Scene、Game几个窗口,如图1-7所示 图1-7 编辑器界面 在菜单栏选择【File】→【Open Scene】,选择AngryBots.unity打开示例的关卡文件。现在茬Scene窗口中可以看到游戏的场景,如图1-8所示 关卡即是Unity中的Scene场景文件,Unity最后打包的游戏所包含的内容即是所有与关卡相关联的资源和Resources路径丅的资源。 图1-8 示例游戏场景 为了能够在Scene窗口中浏览场景有一些改变场景视图角度的快捷键需要知道: ? 按鼠标中键平移视图。 ? 按鼠标咗键+Alt键旋转视图 ? 按鼠标右键+Alt键或滑动鼠标滑轮推拉视图。 ? 按F键可以快速锁定选中的目标 最后,在工具栏选择【播放】(如图1-9所示)即可在Game窗口中运行示例游戏。 图1-9 选择【播放】 1.2.5 安装Visual Unity的底层是使用C++开发对于Unity的开发者,只允许使用脚本进行开发降低了开发难度。Unity支持的脚本包括C#、Javascript和Boo比较流行的是C#和JavaScript,本书的范例全部都是使用C# 所有的Unity脚本都继承自MonoBehaviour这个类,它没有Main函数入口采用了事件触发的模式,提供了比如Start、Update这样的函数根据不同的事件响应不同的函数。具体内容可以搜索帮助文件中MonoBehaviour的相关内容 接下来,我们将使用Unity完成一個“Hello World”程序并将它创建为一个标准的Windows可执行程序,步骤如下: 启动Unity在菜单栏选择【File】→【New Project】打开工程向导窗口,选择【Browse】确定新工程嘚保存路径然后选择【Create】创建一个新的工程,如图1-11所示 图1-11 创建新工程 Unity只允许在空的文件夹内创建新工程。 创建新工程后在Project窗口选择【Assets】,然后按右键选择【Create】→【C# World是一个类的名称它继承自MonoBehaviour,注意这个类在Unity中不能使用关键字new创建因此也没有构造函数。Start函数从字面即鈳看出是开始的意思可以简单把它理解为一个初始化函数,Update函数也是一个事件触发函数它在每一帧都会被执行,OnGUI函数专门用来绘制UI界媔 回到Unity,在Hierarchy窗口内选择Main Camera选中摄像机在菜单栏选择【Component】→【Scripts】→【Hello World】将脚本指定给摄像机。运行游戏即可看到“Hello World”几个字显示在屏幕仩,如图1-13所示 图1-13 运行游戏 现在,需要将前面的劳动成果保存一下在菜单栏选择【File】→【Save Scene As】将当前关卡保存在Asset目录内,命名为Hello World可以看箌,我们一共创建了两个文件:一个是脚本文件;另一个是关卡文件如图1-14所示。 图1-14 脚本和关卡文件 确定前面保存的关卡处于打开状态茬菜单栏选择【File】→【Build Settings】打开Build Settings窗口,如图1-15所示选择【Add Current】将当前关卡添加到Scenes In Build下面的框中(也可以直接将关卡文件拖入框中),只有将关卡添加到这里它才能被集成到最后创建的游戏中。 图1-15 添加关卡 最后还需要进行很多设置这里我们将只设置游戏的名字。在Build Settings窗口选择【PlayerSettings】在Inspector窗口将Product Name设为“Hello World”,如图1-16所示 图1-16 设置游戏名字 在Build Settings窗口选择【Build】,然后选择保存路径即可将程序编译成独立运行的标准Windows程序 本节的示唎文件保存在资源文件目录\chapter01_Hello World中。 1.4 调试程序 游戏开发中出现错误是正常的调试程序发现错误非常重要。本节将介绍调试程序的几种常用方式 1.4.1 显示Log 在Unity编辑器下方有一个Console窗口,用来显示控制台信息如果程序出现错误,这里会用红色的字体显示出错误的位置和原因我们也可鉯在程序中添加输出到控制台的代码来显示一些调试结果: Debug.Log("Hello, world"); 运行程序,当执行到Debug.Log代码时在控制台会对应显示出“Hello, world”信息,如图1-17所示 图1-17 顯示调试信息 如果将Debug.Log替换为Debug.LogError,控制台显示的文字将呈红色显示 这些Log内容不仅会在Unity编辑器中出现,当将游戏运行在手机上时仍然可以通过笁具实时查看 在Console窗口的右侧选择【Open Editor Log】会打开编辑器的Log文档,一个比较实用的功能是当创建出游戏后,在这个Log文档中会显示出游戏的资源分配情况如图1-18所示。 在Unity编辑器中运行游戏当运行到断点时游戏会自动暂停,这时可以在MonoDevelop中查看调试信息如图1-20所示。之后需要按F5鍵越过当前断点才能继续执行后面的代码。 图1-19 选择Unity Editor作为调试对象 图1-20 利用断点调试 1.5 光 照 在3D游戏中光是一项重要的组成元素,一个漂亮的3D场景如果没有光影效果的烘托将暗淡无光因此,Unity提供了多种光影解决方案下面将逐一介绍。 1.5.1 光源类型 Unity一共提供了4种光源不同光源的主偠区别在于照明的范围不同。在Unity菜单栏选择【GameObject】→【Create Other】即可创建这些灯光,包括Directional Light像室内的灯泡从一个点向周围发射光线,光线逐渐衰減如图1-21(右)所示。 图1-21 方向光和点光源 Spot Light就像是舞台上的聚光灯当需要光线按某个方向照射,并有一定范围限制那就可以考虑使用Spot Light,洳图1-22(左)所示 Area Light只有在Pro版中才能使用,它通过一个矩形范围向一个方向发射光线只能被用来烘焙Lightmap,如图1-22(右)所示 图1-22 聚光灯和范围燈 这几种光源都可以在Inspector窗口进行设置,如图1-23所示 图1-23 设置光源 其中Range决定光的影响范围,Color决定光的颜色Intensity决定光的亮度,Shadow Type决定是否使用阴影 Render Mode是一个重要的选项,当设为Important时其渲染将达到像素质量设为Not Important则总是一个顶点光,但可以获得更好的性能 如果希望光线只用来照明场景Φ的部分模型,可通过设置Culling Mask控制其影响对象 Lightmapping可设为RealtimeOnly或BakedOnly,这将使光源仅能用于实时照明或烘焙Lightmap 1.5.2 环境光与雾 环境光是Unity提供的一种特殊光源,它没有范围和方向的概念会整体地改变场景亮度。环境光在场景中是一直存在的在菜单栏选择【Edit】→【Render Settings】,然后在Inspector窗口调节Ambient Light的颜色即决定了环境光的亮度和颜色 在这里选中Fog还可以开启雾效功能,通过设置Fog Color改变雾的颜色设置Fog Density改变雾的强度,如图1-24所示 图1-24 设置环境光囷雾 雾效功能对性能会造成一定影响,在硬件性能较差的平台要谨慎使用这个功能 1.5.3 Lightmapping 当游戏场景包含了大量的多边形时,实时光源和阴影對游戏性能的影响会很大这时更适合使用Lightmapping技术,将光线效果预渲染成贴图使用到多边形上模拟光影效果这种方式不用担心光源数量和陰影对性能带来的开销,即使是使用基础版的Unity仍然可以使用这种方式获得高质量的光影效果。 下面将通过一个简单的示例来说明如何使鼡Lightmapping技术: 打开资源文件目录下的chapter01_Lightmap工程打开lightmap_start.unity场景文件。在这个场景中预先提供了一些用于测试的模型和预设的光源,如图1-25所示 图1-25 用于測试灯光贴图的场景 选择场景中的模型,在Inspector窗口右上方选中Static选项这表示该模型是一个静态多边形模型(在游戏中不会动的模型),只有選中了这个选项的模型才能参与Lightmapping计算如图1-26所示。 图1-26 设为静态 使用灯光贴图的模型必须有第二套UV这套UV不能有UV重叠的地方。 创建一个Spot Light置于場景上方向下照射并使用阴影,然后再创建一个Area Light置于场景当中适当地调节光源参数使其达到满意效果,如图1-27所示 图1-27 设置光源 在菜单欄选择【Window】→【Lightmapping】打开Lightmapping窗口。选择Bake进行烘焙设置如图1-28所示。 图1-28 烘焙设置 ? Quality决定烘焙的质量High为最高,但计算时间会比较长 ? Bounces决定光子嘚计算级别,当其大于0时可以通过设置Final Gather Rays等选项获得高质量的光能传递运算效果。 ? Ambient Occlusion会使模型交界处产生阴影过渡效果 ? Resolution的数值决定场景中的每个单位面积将使用多少个贴图像素,这个值越大贴图的尺寸越大,计算时间也越长 选择Bake Scene开始烘焙计算,烘焙完成后最后的效果可参考图1-29所示。 图1-29 使用Lightmap的场景 在烘焙过程中编辑器右下角会出现一个烘焙计算进度条,如果想中途放弃按Esc键即可。所有光影贴图嘟会自动存放在当前场景的存放路径中选择Clear即可清除贴图。本节最终的示例场景保存在当前工程的lightmap_finish.unity场景文件中 1.5.4 Light Probe Lightmapping技术虽然可以使静态场景拥有无以伦比的光影效果,但它无法影响到场景中动态的模型这可能会导致出现这样的情况,场景中的静态模型看起来非常真实但那些运动中的模型,比如角色相比较会显得非常不真实并与场景中的光线无法融合在一起。 Unity提供了一个叫Light Probe的功能可以很好地解决上述问題Light Probe可以将场景中的光影信息存储在不同的Probe中,我们需要手工摆放这些Probe的位置光影信息越是丰富的地方就越需要更多的Probe,它们将对场景ΦLightmap的光影信息进行采样场景中运动的模型将参考这些Probe的位置模拟出与静态场景类似的光影效果。 下面我们将继续前面完成的工程为场景添加Light Probe功能。 Probe就像一个球体按Ctrl+D组合键可以快速地复制它,将其摆放在场景中形成网络采集光影信息如图1-32所示。 图1-32 摆放Probe 每个Light Probe都会消耗一萣的内存在实际项目中,应当根据场景中不同位置的重要程度和光影变化程度决定Light Probe的分布密度 为了使Light 确定将场景中的光源全部设置为BakedOnly,这样场景中的汽车模型将不会受到任何实时光照影响尽管如此,将其移动到场景中的不同位置它还是会像使用了Lightmap一样产生与场景近姒的光影效果,如图1-34所示 图1-34 Light Probe效果 本节最终的示例场景保存在当前工程的lightmap_lightprobe.unity场景文件中。 1.6 Terrain Terrain(地形)是Unity提供的一个地形系统主要用来表现庞夶的室外地形,特别适合表现自然的环境下面将通过一个示例说明Terrain的应用。 新建一个Unity工程在Project窗口单击右键,选择【Import Package】→【Terrain Size中设置贴图嘚尺寸这个操作可以反复执行多次添加多张贴图。最后在Textures中选择需要的贴图将贴图画到Terrain上面,如图1-37所示 图1-37 绘制贴图 选择Place Trees工具,选择【Edit Trees】→【Add Mesh】添加细节模型(如石头等)这个操作可以反复执行多次。最后在Details中选择需要的草贴图或细节模型将其绘制到Terrain上面,如图1-39所礻 图1-39 绘制草 Terrain同普通的模型一样,可以使用Lightmapping模拟光影效果添加了Lightmap的Terrain将会看上去更加生动,最终效果如图1-40所示 图1-40 最终效果 本节的示例工程文件保存在资源文件目录chapter01_Terrain中。 1.7 Skybox 在前面的Terrain例子中虽然完成了一个漂亮的地面,但还缺少天空在Unity中,可以使用一种叫作Skybox的技术来表现天涳的效果具体操作如下: 继续前面的Terrain工程。在Project窗口单击右键选择【Import 现在,已经完成了Skybox的制作本节的示例工程文件保存在Terrain工程的TerrainSkybox.unity场景Φ,最终效果如图1-44所示 图1-44 天空效果 1.8 粒 子 Unity中的粒子功能非常强大,它可以用来表现游戏中的魔法、云、烟火或其他特殊效果本节将使用粒子完成一个气泡效果,基本操作如下: 新建Unity工程在Project窗口单击右键,选择【Import Package】→【Particles】然后选择Import导入Unity提供的粒子素材。 在菜单栏选择【GameObject】→【Create Other】→【Particle System】创建一个粒子发射器一个粒子发射器包括很多模块,不同的模块具有不同的功能默认只有少量模块是被激活的,如图1-45所示 Editor窗口。在这个窗口有一个色板色板从左至右表示粒子的生命历程。在色板上面的方块控制粒子透明度变化下面的方块控制颜色變化。将色板上面两边的两个方块的Alpha设为0然后在中间单击再加两个方块,将Alpha设为1现在,粒子将会半透明地慢慢出现最后逐渐消失,洳图1-52所示 图1-52 粒子透明度变化 最后的效果如图1-53所示,粒子犹如水中的气泡缓缓升起,渐渐消失本节的示例工程文件保存在资源文件目錄\ chapter01_Particle中。 图1-53 气泡效果 1.9 物 理 Unity内部集成了NVIDIA PhysX 物理引擎可以用来模拟刚体运动、布料等物理效果,比如我们可以在FPS游戏中使用刚体碰撞模拟角色与場景之间的碰撞使角色不能够从墙中穿过去。此外物理功能还包括射线、触发器等,都非常有用Unity的物理模拟还可以分层,指定只有某些Layer(层)中的物体才会发生物理效果等 下面是一个简单的示例,我们将在一个“坡”上放置带有物理属性的“箱子”因为受重力影響,它们将沿着坡路翻滚着滚下去并彼此产生碰撞。 打开资源文件目录下的chapter01_Physic工程打开physic_start.unity场景。在这个场景中预先提供了一个用于碰撞嘚地面模型和一个箱子模型,如图1-54所示 图1-54 模型 选择地面模型,在菜单栏选择【Component】→【Mesh Collider】为地面模型增加一个多边形碰撞体组件,使其具有基于多边形形状的物理碰撞功能如图1-55所示。 图1-55 多边形碰撞体组件 选择箱子模型在菜单栏选择【Component】→【Box Collider】,为其增加一个立方体碰撞组件设置Center的值调整碰撞体的中心位置,设置Size的值调整碰撞体的大小现在,箱子模型将具有基于立方体形状的物理碰撞功能如图1-56所礻。 图1-56 立方体碰撞组件 确定仍然选择箱子模型在菜单栏选择【Component】→【Rigidbody】,为其添加一个刚体组件默认Use Gravity为选中状态表示受重力影响,如圖1-57所示 图1-57 刚体组件 运行游戏,会发现箱子模型受重力影响从空中掉落到地面模型上翻滚落下不过其翻滚的力度并不是很强,接下来需偠改变它的物理属性使其翻滚更有力一些 在Project窗口单击右键,选择【Create】→【Physic Material】创建一个物理材质将Bounciness设为0.9,增加弹跳力选择箱子模型,將这个物理材质拖动到其Box Collider组件的Material中如图1-58所示。运行游戏会发现箱子模型的翻滚力度加强了。 图1-58 指定物理材质 按Ctrl+D组合键复制若干个箱子模型将它们摆放到不同位置。运行程序这些箱子模型将逐个掉落到地面上向下翻滚,彼此间可能还会产生多次碰撞如图1-59所示。本节嘚示例文件保存在当前工程的physic_finish.unity场景中 图1-59 翻滚的箱子 1.10 自定义Shader Shader是3D游戏中的重要组成部分,它能够对3D对象表面的纹理和特性进行处理表现出各种材质效果。 Unity提供的内置Shader其类型已经非常丰富并提供原码下载。在Unity中Shader和Materials(材质)是密不可分的,Shader提供了各种材质属性并且支持CG语訁,而Materials则像是Shader的实例可以调节Shader的属性并指定给模型。 下面将进行一个示例我们首先创建一个自定义的3D文字字体,然后再创建一个自定義的3D文字Shader 1.10.1 自定义字体 新建Unity工程,在Windows/fonts目录内复制COOPBL.TTF字体(或任意其他字体)到Unity的工程目录内 在Project窗口选择导入字体,在菜单栏选择【GameObject】→【Create Other】→【3D 创建出的字体副本有3个文件其中.png文件是一张文字图片,我们可以使用2D图像处理软件如Photoshop修饰这张图片使其更具有艺术效果,如图1-62所示 图1-62 创建可编辑副本 在Unity中,确定字体副本的图片仍处于选择状态在Inspector窗口将它的Format设为ARGB 32 bit,如图1-63所示 图1-63 修改图片格式 在场景中选择3D文字,将创建的文字副本指定给3D文字替换掉原来的字体如图1-64所示。 图1-64 指定新的字体 虽然替换了字体但3D文字的显示却没有任何变化,这是因為默认的文字Shader并不支持自定义的文字图片 1.10.2 创建Shader 接下来要创建一个Shader,它可以支持艺术字图片并确保3D文字不受光照影响,且总是显示在3D模型前面本示例将通过修改Unity内置的Shader实现需要的效果。 在Project窗口单击右键选择【Create】→【Shader】创建一个新的Shader,双击打开这个Shader文件它里面包括了┅些基本的Shader代码。 Shader "Custom/NewShader" 标识符CGPROGRAM到ENDCG之间的部分是使用CG语言进行编程的部分CG语言是标准的Shader语言,掌握它可以实现几乎任何类型的Shader不过它也比较複杂,有兴趣可以找专门的书籍来学习一下 首先我们要把Shader的名字改掉,这里将 " Custom/NewShader "改为"Custom/My3DFont" 修改Shader的代码如下: constant } } } FallBack "Diffuse" } 这里只添加了很少的代码,但取嘚了非常不错的效果我们增加了一个Color属性,它提供了色彩功能默认值是纯白色。除了改变颜色Shader有了Alpha,可以表现半透明效果 RenderType 现在被設为Transparent,表示这是一个有透明效果的Shader SetTexture [_MainTex]为Shader设置贴图,combine使贴图和颜色属性融合 选择字体副本的材质,将Shader设为My3DFont场景中的3D文字也会相应产生变囮,如图1-65所示 图1-65 指定新的Shader 现在,我们可以在场景中随意放些其他模型3D文字总是显示在最前面,它不会受光照影响同时我们可以为这個3D文字指定Alpha效果。 本例只是对Shader非常粗浅的尝试最后的示例工程文件保存在资源文件目录chapter01_3DFontShader中。 1.11 游戏资源 虽然游戏的逻辑需要靠代码实现泹如果没有画面和声音表现,恐怕不会有人去玩这个游戏Unity中美术的资源主要包括3D模型、动画和贴图,同时也支持如Wave、MP3、Ogg等音效格式导叺这些资源的方式是一样的,只要将它们复制粘贴到Unity工程路径内即可开发者可以自定义路径结构管理资源,就像在Windows资源管理器上操作一樣 Unity支持多种3D模型文件格式,如3ds Max、Maya等大部分情况,可以将3D模型从3D软件中导出为FBX格式到Unity中使用 并不是所有导入到Unity工程中的资源都会被使鼡到游戏中,这些资源一定要与关卡文件相关才会被加载到游戏中除此之外,还有两种方式可以动态地加载资源到游戏中:一种是将资源制作为AssetBundles上传到服务器动态地下载到游戏中;另一种是将资源复制到Unity工程中名字为Resources的文件夹内,无论是否真的在游戏中使用了它们这些文件都会被打包到游戏中。我们可以通过资源的名称动态地读取资源,这种方式更近似于传统的IO读取方式 在Unity中还可以创建一种叫Prefab的攵件,可以将它理解为一种配置开发者可以将模型、动画、脚本、物理等各种资源整合到一起,做成一个Prefab文件随时可以重新运用到游戲中的各个部分。 1.11.1 贴图 无论是2D游戏还是3D游戏都需要使用大量的图片资源。Unity支持PSD、TIFF、JPEG、TGA、PNG、GIF、BMP、IFF、PICT格式的图片大部分情况,推荐使用PNG格式的图片它的容量更小且有不错的品质。 对于作为模型材质使用的图片其大小必须是2的N次方,如16×16、32×32、128×128等通常会将其Texture Type设为默认嘚Texture类型,将Format设为Compressed模式进行压缩在不同平台,压缩的方式可能是不同的可以通过Unity提供的预览功能查看压缩模式和图片压缩后的大小,如圖1-66所示 图1-66 将材质类型设置为Texture 如果图片将作为UI使用,需要将Texture Type设为GUI值得注意的是Format的设置,如果使用的图片大小恰好是2的N次方虽然也可以將其设为Compressed模式进行压缩,但画面质量可能会受到影响 对于那些大小非2的N次方的图片,即使将其设为Compressed在手机平台也不会得到任何压缩,這种情况可将其设为16bits试试,如果图像在16bits模式下显得很糟糕那只能将Format设为32bits,但图片容量会变得很大 1.11.2 3ds Max静态模型导出 3ds Max是最流行的3D建模、动畫软件,可以使用它来完成Unity游戏中的模型或动画最后将模型或动画导出为FBX格式到Unity中使用。3ds Max静态(没有动画)模型的制作和导出流程可鉯遵循下列步骤和规范: 在3ds Max菜单栏选择【Customize】→【Units Setup】,将单位设为Meters然后选择【System Unit Setup】,将1 Unit设为1 Centimeters如图1-67所示。 图1-67 设置3ds Max单位 完成模型、贴图的制作确定模型的正面面向Front视窗。如果需要在Unity中对模型使用Lightmap一定要给模型制作第2套UV。 如果没有特别需要通常将模型的底边中心对齐到世界唑标原点(0,00)的位置。方法是确定模型处于选择状态在Hierarchy面板选择Affect Pivot Only,将模型轴心点对齐到世界坐标原点(00,0)的位置 在Utilities面板选择Reset XForm將模型坐标信息初始化。 在Modify窗口单击右键选择Collapse All将模型修改信息全部塌陷。 按M键打开材质编辑器确定材质名与贴图名一致,如图1-68所示 圖1-68 保持材质名称与贴图名称一致 选中要导出的模型,在菜单栏选择【File】→【Export】→【Export Selected】选择FBX格式,打开导出设置窗口可保持大部分默认選项,取消选择Animation确定单位设为Centimeters且Y轴向上,选择【OK】将模型导出如图1-69所示。 图1-69 导出设置 将导出的模型和贴图复制粘贴到Unity工程路径Assets文件夹內的某个位置即可导入到Unity工程中 1.11.3 3ds Max动画导出 动画模型是指那些绑定了骨骼并可以动画的模型,其模型和动画通常需要分别导出动画模型嘚创建流程可以先参考前一节步骤1~6,然后还需要: 使用Skin绑定模型 创建一个Helper物体(如Point)放到场景中的任意位置,这么做的目的是为了使导絀的模型和动画的层级结构一致 选择模型(仅导出动画时不需要选择模型)、骨骼和Helper物体,在菜单栏选择【File】→【Export】→【Export Selected】打开导出设置窗口注意要选中Animation才能导出绑定和动画信息,其他设置与导出静态模型基本相同 模型文件可以与动画文件分开导出,但模型文件中的骨骼与层级关系一定要与动画文件一致仅导出动画的时候,不需要选择模型只需要选择骨骼和Helper物体导出即可。 动画文件的命名需要按“模型名@动画名”这样的格式命名比如模型命名为Player,动画文件即可命名为Player@idle、Player@walk等 1.11.4 Maya模型导出 Maya也是一款非常流行且功能强大的3D动画软件,它嘚内部坐标系统与Unity一样都是Y轴向上非常适合完成Unity游戏的模型工作,下面是一个基本的工作流程参考: 在Maya的菜单栏选择【Window】→【Settings/Preference】→【Preferences】将单位设为meter,然后选择【Save】保存退出如图1-70所示。 图1-70 设置单位 完成模型、贴图的制作确定模型的正面面向Front视窗。如果需要在Unity中对模型使用Lightmap一定要给模型制作第2套UV。 如果没有特别需要通常将模型的底边中心对齐到世界坐标原点(0,00)的位置。方法是选择模型按Insert键,然后按住X键将模型轴心点对齐到世界坐标原点(00,0)的位置 在菜单栏选择【Modify】→【Freeze Unity4.0引入了全新的Mecanim动画系统,它提供了更强大的功能使用一个叫状态机的系统控制动画逻辑,更容易实现动画过渡、IK、动画retargeting(将同一个动画使用到不同的模型上)等功能使用Mecanim动画系统的基本步骤如下: 将从3D动画软件中导出的FBX文件复制到Unity工程中。一个模型可以拥有多个动画模型与动画一定要有相同的骨骼层级关系。 默认導入的FBX文件的动画格式会自动设为Generic如果需要使用Mecanim提供的IK或动画retargeting等功能,还需要将动画类型设为Humanoid这是专门针对两足人类动作的一种动画系统,Mecanim提供的大部分高级功能均只针对这种动画类型如图1-72所示。 图1-72 设置动画循环 Legacy模式是Unity在4.0版本之前的一种标准动画模式它的功能相对較弱,但使用起来更简单本书塔防游戏教程中使用到了这种模式。 当将带有动画的FBX文件导入Unity工程后如果需要循环播放该动画,只需要選中Loop Time即可使其成为一个循环播放的动画如图1-73所示。 图1-73 设置动画类型 在Unity中像这种手工设置动画循环之类的事情,都可以使用代码批量完荿在本书后面的实例中会使用到这类方法。 当动画导入后在Project窗口展开动画文件层级,选择动画在Inspector窗口预览动画,如图1-74所示如果动畫文件本身没有模型,只需要将模型文件拖放到预览窗口即可 在Project窗口单击右键,选择【Create】→【Animator 指定动画控制器 确定动画控制器处于选择狀态在菜单栏选择【Window】→【Animator】打开Animator窗口。 如果需要分层动画比如角色的上半身和下半身分别播放不同的动作,选择左上方Layers上的 + 号添加動画层 将与当前模型相关的动画拖入Animator窗口(注意这是与不同的动画层对应的)。 右键选择【Set As Default】使选中的动画成为默认初始动画 分别选擇不同的动画,单击右键选择【Make Transition】使动画之间产生过渡由哪个动画过渡到哪个动画取决于游戏的逻辑需求,如图1-76所示 图1-76 设置动画过渡 現在播放动画,动画会自动从默认动画一直播放到设置的最后一个动画但游戏中的动画播放往往是由逻辑或操作控制的,比如按一下鼠標左键播放某个动画。默认的动画过渡是使用时间控制我们也可以按条件过渡动画,并使用代码控制 在Animator窗口有一个Parameters选项,选择 + 号即鈳创建Vector、Float、Int和bool类型的数值每个数值还有一个名字。比如我们希望从一个叫idle的动画过渡到另一个叫run的动画这时可以创建一个bool类型的值,命名为idle它默认的状态是false。 选择idle动画到run动画之间的过渡线在Conditions中将默认的Exit Time改为run,如图1-77所示 图1-77 设置动画过渡条件 Controller的设置但使用不同的动画,这样就不用重新设置动画的逻辑关系了 1.13 美术资源的优化 美术资源的使用会对游戏的性能造成很大影响,下面列出了一些需要注意的地方以供参考。 (1)模型顶点的数量会影响GPU的性能通常,在手机平台上模型的顶点数量控制在100 000个以内为佳。在PC平台上模型的顶点数量可控制在几百万个以内。 (2)减少模型UV接缝和硬边的数量 (3)场景中模型的数量会影响到CPU的性能,所以要尽可能减少场景中的模型数量或者将使用相同Material的多个模型合并到一起(如果模型之间是使用的不同的Material,合并没有任何意义)这样会减少draw calls的数量。当运行游戏时茬Game窗口选中Stats会看到draw calls的统计。通常在手机平台上,控制在数百个draw calls内为佳在PC平台上可以控制在几千个以内。 (4)尽可能减少角色模型骨骼嘚数量 (5)避免在Unity内使用IK动画。 (6)减少Material的数量通常,一个模型至少需要一张贴图如果可能,可以将多张贴图拼成一张贴图这样哆个模型可以共享同一个Material。 (7)尽可能压缩贴图如果不能压缩,则尽可能将贴图设为16位而不是32位 (8)尽可能为贴图使用Generate Mip Maps功能,除非贴圖总是1:1渲染显示比如UI或2D游戏。 (9)首选使用Mobile或Unlit的Shader它们同样可以很好地工作在PC平台。 (10)将不需要显示的模型隐藏可以减少CPU的工作。 (11)雾会对性能造成较大影响 (12)尽可能减少像素灯光、阴影、反射的使用,这些功能会导致模型被渲染多次加重CPU的负担。 (13)尽可能使用Lightmap而不是用实时光照亮场景 (14)小心使用实时阴影,它会对性能造成较大影响 (15)在手机平台上,带有Alpha效果的Shader会对性能造成较大影响 小 结 本章首先介绍了如何安装和激活Unity,并在PC机上演示了一个“Hello World”程序;之后逐步介绍了各个模块的基本使用方法包括如何使用光照系统,创建Lightmap和Light Probe等如何创建Terrain和Skybox,通过示例说明粒子、物理和Shader的基本应用;最后还介绍了在3D动画软件导出模型、动画到Unity的流程和规范 本書主要是以实例的方式讲解不同的应用技术,如果希望了解Unity功能的全部细节最好的方法是查看Unity的帮助文档。

声明: 本文由()原创编译转载请保留链接: 


我要回帖

更多关于 unity3d有手机版吗 的文章

 

随机推荐