
开场凌晨两点,美术同事突然发来消息:"游戏里某个怪物的血条不显示了,但 Prefab 里明明挂着脚本。" 你打开 Hierarchy 翻了三分钟,发现血条脚本挂在了一个被禁用的父节点上;再翻两分钟,又发现另一个 UI 元素被动态销毁但事件没解绑。每一次 Unity 项目从零开始,我们都觉得自己在写逻辑,实际上我们是在建造一座城市——没有图纸、没有分区、没有交通规则的城市。这座城市的运转核心,是 Unity 引擎的GameObject–Component 架构和MonoBehaviour 生命周期。看不见摸不着,但它决定了每一帧画面从哪里来、往哪里去。一旦理解了这套规则——尤其是它背后"两个世界"的底层结构——很多"灵异 bug"都会变成可解释、可预测的工程问题。一、GameObject 与 Component:万物皆组合1.1 实体本身是空的容器一个GameObject本身几乎没有功能——它只是Transform + 名字 + 激活状态的容器,真正赋予它能力的是挂载的Component。这与传统继承式设计(Monster : Unit : Entity)形成鲜明对比:组合优于继承。继承树一旦长到四五层,"会飞的、会游泳的、又会飞又会游泳的"就要发明菱形继承,而组合只需要多挂一个组件。// 一个 "怪物" 在 Unity 里其实是一组组件的集合 publ