首页 > 编程语言 >Unity3D高级编程主程手记 学习笔记一:软件架构

Unity3D高级编程主程手记 学习笔记一:软件架构

时间:2023-05-11 23:12:19浏览次数:55  
标签:Unity3D AB 架构 程序员 开发 软件架构 主程 服务器 进行

架构的重要性不言而喻,对于一个项目来说如果在开发初期就能确定好所使用的引擎,API以及各种系统之间的层次关系,那对于后续的开发一定会是事半功倍的,我想作者将软件架构放在第一章一定是想让Untiy程序员尤其是主程,一定要认真的对待架构这件事。

优秀的架构师不仅需要对每个子系统的决策方向进行深思熟虑,还要结合其他系统以及整体系统需求的方向进行设计。

如何进行架构设计?

系统架构图是由多个子系统架构图组成的,子系统的架构图种类可以有很多例如XML对象图(描述数据类之间的关系)、部署图(需要多少种服务器、它们分别起什么作用?)、时序图(系统程序的调用次序以及流程描述)。

架构的性能评估

作者对架构使用了以下几个指标作为架构性能好坏的参考:

  1.承载力:从软件上来说,承载力可以表示一个架构至多能承载多少个逻辑系统并且不发生崩溃?。从项目开发来说,承载力也可以是项目设计至多能够承载多少个程序员共同开发且代码耦合性仍然能保持设计之初的要求?

  2.可拓展性:可以适应不同的需求,对子功能进行拓展,同时不会影响其他子功能的正常使用

  3.易用性:(架构师最容易忽视的一点),开发出的架子要容易使用,否则程序员开发效率低下,开发出来的功能也容易bug频出。设计架构时,需要站在程序员的角度来思考,使得子模块的编写只需要花费一点点心思在架构融合上,可以将注意力专注于用来实现模块的编码上。

  4.可伸缩性: 当需求激增与锐减时,架构能否适应需求的变化而变化。例如:对于服务器来说,用户数目可能成百上千或者只有几个人,服务器架构应当是要随着服务器人数变化而变化的,从而使得服务器能够正常运行,或是减少服务器的开销。

 利用分层思维构建Unity项目

架构设计通常需要灵活运用抽象、分层、分治和演化等思想。我们在尝试构建Unity项目式通常可以经过先分层后分治的方式来进行构建。

通常,我们会把项目分为:网络层,数据管理层,资源管理层,核心逻辑结构层,UI框架层。

再对每一次进行细分可以得到如下图所示:

 

 当然,及时分成了这样问题对我们来说依然很大,怎么办?继续使用分治法对每一个功能进行细分。以下为例子:

数据表:使用excel文件还是JSON文件?读取以及导出的接口应该如何定义?

UI层:使用什么UI插件,是UGUI还是NGUI或是其他?针对界面基类,界面管理,输入事件封装进行选择

外部资源管理:确定是否使用AB(AssetBundle)包?AB包中资源如何分类?是否依赖AB包资源间的关系?是否加载与释放AB包?是否进行加密?

角色行为控制:人物移动的处理方案是怎么用的?摄像机使用与切换、动画编辑器、技能编辑器、以及技能编辑器与行为流的建立?

在设计好以上结构之后,我们需要在开发的过程中进行回顾,对架构进行再一次的调整优化(演化过程)。最后,应该要注意架构设计的文档要及时进行更新与完善,以便其他程序员可以快速的理解架构早点进入项目开发中。

标签:Unity3D,AB,架构,程序员,开发,软件架构,主程,服务器,进行
From: https://www.cnblogs.com/CatSevenMillion/p/17369615.html

相关文章

  • Linux cpuidle framework(1)_概述和软件架构
    1.前言在计算机系统中,CPU的功能是执行程序,总结起来就是我们在教科书上学到的:取指、译码、执行。那么问题来了,如果没有程序要执行,CPU要怎么办?也许您会说,停掉就是了啊。确实,是要停掉,但何时停、怎么停,却要仔细斟酌,因为实际的软硬件环境是非常复杂的。我们回到Linuxkernel上,Linux......
  • 3-10 编写函数把华氏温度转换为摄氏温度,公式为:C=5/9(F-32),在主程序中提示用户输入一个华
    设计思路:c++函数的定义、引用以及c++语言运算的规则 代码:#include<iostream>usingnamespacestd;floatf(floata){floatx=5.0/9*(a-32);returnx;}intmain(){floatf(floata);floata;cin>>a;floatn;n=f(a);cout<<n;}总结:函数的定义与......
  • 【开源游戏】Legends-Of-Heroes 基于ET 7.2的双端C#(.net7 + Unity3d)多人在线英雄联
    Legends-Of-Heroes一个LOL风格的球球大作战游戏,基于ET7.2,使用状态同步 Main基于C#双端框架[ET7.2],同步到ET主干详情请看日志。(https://github.com/egametang/ET)注意:已经升级.Net7,请安装.Net7SDK.此游戏为ET7.2的一个实践项目demo,玩法主要是球球大作战类型的吃食物吃敌人/......
  • 软件架构风格-黑板架构风格(Blackboard architecture)
    参考链接:https://cs.uwaterloo.ca/~m2nagapp/courses/CS446/1181/Arch_Design_Activity/Blackboard.pdfhttp://users.encs.concordia.ca/~gregb/home/PDF/soen6461_blackboard_arch.pdf......
  • Unity3D之OnTriggerEnter和OnCollisionEnter
    OnCollisionEnter方法要求碰撞的发起方必须拥有刚体,而被碰撞方有没有刚体并不重要;OnTriggerEnter方法则对此没有要求,只需要碰撞双方有一个具有刚体即可触发,当有物体勾选isTrigger属性时,则会执行OnTriggerEnter方法。......
  • 『不走弯路』Unity学习路线(主程方向)
    ⚠️⚠️⚠️下面教程推荐链接丢失,点击上述原文查看黑铁LV0本级描述没有接触过Unity无编程基础......
  • Unity3D:目标约束
    推荐:将NSDT场景编辑器加入你的3D工具链3D工具集:NSDT简石数字孪生目标约束(AimConstraints)AimConstraint可旋转游戏对象以朝向其源游戏对象。还可针对另一个轴保持一致方向。例如,可将AimConstraint添加到摄像机。要在约束瞄准摄像机时保持摄像机直立,请指定摄像机的向上轴和......
  • 软件架构生态化-多角色交付的探索实践
    作者:京东零售李春丽作为一个技术架构师,不仅仅要紧跟行业技术趋势,还要结合研发团队现状及痛点,探索新的交付方案。在日常中,你是否遇到如下问题“业务需求排期长研发是瓶颈;非研发角色感受不到研发技改提效的变化;引入ISV团队又担心质量和安全,培训周期长“等等,基于此我们探索了一种......
  • Windows 下主程序与动态库(*.dll)释放对方分配的内存操作要点
    同样的代码程序:主程序中释放了一块在动态库(*.dll)或共享库(*.so)中分配的内存,Windows将会出现程序崩溃,而Linux则正常运行。 在linux下,每个进程只有一个heap ,在任何一个共享库模块*.so中通过new或者malloc来分配内存的时候都是从这个唯一的heap中分配的,那......
  • 无界微前端(wujie):element-ui 弹框内使用select组件,弹出框位置异常解决方案 (主程序加载
    https://wujie-micro.github.io/doc/guide/ element-ui弹框内使用select组件,弹出框位置异常解决方案第一步:在子应用中: 以上3步就好啦!!!是不是很简单这个框架坑很多,希望对大家有帮助!!! ......