U
Unity
星辰学院
首页
课程表
章节导览
第 1 课
返回主站
首页
/
第 16 章 · 性能优化
/
第 274 课
LESSON 274 · 性能优化
项目架构(单例/事件/对象池)
项目架构完成。下一课做代码规范。
⏱ 约 15 分钟
📊 难度:
入门
🗂 第 16 章 · 性能优化
📍 第 274 / 300 课
课程进度
274 / 300
🎯
本节学习目标
掌握架构思想
实现事件系统
实现管理器模式
🚀
课程导读
“项目一大了就乱”——架构是“不乱”的关键。本课搭一套可扩展架构。
◆
架构思想
分层与职责。
【分层】游戏代码分层:
管理层(GameManager/AudioManager/UIManager)
数据层(SaveSystem/PlayerStats/Config)
逻辑层(角色/敌人/技能组件)
表现层(动画/特效/UI 表现)
【职责单一】每个脚本只干一件事(PlayerStats 管数值、PlayerMove 管移动)。
【通信】管理层用单例、对象间用事件、配置用数据。
【单例】全局唯一管理器(第 86 课):GameManager/AudioManager/UIManager。
【事件】解耦对象通信(第 167 课)。
【数据驱动】配置用 ScriptableObject/JSON(第 85 课)。
【好处】改一处不影响全局、新功能易加、别人易看懂。
【注意】别“上帝脚本”(一个脚本管所有)。
【完成】架构思想“有了”。
【推荐】小项目也按“管理/逻辑/表现”分层。
💡
架构三原则:分层(管理/逻辑/表现)、单一职责、解耦(事件/数据)。
◆
事件系统实现
“谁出事通知谁”。
【简单事件】每个系统自己声明事件(第 167 课):
public event System.Action<int> OnScoreChanged;
【全局事件系统】跨系统解耦:
public static class GameEvents {
public static event System.Action<int> OnScoreChanged;
public static event System.Action OnPlayerDied;
public static void ScoreChanged(int s) => OnScoreChanged?.Invoke(s);
public static void PlayerDied() => OnPlayerDied?.Invoke();
}
【发布】加金币:GameEvents.ScoreChanged(newScore);
【订阅】UI:GameEvents.OnScoreChanged += UpdateScore;
【取消订阅】OnDestroy 时 -=(防泄漏,重要!)。
【好处】金币系统不需要“知道”UI 存在(解耦)。
【注意】订阅不取消 = 内存泄漏(重要坑)。
【实战】把项目的分数/死亡通知改用事件。
【完成】事件系统“通了”。
【进阶】UnityEvent/委托参数化(进阶)。
⛔
订阅事件必须 OnDestroy 取消订阅(-=),否则对象销毁后仍被调用=泄漏/报错。
⚠
常见错误与排查
⛔
错误:
事件重复触发?
原因:
重复订阅没取消
解决:
订阅时先 -= 再 +=(防重复);OnDestroy 统一 -=。
★
动手练习
课后小任务(做出来才算真的学会)
用单例管理核心系统
实现全局事件系统
重构一个模块用事件解耦
✓
本节小结
项目架构完成。下一课做代码规范。
标记为已完成
完成打卡后,主站会实时更新你的学习进度 🎯
← 上一课
优化综合练习:性能达标
下一课 →
代码规范与项目管理
↑