zoukankan      html  css  js  c++  java
  • Unity3d 发动机原理详细介绍

    Unity3d 发动机原理详细介绍

    www.MyException.Cn   发布于:2013-10-08 16:32:36   浏览:46次
     
     
    Unity3d 引擎原理详细介绍

    体系结构

       为了更好地理解游戏的软件架构和对象模型获得更好的外观仅有一名Unity3D的游戏引擎和编辑器是非常有用的它的主要原则

    Unity3D 引擎

       Unity3D的一个屡获殊荣的工具,用于创建交互式3D应用程序多个platforms.Unity3D游戏引擎编辑器该引擎包含的软件组件游戏的研究与开发最常见的和经常性任务发动机涵盖的主题包括声音,图形,物理和网络功能该引擎支持C#Boo和JavaScript脚本编程

    另一个部分是Unity编辑,作为脚本和其他组件包含游戏场景设置和游戏预览窗口(见图4)分层对象检查项目面板集成开发环境它还配备了几个多语言脚本编辑器和一个独特的预制装配系统,将在后面解释

      

                                                              图4:Unity3D编辑

    有几个Unity许可证。Unity基本功能有限的免费PCMACWeb development.Other平台完整的功能集[15]需要购买额外的许可证

    虽然有很多免费软件和专有替代游戏引擎虚幻引擎C4引擎选择了Unity的原因如下

    *可以部署在Windows,Mac OSXWeb浏览器,Wii游戏机iPhone,iPad的Android,微软Xbox 360和PlayStation 3它甚至在未来计划增加闪存Linux部署部署possbilities提供很多的可能性使用游戏引擎游戏引擎货币化进一步研究。

     *Unity社区非常支持引擎,以及编辑器是有据可查的

    *发动机是比较容易学习和工作通过提供所有的工具快速原型和迭代以及快速脚本编译支持快速软件开发的想法

    *可能部署的iPhone,iPad和iPod touch的iOS基本许可证其他厂商相比相对低廉的价格创建机甲坦克使用Unity3.0C#脚本和MonoDevelop的IDE进行开发你可以找到一个Unity教程附录

    Unity3D的简史

      下列日期说明2001和2011年[16]之间的Unity引擎的演变
     ◾2001年Unity技术在2001年开始开发自己的游戏引擎当时主要诱因创建游戏这些游戏的基础创造了良好的工具[1]。
     ◾2003在2003年公司,由此产生的引擎将是一个伟大产品本身的
     ◾2005在2005年Unity1推出苹果的WWDC的舞台上
     ◾2007Unity2.0在2007年推出增加地形引擎实时动态阴影和视频播放等等
     ◾2008在2008年推出UnityiPhone卡通网络推出FusionFall,游戏已经播放超过800万人次

     ◾20102010年Unity3.0发布几十个功能,如资产管理和光照贴图

     ◾2011团结超过500开发者和60网络播放器安装。

    游戏架构

      机甲坦克架构组成模块和Unity场景架构

     主要模块

        本节介绍了最重要的模块子系统级别他们关系。游戏的建筑风格是一个对象数据capsules.The下面的UML组件图说明子系统及其关系网络

    游戏逻辑

       此模块管理当前玩家AI配置倒计时timerand当前的游戏状态暂停等待网络回复

    AI(人工智能(Artificial Intelligence) ,英文缩写为AI

       AI模块包含背后的逻辑单元球员AI.The单位AI寻路或障碍物避免使用不同转向行为控制单元状态。AI管理组的行为和活动寻路更高的层次上管理播放机的所有播放器模块

    人工智能机器学习保存和加载它的数据使用持久性数据模块的接口

    Persistant data持久性数据

       此模块是负责数据之间不同的游戏sessions.Among其他应可用于保存和加载存储查找表和寻路模块管理学习AIaccumulateddata机器

    Game actors游戏参与者

      游戏参与者在游戏中地形,单位或建筑物他们的3D模型获得通过Unity3D的渲染管线的可视化每场比赛演员拥有AI模块控制它的行为

    Steering behaviours指导行为

      指行为计算力量,影响如何以及如何快速自主游戏代理能动,应该可以用于避障,人流简单寻找任务

    Pathfinding寻路

      模块负责创建一个pathgrid障碍物信息收集提供各种寻路请求aninterface为了获得更好的性能一些信息保存到从磁盘中加载

    Input输入

      此模块跟踪用户的输入对其进行处理生成反馈。

    Network网络

      网络模块负责所有游戏演员状态管理保持比赛状态在两台机器上都保持一致以避免抖动网络单元运动网络game.Another责任

    GUI

     图形用户界面(GUI)显示所有按钮,菜单在小地图倒数计时器它也负责这些元素的功能交互依赖用于此目的游戏逻辑模块

    3D渲染

      该模块主要管理Unity3D的场景的主摄像头确定需要渲染的对象并把它们发送通过渲染管线 Unity3D的封装渲染细节而且还提供了通过像素和顶点着色器访问

    Unity场景设置

      在游戏中一个表示Unity3D的场景下面是一个典型的场景设置在Unity层次(一)(二)现场窗口看起来像

                                          

                                                                       Unity层次的地图

                 

                                                                               场景视图的地图

    现在所有的游戏对象顶部面板底部进行说明。

    CWalls

      这个对象包含自定义绘制节点和墙壁边缘一种使用自定义绘制墙壁calculatethem取决于地图的几何

    Directional light(定向光)

      此灯仅用于计算地形光照贴图关闭之后由于性能的原因

    Game Music(游戏音乐)

      持有游戏的主要音乐和播放现场启动

    GameController(游戏控制器)

      GameController游戏物体持有管理所有的游戏对象管理游戏的逻辑包括以下对象

    CursorController(光标控制器):

       管理光标的外观和背后的逻辑

    GameInstantiator(游戏实例化):

       这个重要游戏对象负责实例其他对象需要创建非特异性顺序

                      

                                     GameInstantiator in the Inspector

                      

                                       GameController in the Hierarchy

      GameInstantiator持有地图PathCreator路径创建和管理障碍管理球员配置设置是用来处理用户输入InputControl游戏物体游戏场游戏物体和参考玩家游戏物体上的建筑物referenes定义了播放区域的地图

     它还包含玩家的重生点和自定义路径和墙壁引用

    GUI

      拥有地图的所有GUI对象

    Machine Learning Controller

       游戏物体控制的所有功能机器学习需要

    spawn1, spawn2

      实际玩家的重生点重生点的标志是绿色立方体“场景视图  

    HPaths

       定义路径节点在地图边缘定义节点场景编辑标记并概述红线     

    Main Camera(主摄像机)

       现场主摄像头和音频监听所有的3D声音相机的角度观察     

    PlayArea(游戏场)

      定义实际可玩的地图区域

    Base Prefabs(基地预制)

      散落在地图上的建筑物

    Terrain(地形)

       Unity地形对象

    TestRunner

      一个物体,用于运行单元测试Unity3D的单位testingframework SharpUnit

    MVC Pattern(MVC模式)

      Unity引擎的设计鼓励MVC模型 - 视图 - 控制器面向engineering.In我的情况下结构看起来像这样

      

                                                                   图5:MVC模式体系结构表示

    模型包含了所有的游戏对象组件和数据文件游戏物体渲染器和摄像机对象访问

    视图呈现模型和主要管理Unity3D的引擎渲染它需要accessthe持有模型3D模型,纹理材质和效果它还具有什么输入选项影响

    控制器接收用户输入并调用模型对象方法反应这是在我的游戏中所表示输入子系统用户能影响输入视图

    Multiplatform Development(多平台发展)

      Unity允许部署项目在不同的平台上轻微变化。演示和功能在很大程度上是保持取决于平台的capabilities.However在某些领域在不同的设备上输入机制存在重大分歧

      抽象工厂设计模式应用于设计这些组件

    The Abstract Factory Pattern抽象工厂模式

                                  

                                                                                         图6:抽象工厂模式

    抽象工厂模式(见图6保护客户不同平台上实现相同的概念不同APC与平台是一家集AbstractProduct这些类表示一个概念,是支持所有抽象工厂platforms.An声明创建单一产品经营ConcreteFactory代表一个特定平台

    客户端只使用抽象工厂抽象产品方法,因此一个平台的具体实施保护

    Input and Persistant Data(输入和持久性数据)

       主要有两个方面的游戏不同的实施要求是输入机制和usageof持久性文件数据 Unity3D中不支持plattform数据库这就是为什么机甲坦克使用持久性数据在磁盘上二进制文件所有平台得到了他们对于自己的能力自己实施支持的文件格式

    为了保持可读性和灵活性以下适应跨平台的输入处理抽象工厂模式

                   

                                                                          图7:输入子系统结构摘自

    这仅仅是一个所涉及的所有平台和命令,选择用于演示的摘录

    InputManager附加到游戏物体在场景中InputControl调用CommandImplementorExecute方法的每一帧里面的更新功能执行方法CommandImplementor遍历所有添加命令,检查他们执行情况表示满意,并调用Execute方法,如果是这样

     

    输入子系统组成部分的抽象工厂模式

                  

    iOS+Unity

         机甲坦克被创造的过程迭代开发,这是什么原因为什么游戏已经播放任何调整之前为iPad

         本章介绍分析面临的挑战和解决方案移植机甲和坦克的iPad

    Maximum Polygon Count(最高多边形计数)

         其中一个最明显的限制,适用于iPad™游戏的多边形数量的图形芯片能够呈现每个frame.It横空出世超过30多边形,每帧开始下降,低于25 FPS的帧率对iPad在3D建模软件通过手动消除边缘和应用预定义的算法减少多边形从一开始某些型号甚至rebuiilding减少多边形计数,目前在所有平台上多边形数量是:

                   

    平均多边形数量大约是每单位300如果所有的24个敌人和播放器单元的相机拍摄的在一帧中产生多边形的数量将是7200,平均约8500在最坏情况下24 runners.Adding最大4000地形多边形平截头体的其余部分的地形得到扑杀,最重的将给予12500 GPU多边形渲染

    Draw Call Reduction and Lights(绘制减少呼叫灯)


    即使在移动设备上不俗的表现,更重要的每帧绘制调用的数量一场平局发出呼叫GPU每次绘制一个模型如果模型有n子网格就会造成至少Ñ战平calls.Every GUI质地,选择飞机和健康添加一个调用到现场

    额外抽奖调用另一个来源像素光照,导致额外绘图调用一个pass.That就是为什么合并成一个模型中所有子网型号不使用动态照明所有模型和地形纹理的灯光英寸光影烘烤计算每个纹理获取静态光源照亮奠定了光照贴图纹理的亮度看上去好像他们的灯光的影响虽然没有计算模型图8显示了几个模型,而无需光照贴图灯光效果

              

                                       图8:熄灭纹理材质着色器没有灯光烘烤模式截图

             

                                                                    9:游戏扩大统计窗口右上角视图

    这是可以结合Unity若干个对象共享相同的材料制成在运行时在一个单一的绘制调用的绘制在一起这种方法被称为动态配料[18]。图9显示了66战平调用以下来源所造成的一个场景

    (GUI)图形用户界面


    8绘制调用之缩小贴图按钮,,倒计时倒计时文本+24个+8号楼地图+1相机地图现货总结41 GUI造成绘制调用

    Terrain(地形)


         4通话其中每个质地

    Visible Models(可见模型)

       14平局呼吁每个模型会导致比3战平调用自身的一个用于单元一个healthbar网格和一个用于选择平面网格数字都可以解释Unity的动态配料

    Terrains(地形)


         Unity3D中没有支持地形为iOS直到Unity3.4发布于2011年7月[19]。为了找到最佳的解决方案机甲坦克,地形实施两种可供选择的方式已经过测试模拟地形在3D程序一个3D建模程序地形分割成不同的部分见图10)分区的效果大部分分部视锥Unity扑杀meansthat只有至少部分可见得到呈现

                             

                                                                                图10:仿照地形突出部分

    这种技术被丢弃创造新的地形,因为这个过程会非常complicatedcompared Unity地形系统纹理大小非常大的质量受到影响 *地形地形移动系统移动系统一个解决方案,通过Unity资产商店T4M地形可以用于移动设备可以转换成Unity的地形原来,这个解决方案的性能是不够游戏

    地形最终解决方案使用Unity地形引擎具有非常低的质量设置是唯一可能Unity3.4发布于2011年7月加入Unity地形对移动通信系统支持

    GUI-Optimization(GUI优化)


    Unity引擎提供两种方式来实现GUI一种方式是使用Unity的GUI系统UnityGUI需要它的功能一个特殊的功能calledinside名为OnGUI()执行每帧两次onceevery事件这个系统只用于主菜单,并暂停菜单allvalues​​需要计算OnGUI功能

    GUI纹理用于所有其他GUI元素GUI按钮和小地图上以维持性能 GUI纹理平面图像中显示的2D和每帧渲染一次

    Script-Optimizations(脚本优化)


    为了授予脚本的性能便宜的方法进行跟踪profiler.It横空出世被称为最昂贵方法可以通过寻路转向行为子系统寻路已被优化如下文所述在AI部分有人还提出确保昂贵的功能,如转向行为和其他AI程序不会调用每一个帧

  • 相关阅读:
    elasticsearch-排序(六)
    elasticsearch-分词器(五)
    elasticsearch-搜索-基本搜索(四)
    elasticsearch-文档(三)
    elasticsearch-集群(二)
    FFmpeg架构之I/O模块分析
    DirectShow 在 VS2010 中开发环境的设置
    预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)
    2012年软件开发者薪资调查报告
    深入了解 VP8
  • 原文地址:https://www.cnblogs.com/lifesteven/p/3654884.html
Copyright © 2011-2022 走看看