Module.Window.md
March 26, 2021 · View on GitHub
窗口管理器 (WindowManager)
框架的窗口系统是基于栈式的UI系统,框架已经默认支持了UGUI,并可以扩展支持NGUI,FairyGUI等UI系统
创建窗口管理器
public IEnumerator Start()
{
// 创建模块
MotionEngine.CreateModule<WindowManager>();
// 加载UIRoot
// 注意:CanvasRoot是框架扩展支持UGUI的UIRoot
yield return WindowManager.Instance.CreateUIRoot<CanvasRoot>("UIPanel/UIRoot");
}
定义一个窗口对象
using UnityEngine;
using UnityEngine.UI;
using MotionFramework.Window;
[Window((int)EWindowLayer.Panel, true)]
sealed class UILogin : CanvasWindow
{
private UISprite _loginSprite;
private InputField _account;
private InputField _password;
// 窗口创建(窗口生命周期内只被调用一次)
public override void OnCreate()
{
_loginSprite = GetUIComponent<UISprite>("UILogin/Window/Button (Login)");
_account = GetUIComponent<InputField>("UILogin/Window/Content/Text Field (Username)");
_password = GetUIComponent<InputField>("UILogin/Window/Content/Text Field (Password)");
// 监听按钮点击事件
AddButtonListener("UILogin/Window/Button (Login)", OnClickLogin);
}
// 窗口销毁(窗口生命周期内只被调用一次)
public override void OnDestroy()
{
}
// 窗口刷新(窗口生命周期内可能被调用多次)
public override void OnRefresh()
{
}
// 窗口更新(窗口生命周期内每帧被调用)
public override void OnUpdate()
{
}
private void OnClickLogin()
{
Debug.Log($"Account : {_account.text}");
Debug.Log($"Password : {_password.text}");
}
}
窗口逻辑代码
using MotionFramework.Window;
public class Test
{
public void Start()
{
// 打开窗口
string location = $"UIPanel/UILogin";
WindowManager.Instance.OpenWindow<UILogin>(location);
// 关闭窗口
WindowManager.Instance.CloseWindow<UILogin>();
}
}
关于UGUI的设置

关于UGUI的支持

UIRoot预制体内必须包含UICamera对象和UIDesktop对象
更详细的教程请参考示例代码