当前位置:首页 » 《关于电脑》 » 正文

Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【2.4】

16 人参与  2024年05月05日 15:40  分类 : 《关于电脑》  评论

点击全文阅读


        (4)打开菜单栏中的Windows菜单,选择Lighting→Settings命令,打开光照烘焙设置,把Directional Light赋值成为SunSource(太阳光源),单击Gernerate Lighting进行烘焙。如图5-32
所示,烘焙完成以后,可以在Global Maps里面看到渲染出来的光照贴图,并且可以在Scene场景中看到烘焙出来的光照阴影和高光。这个时候,即使移除光照光源,光照效果也依然存在,如图5-33所示。

5.10 编辑器遮挡剔除——提高战场的运行效率

        5.9节学习了如何使用Unity的光照渲染烘焙光照贴图(Lightmap),这是一种Unity常用的渲染优化方式。它会渲染场景中的静态物体形成贴图,免除物体的实时渲染。但是有些时候,我们还是希望能使用物体的实时渲染,让物体的光影效果更具动感。本节将介绍一种Unity遮挡剔除的优化编辑方法,具体步骤如下所述。
        (1)在Hierachy视图中右击,选择快捷菜单中的3DObject→Sphere命令,创建一个圆形的小球放置在人物的旁边。在右边的Inspector视图中,选择右上角的Static选项,在其下拉菜单中选择Occluder Static命令,设置物体为Static状态,如图5-34所示。

(2)选择Windows→Occlusion Culling→Bake命令,然后单击Bake按钮,对场景进行一次烘培,如图5-35所示。

        (3)选择Visualizition,然后移动摄像机,此时可以看到,当人物和球都不在摄像机的渲染范围内时,人物资源的渲染依然存在,但是这个球已经不存在了,这就是我们在渲染的时候可以做的一种优化,即遮挡剔除效果,如图5-36所示。

5.11 编辑器资源管理——让工程更容易管理

        当Unity中的资源越来越多的时候,如何去管理这些资源,并创建对应的文件夹呢?在Unity中有一些特殊的文件夹,它们的命名有一些特殊的作用,本节来学习这些特殊文件夹及文件夹的整理方案。
        Unity的脚本编译有4个阶段,这个编译的阶段是根据Unity的文件夹来区分的。在一些特殊的文件夹下面具有不同的编译阶段和不同的作用。如果需要开发编辑器的代码,则需要关心Unity的编译顺序。引用的类在使用的时候必须在它编译之后,如果开发的代码在使用的时候还未完成编译,这个类的调用实际上是不成立的。

Unity中的4个编译阶段如下:
        ·第一阶段是放在Standard Assets、Pro Standard Assets和Plugins这3个文件夹中的运行时脚本程序(Standard Assets文件夹必须是Assets的一级子文件夹)。
        ·第二阶段是放在Standard Assets、Pro Standard和Plugins文件夹中用Editor命名的一级子文件夹中的脚本。
        ·第三阶段是放在顶目录中Editor文件夹中的脚本。
        ·第四阶段是其他Editor文件夹中的脚本另外还有一些其他的特殊文件夹类型,具体如下所述。
·Plugins文件夹:用来存放扩展Unity的插件,大部分是打包好使用的Dll动态链编库。也可以放置第三方的插件代码,这部分会优先编译,然后才能访问一些系统库和第三方库。
·Resources文件夹:用来放置Unity的资源,对于这里面的资源,Unity提供了Resources.Load函数,可以加载项目中所有Resources命名文件夹中的资源文件,意思就是使用这个函数能访问任意一个Resources目录。
·StreamingAsset文件夹:放置在这里的文件和资源,不会经过Unity处理而被标记为Unity的资源文件,在打包到移动环境中时,会压缩到jar文件中。Unity中有代码和类独立支持读取这个文件,适合存放一些数据资源文件。了解这些文件夹以后,我们来了解一下Unity的文件资源类型,以及在Unity中如何搜索对应的文件资源。
·文本格式:文件后缀为txt和xml。
·二进制格式:文件后缀为bytes。

