Files
UnityAI/03_核心功能/UI事件绑定指南.md

129 lines
3.5 KiB
Markdown
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.
# StrayFog 框架 UI事件绑定指南
## 一、事件绑定方式
### 1.1 代码绑定(使用框架封装组件)
```csharp
public class LoginWindow : AbsHFUIWindow
{
[SerializeField] private SFUI_Button btn_Login;
protected override void OnRunAwake()
{
base.OnRunAwake();
// OnRunAwake: 初始化组件引用和按钮事件绑定(仅调用一次)
btn_Login.OnAddClickListener += OnBtnLogin;
btn_Login.OnAddEnterListener += OnBtnEnter;
btn_Login.OnAddExitListener += OnBtnExit;
}
protected override void OnOpen(Action _onOpenComplete)
{
base.OnOpen(_onOpenComplete);
// OnOpen: 注册CTC事件监听每次打开调用
HFFunCatalogue.Event.CTCEvent.AddListener<HFEvent_CTC_LoginResult>(
enHFCTCEvent.LoginResult, OnLoginResult);
}
protected override void OnClose(Action _onCloseComplete)
{
base.OnClose(_onCloseComplete);
// OnClose: 移除CTC事件监听每次关闭调用
HFFunCatalogue.Event.CTCEvent.RemoveListener<HFEvent_CTC_LoginResult>(
enHFCTCEvent.LoginResult, OnLoginResult);
}
void OnBtnLogin(GameObject go)
{
// 处理登录逻辑 - 使用框架标准调用方式
HFEvent_CTC_Login evt = HFFunCatalogue.New<HFEvent_CTC_Login>();
evt.account = "player_account";
evt.password = "encrypted_password";
evt.Dispatch();
}
void OnBtnEnter(GameObject go)
{
// 鼠标进入
}
void OnBtnExit(GameObject go)
{
// 鼠标退出
}
void OnLoginResult(HFEventArgBase arg)
{
// 处理登录结果
}
}
```
### 1.2 框架封装UI组件列表
| 组件名 | 基类 | 说明 |
|-------|------|------|
| `SFUI_Button` | `AbsSFUI_Button : Button` | 按钮组件 |
| `SFUI_Text` | `AbsSFUI_Text : Text` | 文本组件 |
| `SFUI_Image` | `AbsSFUI_Image : Image` | 图片组件 |
| `SFUI_Toggle` | `AbsSFUI_Toggle : Toggle` | 开关组件 |
| `SFUI_ScrollRect` | `AbsSFUI_ScrollRect : ScrollRect` | 滚动区域 |
| `SFUI_InputField` | `AbsSFUI_InputField : InputField` | 输入框 |
### 1.3 SFUI_Button事件委托
| 事件 | 委托签名 | 说明 |
|-----|---------|------|
| `OnAddClickListener` | `Click(GameObject go)` | 点击事件 |
| `OnAddEnterListener` | `Enter(GameObject go)` | 鼠标进入 |
| `OnAddExitListener` | `Exit(GameObject go)` | 鼠标退出 |
| `OnAddPointerUpListener` | `PointerUp(GameObject go)` | 指针抬起 |
---
## 二、事件系统分类
### 2.1 CTCEvent客户端内部事件
```csharp
// 注册监听
HFFunCatalogue.Event.CTCEvent.AddListener<HFEvent_CTC_CardUpdate>(
enHFCTCEvent.CardUpdate, OnCardUpdate);
// 触发事件
HFEvent_CTC_CardUpdate evt = HFFunCatalogue.New<HFEvent_CTC_CardUpdate>();
evt.cardId = 123;
HFFunCatalogue.Event.CTCEvent.Dispatch(evt);
```
### 2.2 STCEvent服务器事件
```csharp
// 在Manager中注册
HFFunCatalogue.Event.STCEvent.AddListener<HFEvent_STC_PlayerInfo>(
enHFSTCEvent.PlayerInfo, OnPlayerInfo);
```
> **注意**UI窗口中不监听STCEvent应在Logic层Manager中监听。
---
## 三、事件参数回收
### 3.1 使用对象池
```csharp
// 获取事件参数(从对象池获取)
HFEvent_CTC_PlayerLevelUp evt = HFFunCatalogue.New<HFEvent_CTC_PlayerLevelUp>();
evt.playerId = 1;
evt.newLevel = 10;
// 触发事件(事件系统会自动回收)
HFFunCatalogue.Event.CTCEvent.Dispatch(evt);
```
---
**版本**: v1.0
**适用范围**: GiftGameX项目业务开发人员