unityzgy/Assets/Scripts/ZFramwork/UIFramwork/BasePanel.cs
ayuan9957 bf12e02276 feat: 多语言本地化系统 - 支持中/英/法/俄实时切换
- LocalizationManager: 新增翻译表(SetFormatted/SetDuration/LocalizeOperateMsg)
- LoginPanel: InputField placeholder本地化、字体颜色保持
- HistoryPanel: 用时数据本地化、placeholder本地化
- RecordDetailPanel: 操作详情消息本地化(LanguageChanged重建)
- AppraiseWindowBase: 评价等级本地化、操作消息重建
- EditorAppraiser: 所有评估消息改用InjectOperateMsgLocalized
- StudentOperateRecorder: 新增InjectOperateMsgLocalized方法
- LocalizationLanguageTestBar: 单例模式、ScreenSpaceOverlay筛选
- 字体切换时保留颜色和verticalOverflow
2026-07-16 10:05:59 +08:00

168 lines
5.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEngine;
namespace XFramework
{
/// <summary>
/// 所有UI的父类
/// 用来控制UI的状态
/// 通过构造函数注入参数时 只能在该面板首次弹出时生效 后续只能通过Change 函数实现 因此除非确保构造函数使用的参数不会发生变化 否则不建议使用有参构造
/// </summary>
public abstract class BasePanel
{
private Transform activePanel;
private UIManager uiManager;
private UIType ui;
protected GameMain Game { get => GameMain.Instance; }
/// <summary>
/// 当前活动面板
/// </summary>
public Transform ActivePanel { get => activePanel; set => activePanel = value; }
public UIType UI { get => ui;}
//更新面板数据类
public BasePanel(UIType ui)
{
this.ui = ui;
}
/// <summary>
/// 初始化面板管理器
/// </summary>
/// <param name="manager"></param>
public void Initializa(UIManager manager)
{
uiManager = manager;
}
/// <summary>
/// 推入一个面板
/// 重复推入的面板 只保留首次推入的实例引用
/// </summary>
/// <param name="newPanel"></param>
public BasePanel Push(BasePanel newPanel)
{
return uiManager?.Push(newPanel);
}
/// <summary>
/// 隐藏一个面板
/// </summary>
public void Pop()
{
uiManager?.Pop();
}
/// <summary>
/// 用于初始化
/// 在UI销毁之前只会执行一次
/// 默认UI不会销毁该方法只执行一次
/// 可重写OnDestory实现销毁改变本方法执行时机
/// </summary>
protected abstract void InitEvent();
/// <summary>
/// 每次推出一个面板执行的操作 被push时执行
/// </summary>
public virtual void OnStart()
{
activePanel.PanelAppearance(true);
activePanel.SetSiblingIndex(activePanel.parent.childCount - 1);
if (!ui.Init)
{
InitEvent();
ui.Init = true;
}
}
/// <summary>
/// 退出时执行的操作 被pop时执行
/// isDestroy默认值为false表示不销毁对象
/// 频繁销毁和生成是比较消耗性能的如果非必要情况建议使isDestroy为false
/// </summary>
/// <param name="isDestroy">是否销毁</param>
public virtual void OnDestroy(bool isDestroy = false)
{
uiManager?.DestroyUI(ui, isDestroy);
}
/// <summary>
/// 每次激活时执行的操作
/// 只有被覆盖后 接触覆盖才会执行
/// </summary>
public virtual void OnEnable()
{
activePanel.GetOrAddComponent<CanvasGroup>().blocksRaycasts = true;
}
/// <summary>
/// 每次失去激活时执行的操作
/// 比如新推出了一个面板导致本面板被覆盖,当前面板就会执行此方法
/// </summary>
public virtual void OnDisable()
{
activePanel.GetOrAddComponent<CanvasGroup>().blocksRaycasts = false;
}
/// <summary>
/// 改变该面板的变量
/// 如果在执行OnDestroy时isDestroy值为false
/// 并且有些Panel类需要在new的时候传递参数
/// 那么就需要使用此方法将新new的类的参数传递给以前的类
///
/// </summary>
/// <param name="newPanel">新的面板</param>
public virtual void Change(object newData)
{
}
/// <summary>
/// 引用类型的数据 避免拆装箱
/// </summary>
/// <param name="newData"></param>
public virtual void Change(float newData)
{
}
/// <summary>
/// 当一个面板可能有多种参数且多种参数发生变化时间不一致时 使用该方法指定参数类型
/// </summary>
/// <param name="msgType"></param>
/// <param name="value"></param>
public virtual void Change(string msgType, object value)
{
}
///// <summary>
///// 为下一面板注入参数时调用
///// </summary>
///// <param name="data"></param>
//public virtual void ChangeNextPanel(float data)
//{
// uiManager.ChangePanel(data);
//}
//public virtual void ChangeNextPanel(object data)
//{
// uiManager.ChangePanel(data);
//}
/// <summary>
/// 显示提示文字
/// </summary>
/// <param name="text">文字信息</param>
/// <param name="textColor">文字颜色</param>
/// <param name="anchorePos">文字位置---当前预制件以屏幕中心为锚点</param>
public virtual void ShowPromoptText(string text,Color textColor,Vector2 anchorePos)
{
ResourcesCreater.InstantiatePrefab("Text_dynamicPrompt",activePanel.transform).GetComponent<DynamicText>().ShowPromptText(text,textColor, anchorePos);
}
}
}