·预制件格式:文件后缀为prefab。打包后使用的类型为GameObject,加载后还需要调用GameObject.Instantiate函数实例化才能使用。
·FBX文件格式:文件后缀为fbx。打包后使用的类型在脚本组件上为Animator(Mecanim动画系统);或者是添加了Animation(Legacy动画系统)的GameObject,资源加载完毕以后用GameObject.Instantiate函数实例化才能添加到场景中。
·图片格式:文件后缀为bmp、jpg和png。
·音乐格式:文件后缀为:aiff、wav、mp3和ogg。
·ScriptableObject格式:文件后缀为asset。了解了在Unity中支持和常用的文件格式以后,下面介绍如何在Project视图中搜索不同的文件类型。在Project视图右上角的搜索框中输入文件的命名部分,可以搜索出对应的文件。选择Project右上角的文件类型选项,可以过滤文件,保证在Project视图中只显示选中的文件类型,如图5-37所示。

下面推荐一些资源文件夹的命名管理方式。
·Scenes:一般只存放场景。
·Prefabs:预设物文件夹。
·Audio:存放音频文件。
·Material:存放材质文件。
·Image/UI/Sprite/Textrue:属于贴图类资源,其中Sprite用于开发2D游戏中的精灵。
·Scripts:放脚本文件。
根据这些规则,大家可以把文件资源按场景组合进行归类和组合命名,达到所有资源可以统一搜索、统一查询的管理方式。

5.12 编辑器控制台和调试——输出调试信息

        平时在使用Unity的程序或者脚本的时候,如何去监控一些问题,实时地了解Unity编辑器和应用程序运行的情况呢?这一节我们将介绍Unity控制台的输出。
        打开Window菜单,选择Console命令可以打开Console控制台视图,如图5-38所示。在Console视图中,左上角是对应的Console的编辑器,功能如下所述。
·清除(Clear):清理控制台中的所有信息。
·折叠(Collapse):判定相同的信息只在控制台显示一次。
·播放清除(Clear on play):启动Play游戏模式时清理控制台的所有信息。
·错误暂停(Error Pause):当出现错误的时候,暂停游戏的运行。

在控制台的Log信息输出是基于脚本程序中的Log输出代码:
·Debug.Log("log");输出Log信息的时候标记成普通log。
·Debug.LogError("Error");输出Log信息的时候标记成红色的错误信息。
·Debug.LogWarning("Warning");输出Log信息的时候标记成黄色的警告信息。

5.13 编辑器资源商店和常用插件

        Unity是一个神奇的东西,它拥有各种各样的组件。作为一个互联网时代的图形引擎,它以组件化的架构方式,为开发者提供Unity开发组件的生态环境。Unity提供了一个资源商店,可以让用户寻找自己所需要的组件。如何下载和使用别人发布的资源呢?下面本节就通过一段示例来展示使用方法,具体步骤如下所述。
        (1)单击Scene视图右边的Asset Store,会打开Unity的资源商店,如图5-39所示。

                                                图5-39 打开Asset Store资源商店

(2)打开资源选择栏,选择“3D模型”→“车辆”→“陆地”选项,选择FREE ONLY类型。这个时候会显示车辆的运动模型,并且这些资源都是免费的,如图5-40所示。

(3)选择Racers Cars Pack车辆模型,单击下载按钮,Unity就会下载和加载资源到本地的Asset文件夹中,如图5-41所示。

        (4)下载完资源文件以后,在Assets文件夹下打开racersCarsPack文件夹,双击showCase文件夹下面的sprotsCarShowCase场景文件,然后运行这个场景Demo,此时可以在Game视图中看到车辆的运行效果,单击Next Car Model按钮还可以切换车辆模型资源,如图5-42所示。

5.14 编辑器材质编辑——让车辆变化一下样式

        5.13节导入了一些车辆模型,它们具有五颜六色的颜色和各种材质。这一节将介绍如何使用编辑器修改车辆的材质,具体步骤如下所述。
        (1)在Hierarchy视图中,选中指定的车辆,这时候可以在Inspector视图中看到这个对象的属性。单击右上角prefab中的select按钮,就可以在Project视图中定位到所引用的预制体对象,如图5-43所示。

        (2)在Hierarchy视图中展开车辆预制体对象,然后选择车辆车身相关的对象内容,这时候我们可以在Inspector视图中看到对象所使用的材质属性,如图5-44所示。

(3)车辆原生所使用的渲染器的属性,主要是颜色的渲染和赋值,没有办法展现车身的金属感。为了让车辆的材质具有金属感,我们改变对应的Shader渲染器为Unity原生Standard的Shader,如图5-45所示。

