嗨各位独立开发者!!(⌐■_■)
让我们说真话:建立一个道具管理系统一般从简单开始,但很快就会变成一个巨大的 spaghetti 代码。您的 UI 脚本会与您的 player 脚本纠缠在一起,保存/加载变成噩梦,它们试图添加一个简单的拖拽功能却破坏了整个战斗逻辑。
我疲惫于不断为每个新项目重写我的库存,于是我花了几个星期建立了 ModularInventory&交互框架,使用严格的、解耦的数据驱动的架构。
以下是它保持清洁的代码库的方式:
- 事件驱动架构:零硬依赖!UI、逻辑和输入甚至不知道彼此的存在,只通过轻量级
GameEvents和Listeners进行沟通。 - 可脚本化的物体作为事实来源:游戏状态(例如
InventoryData)位于场景之外。这使得保存、加载和调试变得异常轻松。 - 智能 UI Raycasting:内置
IsPointerOverUIElement阻塞,防止了您点击库存中的物品而意外发射火球到游戏世界的困扰。 - 物理准备下的拖拽:实际上拖拽出 UI 时,物品会以准确的速度和方向觉知地射入世界。
加分:由于架构是完全解耦的,我可以使用 同一个 核心库存事件建立一个完整的 CS:GO 风格 Gacha/Roulette 机器!
如果您因库存架构而苦恼,或仅是想玩转物理下降和 Gacha 机制,我建立了一个 免費 WebGL Demo,您可以直接在浏览器中尝试!
我希望听到您怎么样处理自己的库存架构。在您的游戏中,是否喜欢使用单例、事件总线或可脚本化的物体?说出您的观点!
评论 (0)