96SEO 2026-06-12 10:40 46
说实话,设计一个轻量级的UI框架对于Unity开发者来说是一个hen常见的需求,哈哈,你懂的。
咱就是说市面上有hen多成熟的UI框架,如MVC、MVP、MVVM等,但它们往往伴随着繁琐的代码和严格的规则,害,对于快速迭代的项目来说有点不太友好。

一个游戏可Neng有50%的功Nengdou与UI层有关,所以设计一个通用的、高效的、学习成本低的UI应用框架是必选项,下面我们就来设计一款轻量级的UI框架。
一、为什么需要轻量级UI框架?在中轻度游戏、休闲类游戏或小游戏中,快速研发、快速迭代、快速上线、快速试错是成功的关键。
而传统的重量级UI框架可Neng会拖慢这个过程,不对不对,应该是会影响这个过程。
所以我们需要一个轻量级的UI框架,它应该简单、高效、易于上手。
二、UI核心框代码设计我们把UI框架的角色简化为三个:管理者、中介者、呈现者。
管理者负责管理UI对象的生命周期,中介者负责加载和管理UI对象,呈现者负责展现UI的元素以及应用逻辑。
using UnityEngine;using System.Collections;using Simple.UI;namespace Gamelogic{ public class GameSetting : MonoBehaviour { private void Awake { DontDestroyOnLoad; DontDestroyOnLoad); UIMgr.Instance.Init; //初始化UI框架 } // Use this for initialization void Start { var loadingUI = UIMgr.Instance.Open<LoadingContext>;//打开Loading界面 loadingUI.View.UpdateLoading;//geng新界面 //UIMgr.Instance.Close<LoadingContext>;//关闭loading界面 } // Update is called once per frame void Update { } }}
中介者角色的代码如下:
using System.Collections;using System.Collections.Generic;using UnityEngine;using Simple.Asset;using System;namespace Simple.UI{ public abstract class UIContext : MonoBehaviour { public abstract UILayer Layer { get; }//UI层枚举 public abstract string AssetKey { get; }//UI资源的名称,prefab名称 public virtual bool Cache { get; } = false; //是否缓存 public virtual bool AssetCache { get; } = true;//addressable中是否缓存, 根据需要Ke以舍弃此字段 public UIView View { set; get; } //UI呈现角色 private AssetOwner _owner = new AssetOwner; //此处是资源管理者,可换成适合你的组件。 private void Awake { Init; SetLayer; } public virtual GameObject LoadViewObject//加载UI资源 { var ah = _owner.Instantiate;// 加载UI资源prefab,可换成其它组件 var instance = ah.GetInstance; return instance; } //...
呈现者角色的代码如下:
using UnityEngine;using UnityEngine.UI;using Simple.UI;using System.Collections.Generic;using System;namespace Gamelogic{ public class LoadingView : UIView { private UIGetter _getter; private Slider _sldLoading; private Text _txtVersion; private Text _txtNum; private void Awake { //获取prefab的UI控件 _getter = GetComponent<UIGetter>; _sldLoading = _getter.GetElement.GetComponent<Slider>; _txtVersion = _getter.GetElement.GetComponent<Text>; _txtNum = _getter.GetElement.GetComponent<Text>; _txtVersion.text = $"v{Application.version}"; } //数据的来源,Ke以交给第三方或在类中实现 public void UpdateLoading { if _sldLoading.value = percent; if { var p = ; if p = ; _txtNum.text = $"{p}%"; } } }}
三、管理者角色
管理者角色的代码如下:
using UnityEngine;using System.Collections.Generic;namespace Simple.UI{ public class UIMgr { private List<UIContext> _contexts = new List<UIContext>;//所有Yi打开的中介者 public Transform UIRoot { private set; get; }//定义的根节点 public UICanvasBinder UIBinder { private set; get; } private static UIMgr _instance; public static UIMgr Instance { get {//...
说到这里你可Neng会问,为什么百度不收录我的文章?
哈哈,这个问题啊,hen复杂,你得检查你的网站是否符合百度的收录规则,还有你的内容质量是不是够高,你Ke以去kankan百度的站长工具,那里有详细的说明,你Ke以尝试优化你的网站和内容,提高收录率。
四、使用示例我们以一个Loading界面为例来说明如何使用这个框架。
我们要建立两个角色类:LoadingContext.cs、LoadingView.cs,分别继承自UIContext和UIView,具体代码如下所示:
using UnityEngine;using Simple.UI;namespace Gamelogic{ public class LoadingContext : UIContext { public override UILayer Layer => UILayer.Bottom;//...
总的来说这个UI层框架只有三个角色:管理者、中介者、呈现者。
这三个角色变动Zui频繁的应该是呈现者角色,主要体现在UI的设计、布局和geng新换代方面。
开发人员大部分的时间dou是专注于UIView的子类开发上,不需要写中间件,例如启用协程。
至于数据的存储、呈现操作部分,完全是交给另外的模块按需实现,然后提供相关的API供UIView调用即可,或者是直接在UIView的子类中实现也可。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback