Unity项目的框架设计

 前言



1.前三个框架只能说是一种简单的框架,没有系统的规范比较简单易懂,个人设计的随意性可以。耦合性会有点高,我们总说代码设计的好坏就是看耦合性,什么是耦合性呢?耦合性就是类与类之间的关系,被调用的类如果发生改变会严重影响使用调用它的类的改变,那就耦合性就是极高的。所以很多框架设计主要的逻辑方向就是解耦,解耦通过创建中间层,调用方与被调方之间的影响降到最低。
2.MVCS(StrangeIOC)和MVVM(uFram)这样的框架其实就是每一层都有中介层。层的话分主要是因为MVC这个框架,MVC框架主要是将数据层、业务逻辑层、视图层三者进行分离,为什么分离的原因就是因为软件的不变真理“改变”(软件是一直在改变修改的);可能哪一天我想改个UI,但是如果我没有进行层次划分的话,那么可能存在我改个UI但是影响到我的数据,前人遇到很多问题才会想到框架。

1.EmptyGO

1.空物体:首先什么是空物体,其实就是在unity中创建一个空物体,将脚本放到空物体上,调用此脚本的方法就需要调用GameObject.Find()方法。
2.缺点:消耗资源,如果在项目中的话会存在挂载多个脚本不易于管理。

2.Simple GameManager

1.简单管理类:什么是简单管理类呢,创建一个空物体作为单利,在Unity中可能会写伪单利;
2.管理类中你会写很多项目中需要调用的方法,导致此类过于臃肿,与设计模式中类的单一原则造成冲突。
3.优点:适用于小型项目,可能只是为了实现几个小功能而已。


//伪单利,不能成为真正的单利,什么是真正的单利,在整个项目中只能有一个;
//但是伪单利会通过多次加载此场景而生成new多个。
//(在untiy中所有继承MonoBehavior的脚本是不需要通过new生成,因为unity底层已经将挂载在场景的MonoBehavior的子类new出来了)
public class GameManager
{
	public static GameManager Instance;
    
    void Awake()
    {
    	Instance=this;    
    }


}

 3.Manager of Managers

1.管理管理类们:什么叫做管理管理类们,它是将一个管理多个简单管理类的组合,根据项目的需求,我们可能存在很多管理类,比如:声音管理类,UI管理类,对象池管理类,关卡管理类等。每个简单管理类中都只是管理与自己相关的类,保证了单一原则。
2.适合中型以上的项目特别适用的方法。做到代码复用 。
3.如下是一些举例:
    1)ventManager:通常希望在一个集中地方管理所有的UI和到各个地方模块之间的消息,以及各个模块之间的消息。 
    2)AudioManager:在项目中访问音频文件。 
    3)GUIManager:所有UI发生的Click事件管理。 
    4)PoolManager:很重要。C#中创建和销毁一个对象很消耗。 
    5)LevelManager:管理关卡。 
    6)GameManager:不可以复用的游戏逻辑管理。 
    7)SaveManager:保存数据管理。 
    8)MenuManager:管理动画和场景中显示。等等    

 4.MVC

1.主要讲一下什么是MVC框架,因为Untiy中MVC框架是无法满足的。框架就是协议是规定,所以很多时候你只要确定哪些东西属于哪个层,这点是很难的。
2.首先什么是M层,M层就是数据Model层,用于保存数据。
3.V层是什么,V层是视图层,就是我们能看见所有东西都是V层的,比如场景,一个GameObject;
4.C层是什么,V层与M层之间的交互是通过C层进行,逻辑控制层。
5.比如说V层用户点击跳转场景按钮,这是用户对V层的按钮进行了操作,V层将此消息发送给C层,C层接收到后需要去访问M层获取到我将要跳转的场景名称;C层将场景名称告诉给V层,V层根据名称进行跳转。可能我们会发现挺麻烦,但是如果一开始我们的场景数据是Scene1,但是后期想修改跳转的场景是Scene2,我们就只需要修改M层的数据,对于V层的按钮不会任何影响,这就是解耦的魅力。
6.代码的写法以及使用是没有规范,但是框架的约束就做到整洁性,一个好的程序员只有写出简单易懂整洁的代码就是好的程序员。因为项目中我们不是独立体,需要团队的配合。

 5.MVCS(Strangeloc)

1.StrangeIOC的理解比较难,但是使用还是很简单,因为他是依托于MVC框架,MVC中我们发现我们做到层与层之间解耦,但是层与层之间的沟通(调用与被调用)是没有进行封装。我个人理解StrangeIOC增加一个种沟通机制,包括信号和命令。将信号与信号之间又做了一层解耦,命令与命令之间做到解耦。有点像观察者模式。官网的教程都是英文,大家可以去官网上看文档,讲的还是很细致的。下面这个也是别人共享的中文翻译,感谢大神分享[StrangeIOC](https://www.cnblogs.com/unityzc/p/6182584.html)
2.可以一开始使用StrangeICO会不太习惯,脚本也会巨多,但是个人还是比较喜欢的。真正意义上的解耦。满足了对修改是封闭的,对扩展是开放的原则。

6.MVVM(uFrame)

1.MVVM没有用过,不是开源的,是图形化操作,与StrangeIOC一样,了解一下就行了,就是在M与V层之间在新增一个V层管理。



猜你喜欢

转载自blog.csdn.net/sinat_25682007/article/details/80540419