1.UI框架核心方法
● BaseUI会记录UI的名字(枚举)和Controller用来将UI与具体操作方法解耦
● UIManger利用字典记录所有的UI组件,然后提供一些打开关闭UI的方法
● EventManager(事件系统)来实现模块与模块之间的交互,事件系统也分很多种实现方式,都是观察者设计模型的典型应用,利用一个关键字注册多个方法,然后在利用这个关键字激活调用已经住的方法。也是C#中委托的一种典型用法。广播形式、通知形式等。
2.UI框架拓展方法
● ResourcesManager(资源管理器),封装一些加载Resources资源的方法,同步加载,异步加载,加载并实例化等方式的方法。
● DataHelper(数据解析器),对Xml、Json(LitJson、JsonFX)、Protobuf等数据格式序列化与反序列化插件的进一步封装,方便调用。
● Common Extension(公共拓展组件)利用泛型和拓展方法对Unity中的方法进行进一步的封装,加快开发速度。
● Singleton(单例)
● NetworkManager,负责与后台数据的下载、上传。
3.简易UI框架的优缺点
● 容易上手使用
● 针对C#新手相对容易理解
● 只适合很小的项目
● 拓展性很差
● 逻辑会堆在MonoBehaviour的脚本下,效率降低
-------------->>>>>>>>>>>>>>----------------
MJ@D de UI Frame
------------->>>>>>>>>>>>>>-----------------
DataHelper(数据解析器) - - >> LitJson.
BaseUI:
->Baseview / BaseWindow
->UIManager
->ResourceManager
Baseview
界面初始化和销毁,按钮点击事件监听,Toggle值变化监听
using System;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using UnityEngine.Events;
public abstract class BaseView : MonoBehaviour
{
//只在对象显示状态销毁调用
public void OnDestroy()
{
Destroy();
}
//初始化
public virtual void Init(params object[] paralist)
{
}
//释放回调
public virtual void Destroy()
{
Notification.Instance.RemoveAllEvent(this);
}
/// 添加button事件监听
public void AddButtonClickListener(Button btn, UnityAction action)
{
if (btn == null)
{
return;
}
btn.onClick.AddListener(() => {
SoundManager.Instance.PlaySfx(GameSound.Click_sfx_Id);
action();
});
//btn.onClick.AddListener(BtnPlaySound);
}
public void AddToggleClickListener(Toggle toggle, UnityAction<bool> action)
{
if(toggle == null)
{
return;
}
toggle.onValueChanged.AddListener((_value) => {
SoundManager.Instance.PlaySfx(GameSound.Click_sfx_Id);
action(_value);
});
//btn.onClick.AddListener(BtnPlaySound);
}
}
BaseWindow
窗口的模态处理,遮罩控制
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class BaseWindow : BaseView
{
public bool isSmartClose = true; //是否点击遮罩关闭
public bool isLucid = false;//是否透明遮罩
public override void Init(params object[] paralist)
{
base.Init(paralist);
SetMaskView(isSmartClose,isLucid);
}
//设置遮罩
public void SetMaskView(bool isSmartClose, bool isLucid)
{
int width = Screen.width;
int height = Screen.height;
Color newColor=new Color(0/255F,0/255F,0/255F,100/255F);
if(!!isLucid)
{
newColor.a = 0;
}
GameObject img = new GameObject