【重构】整理文档目录结构,创建5个分类文件夹,拆分业务开发指南为8个独立文档,添加README入口导航
This commit is contained in:
151
03_核心功能/事件系统使用指南.md
Normal file
151
03_核心功能/事件系统使用指南.md
Normal file
@@ -0,0 +1,151 @@
|
||||
# StrayFog 框架事件系统使用指南
|
||||
|
||||
## 一、事件系统概述
|
||||
|
||||
事件系统分为两类:
|
||||
- **STCEvent**:Server To Client(服务器到客户端消息)
|
||||
- **CTCEvent**:Client To Client(客户端内部消息)
|
||||
|
||||
---
|
||||
|
||||
## 二、定义事件
|
||||
|
||||
### 2.1 定义事件枚举和参数
|
||||
|
||||
```csharp
|
||||
// 事件ID枚举
|
||||
public enum GameEventId
|
||||
{
|
||||
PlayerLevelUp,
|
||||
EnemyKilled,
|
||||
GoldChanged
|
||||
}
|
||||
|
||||
// 事件参数基类
|
||||
public class GameEventArgs : IHFEventArg<GameEventId>, IHFRecycle
|
||||
{
|
||||
public GameEventId eventId { get; set; }
|
||||
|
||||
public void Recycle()
|
||||
{
|
||||
// 重置状态
|
||||
eventId = default;
|
||||
}
|
||||
}
|
||||
|
||||
// 具体事件参数
|
||||
public class PlayerLevelUpEventArgs : GameEventArgs
|
||||
{
|
||||
public int playerId;
|
||||
public int oldLevel;
|
||||
public int newLevel;
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 三、UI窗口事件监听
|
||||
|
||||
### 3.1 在窗口中注册CTCEvent
|
||||
|
||||
```csharp
|
||||
[HFAssetBundlePath(enHFLanguageRootFolder.ASSETS_GAME_GAMEHFRESOURCE, "UIWindows/CardDeck/CardDeckWindow.prefab")]
|
||||
[HFUIWindowLayer(enHFUICanvasLayer.UIWindow, enHFUIWindowLayer.Dynamic, isIgnoreCloseByESC = false)]
|
||||
public class CardDeckWindow : AbsHFUIWindow
|
||||
{
|
||||
protected override void OnOpen(Action _onOpenComplete)
|
||||
{
|
||||
base.OnOpen(_onOpenComplete);
|
||||
// 注册客户端内部消息监听(CTCEvent)
|
||||
HFFunCatalogue.Event.CTCEvent.AddListener<HFEvent_CTC_CardUpdate>(enHFCTCEvent.CardUpdate, OnCardUpdate);
|
||||
}
|
||||
|
||||
protected override void OnClose(Action _onCloseComplete)
|
||||
{
|
||||
base.OnClose(_onCloseComplete);
|
||||
// 取消客户端内部消息监听
|
||||
HFFunCatalogue.Event.CTCEvent.RemoveListener<HFEvent_CTC_CardUpdate>(enHFCTCEvent.CardUpdate, OnCardUpdate);
|
||||
}
|
||||
|
||||
void OnCardUpdate(HFEventArgBase arg)
|
||||
{
|
||||
HFEvent_CTC_CardUpdate cardArg = arg as HFEvent_CTC_CardUpdate;
|
||||
// 更新卡组UI显示
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
> **注意**:UI窗口中**不监听服务器事件(STCEvent)**,服务器事件应在Logic层的Manager中监听。
|
||||
|
||||
---
|
||||
|
||||
## 四、Manager事件监听
|
||||
|
||||
### 4.1 使用AbsHFSingleMonoBehaviour(需要Update)
|
||||
|
||||
```csharp
|
||||
public class PlayerManager : AbsHFSingleMonoBehaviour<PlayerManager>
|
||||
{
|
||||
protected override int[] simulateBehaviourEvents => new int[]
|
||||
{
|
||||
enHFSimulateBehaviourEvent.Mono_Update,
|
||||
enHFSimulateBehaviourEvent.Mono_FixedUpdate
|
||||
};
|
||||
|
||||
protected override void OnAfterCreateInstance()
|
||||
{
|
||||
base.OnAfterCreateInstance();
|
||||
RegisterServerEvents();
|
||||
}
|
||||
|
||||
void RegisterServerEvents()
|
||||
{
|
||||
HFFunCatalogue.Event.STCEvent.AddListener<HFEvent_STC_PlayerInfo>(enHFSTCEvent.PlayerInfo, OnPlayerInfo);
|
||||
}
|
||||
|
||||
void OnPlayerInfo(HFEventArgBase arg)
|
||||
{
|
||||
HFEvent_STC_PlayerInfo info = arg as HFEvent_STC_PlayerInfo;
|
||||
// 处理服务器返回的玩家信息
|
||||
// 触发客户端事件通知UI更新
|
||||
HFEvent_CTC_PlayerLevelUp evt = HFFunCatalogue.New<HFEvent_CTC_PlayerLevelUp>();
|
||||
evt.playerId = info.playerId;
|
||||
evt.newLevel = info.level;
|
||||
HFFunCatalogue.Event.CTCEvent.Dispatch(evt);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 4.2 使用AbsHFSingleRunTime(纯逻辑)
|
||||
|
||||
```csharp
|
||||
public class ConfigManager : AbsHFSingleRunTime<ConfigManager>
|
||||
{
|
||||
protected override void OnAfterCreateInstance()
|
||||
{
|
||||
base.OnAfterCreateInstance();
|
||||
// 加载配置表
|
||||
LoadConfigTables();
|
||||
}
|
||||
|
||||
void LoadConfigTables()
|
||||
{
|
||||
// 加载配置数据
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 五、Manager类型对比
|
||||
|
||||
| 类型 | 说明 | 适用场景 |
|
||||
|-----|------|---------|
|
||||
| `AbsHFSingleMonoBehaviour` | 生成GameObject,可注册MonoBehaviour事件 | 需要Update/FixedUpdate等生命周期 |
|
||||
| `AbsHFSingleRunTime` | 纯内存单例,无GameObject | 不需要生命周期事件 |
|
||||
|
||||
---
|
||||
|
||||
**版本**: v1.0
|
||||
**生效日期**: 2026年
|
||||
**适用范围**: GiftGameX项目业务开发人员
|
||||
Reference in New Issue
Block a user