仿照移动端的弹窗机制写的UI架构:所有的UI窗口 在加载后都注入到弹窗管理器中进行管理开关和赋值显示。
代码架构: 1 弹窗父类Activity 2. 具体弹窗类 xxActivtiy .3.弹窗管理器AcitivtiyManger.4,传递数据类 bundle.5 加载注入类 LoadInUI.6.数据信息接受控制类xxUIController.
具体代码:
1 弹窗父类Activity :
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Activity : MonoBehaviour
{
//UI弹窗管理器
public ActivityManager manager;
//UI弹窗入口
public virtual void OnCreate(Bundle _bundle = null) { }
//暂停
public virtual void OnPause() { }
//重置
public virtual void OnResume(Bundle _bundle = null) { }
//退出
public virtual void OnActivityDestory() { }
}
2. 具体弹窗类 xxActivtiy继承Activity:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public enum CurrentPanel
{
Image_Buy,
Image_Seal,
Image_Make
}
//商店弹窗
public class MarketActivity : Activity
{
[Header("关闭按钮")]
public Image bg;
public Button close;
public Toggle Buy;
public Toggle Seal;
public Toggle Make;
public GameObject imageBg;
//商店等级
public Text Lv;
public Text adress;
/// <summary>
/// 价格波动 刷新时间
/// </summary>
public Text time;
/// <summary>
/// 补货 刷新时间
/// </summary>
public Text time_1;
/// <summary>
/// 今日最大出售金额
/// </summary>
public Text seal_Max;
//记录当前是 购买 、 卖出 还是 制作 面板
[HideInInspector]
public CurrentPanel current = CurrentPanel.Image_Buy;
[Header("Buy, Seal , Make 父物体")]
public GameObject[] BSM;
//商店主界面进入
public override void OnCreate(Bundle _bundle = null)
{
#region // 商店主界面的相关设置绑定刷新赋值以及网络信息的监听操作
//关菊花
GameManager.Instance.activity.Flush();
//关闭3d主场景输入控制系统
GameManager.Instance.inputSystem.SetActiveState(false);
this.gameObject.SetActive(true);
//添加购买成功监听
GameManager.Instance.gameEventDispatcher.AddEventListener(GameEventType.MarketBuySuccess, BuySuccess);
close.onClick.AddListener(CloseMarketOnClick);
Buy.onValueChanged.AddListener(delegate (bool isOn) { ValueChange(isOn, Buy); });
//刷新界面
RefreshPanel();
SetValues();
//关闭主界面输入控制系统
GameManager.Instance.inputSystem.SetActiveState(false);
#endregion
}
//商店主界面重置
public override void OnResume(Bundle _bundle = null)
{
base.OnResume(_bundle);
Debug.Log("OnResume调用了");
SetValues();
}
//退出商店总界面
public override void OnActivityDestory()
{
#region//退出主界面的一系列关闭 清空 解除绑定操作。
Debug.Log("退出敞口");
base.OnActivityDestory();
GameManager.Instance.gameEventDispatcher.RemoveEventListener(GameEventType.MarketBuySuccess, BuySuccess);
close.onClick.RemoveAllListeners();
gameObject.SetActive(false);
GameManager.Instance.inputSystem.SetActiveState(true);
#endregion
}
//返回按钮
void CloseMarketOnClick()
{
manager.PopWindow();
}
//商店内几个界面的切换
void ValueChange(bool isOn,