笔者最近在项目开发中涉及到了"等级通行证"功能开发,但大部分代码都是由AI代写。笔者从中没有学到太多东西,因此想以教代学,分享一下如何设计一个合理的通行证。
下面以两条奖励轨道免费,付费讲解。
本节分享,当玩家领取一份通行证奖励的时候,整个系统如何运转。
一、系统中的六种角色
1. 配置数据 :
配置数据用来描述通行证规则:通行证的ID,等级节点,免费节点奖励,付费节点奖励,商品ID,价格。 配置数据回答如到达10级节点需要到达什么条件,应该发放什么奖励.2. 玩家状态 :
玩家状态用来表示玩家做过什么:玩家是否购买付费通行证?哪些免费奖励已经领取,哪些付费奖励已经领取。3. 用户交互层 :
通行证入口,通行证界面,单个奖励格子。总体负责显示奖励图标,显示是否解锁,是否领取,接收玩家点击,显示错误提示。4. 业务逻辑层 :
他负责检查奖励是否已经领取,所有条件通过之后,才允许下发奖励。5. 存档服务 :
如何保存玩家状态6. 外部系统
负责下发奖励,将奖励加入玩家资产。二、打开通行证的调用链
入口按钮启用时,注册点击事件:button.onClick.AddListener(OpenGrowthPass); 玩家点击入口 → OpenGrowthPass() → GrowthFundScreen.Show()
点击入口 → 显示 Screen → 检查配置 → 加载玩家存档 → 创建奖励 UI → 根据玩家状态刷新 UI三、领取奖励的调用链
奖励格子会保存一个点击回调。当玩家点击时,触发回调。同时我们就需要一个binding,用来绑定UI与数据。让binding告诉业务逻辑,点击的是哪个UI,对应哪个里程碑,位于哪个索引,属于免费还是付费轨道。
当领取奖励的时候,我们需要检测玩家是否领取过,等级是否达到,是否需要购买,奖励是否能发放
四、完整流程图
玩家点击入口 ↓ GrowthFundEntranceButton ↓ GrowthFundScreen.Show ↓ Load 存档 + BuildUI + RefreshUI ↓ 玩家点击10级免费奖励 ↓ GrowthFundRewardUI ↓ 点击回调 ClaimRewardGroup(binding) ↓ 检查重复领取 ↓ 检查玩家等级 ↓ 检查免费/付费资格 ↓ 验证并发放奖励 ↓ SetClaimed("level_10", false) ↓ GrowthPassSaveService.Save ↓ GameDataManager 写入 JSON ↓ 刷新 UI + 显示奖励弹窗