(4)修改了车身的着色器,车看起来变黑了,我们还需要修改对应的材质渲染属性。修改材质渲染的Mettallic属性来表现车辆的金属属性,并修改Smoothness的光滑属性,然后使用光照对车辆进行照射,以产生光泽感,这样车辆看起来就具有金属的质感了,如图5-46所示。

(5)修改完材质以后,如何生效并且保存资源里面的Prefab文件呢?我们只需要选择属性面板Prefab选项中的Apply选项,如图5-47所示。

5.15 编辑器物理系统介绍——让人和车辆发生碰撞

        在5.14节导入了车辆,并且为车辆制作了金属材质。这一节来介绍使用Unity编辑器编辑车辆的物理碰撞,并且让车辆和人物产生碰撞互动,具体步骤如下所述。
        (1)打开最初人物所在的场景,通过5.14节编辑的Prefab文件,导入修改后的车辆模型,放到人物旁边,如图5-48所示。

        (2)运行场景程序,在Game视图中,可以使用键盘W、A、S、D的这4个按键控制人物的行走方向。这时可以发现,人物是能穿透车辆的,如图4-49所示,人物有一半身体进入了车里面。
        (3)如何才能避免这种问题,并且让车辆和人物之间发生碰撞呢?在Hierarchy视图中选中人物对象,可以看到人物对象上面拥有一个胶囊体,它是一个碰撞组件。我们只需要给车辆加上一个包裹车辆的碰撞体即可。

        在Hieraychy视图中选中车辆模型对象,在Inspector视图中选中菜单功能组件Add Component→Physics→Box Collider,这样就给车辆加载了一个矩形的碰撞框。接着调整Box Collider的原点属性Center和大小属性Size,让碰撞体包裹住整个车辆,如图5-50所示。

        (4)加载完碰撞体以后,再次运行场景程序。这时候我们控制人物行走并与车辆发生碰撞,可以看到人物和车辆之间不会发生交叉了,这就是碰撞体的作用。在后面的模型和场景制作里面,本书会大量地应用各种各样的碰撞体构造世界,如图5-51所示。

5.16 本章小结与分析

        本章学习了Unity编辑器常用的各项功能。Unity编辑器是一个强大的工具链,它涵盖了图形开发和游戏开发中所需要的编辑功能和辅助功能,极大地提高了美术和程序开发人员的工作效率。下面总结一些关键知识,并且引申Unity高级能力,帮助读者深入学习编辑器的功能。
        (1)对于Unity界面的布局和自定义布局,读者是否学会了构建自定义布局?除此之外,Unity还可以开发新的编辑工具。本章提到过一个Editor文件夹,这个文件夹下面的代码就是编辑器代码。读者可以试着自己去开发一个资源打包编辑器。
        (2)编辑器的常用功能介绍。本章所讲都是Unity编辑器中的常用功能,读者一定要熟悉这些功能,并且至少使用一次。如何在菜单栏中添加自己开发的功能项?在脚本代码里,可以加上C#的属性来标注,这样功能函数就会在菜单栏上显示出来,有兴趣的读者可以尝试操作一下。
        (3)模型和骨骼的制作。本章使用的导入模型是FBX,它是一个压缩的模型文件。那么如何去生产原生模型和动作文件呢?读者可以去研究3dmax,这是一个模型和动作制作的美术生产工具。读者思考一下,如何结合3dmax和Unity编辑器生产美术资源。
        (4)本章学习了Unity光照和材质的编辑。结合第4章的图形学知识,读者可以试着去编写一些图形片段和算法程序,优化引擎编辑器的渲染效率和表现效果。
        (5)本章学习了Unity组件的导入和商店的使用。读者可以尝试去Unity商店下载一些资源。
在Unity的开发中有一个很重要的方向,就是VR开发。VR在Unity中需要一种改变相机渲染方式的组件。读者可以下载一个VR的播放器组件,通过使用这个组件,研究一下如何使用组件开发VR双目全景播放器。
        (6)本章介绍了一套UI组件——NGUI,这是本书实战系统开发使用的UI组件。读者如果有兴趣,可以去下载下来进行学习。Unity编辑器是一个互联网思维的编辑工具,它汇聚了原生公司和广大开发者的研发成果,读者可以使用前人提供的资源,当熟练掌握的时候,也别忘了为后来者提供自己所开发的工具。


点击全文阅读


本文链接:http://zhangshiyu.com/post/103882.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1