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层管理。



### Unity UI框架设计原则 在Unity开发中,UI框架设计遵循若干核心原则以确保高效性和用户体验。这些原则涵盖了性能优化、可维护性以及用户交互体验等方面。 #### 性能优先级 为了提供流畅的游戏或应用体验,UI系统的渲染效率至关重要。通过减少Draw Call次数和降低CPU/GPU负载来提升整体表现[^2]。例如,在构建复杂的界面时应考虑使用Sprite Atlas技术合并纹理资源,从而减少绘制调用开销;同时合理设置Canvas的Render Mode属性可以有效控制视图层次结构中的节点数量及其更新频率。 #### 可扩展性与模块化架构 良好的UI设计方案应当具备高度灵活性以便于后期功能迭代及跨项目复用组件。采用事件驱动机制连接不同控件之间的逻辑关系,并利用预制体(Prefab)实现快速组装复杂布局成为常见做法之一。此外,对于大型应用程序而言,分层管理场景内的各个元素有助于提高代码清晰度并简化调试过程。 #### 用户友好型接口 直观易懂的操作方式加上美观大方的画面风格构成了吸引玩家的重要因素。因此,在规划初期就要充分考虑到目标受众群体的习惯偏好,精心打磨每一个细节之处——无论是按钮样式还是动画效果都需经过反复测试调整直至达到理想状态。值得注意的是,响应速度同样不可忽视,任何延迟都会影响到最终评分。 ```csharp // C# 示例:创建一个简单的按钮点击处理函数 using UnityEngine; using UnityEngine.UI; public class UIButtonHandler : MonoBehaviour { public void OnButtonClick() { Debug.Log("Button clicked!"); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值