16 KiB
Lucky Dice 资产与配置交付清单
文档目的
这份清单用于对齐美术、策划和程序在 Lucky Dice 第一版中的交付边界:
- 美术同学需要提供哪些可落地资产。
- 策划同学需要提供哪些规则、权重和玩法入口配置。
- 程序当前 core 已经如何实现,接下来完整开发还需要哪些外部输入。
当前实现以 LuckyDiceRollFlowService 为核心入口,Demo 表现层只做最小 UI 演示。也就是说,core 骨架已经足够承接后续开发;接下来重点不是继续扩 demo core,而是让美术和策划补齐完整表现、完整特殊结果、运营策略和目标短玩法内容。
当前玩法闭环
第一版核心链路如下:
玩家触发普通 Roll
-> DiceRollService 生成普通骰子结果
-> ComboFactBuilder 生成组合事实
-> ComboRuleMatcher 按优先级命中组合规则
-> RollActionDispatcher 执行 action
-> 如果 action 触发 Lucky Dice
-> LuckyDiceFlowService 筛选候选并按权重随机
-> 生成 Lucky Dice 结果槽
-> TargetModeResolver 解析目标玩法模式
-> 输出 EnterTargetModeEffect 给表现层或目标玩法入口
当前默认结果:
| 场景 | 当前配置结果 |
|---|---|
| 数字 + 数字 | 普通奖励 |
| 数字 + clover | 普通奖励 + Clover bonus |
| clover + clover | 触发 Lucky Dice |
| Lucky Dice 选中 rocket | 进入 slap_down_normal |
| Lucky Dice 选中 thief | 进入 treasure_heist_normal |
美术资产清单
第一版必须提供
| 模块 | 资产 | 数量/规格 | 用途 | 命名建议 |
|---|---|---|---|---|
| 普通骰子 | 数字骰面 | 5 个,数字 2/3/4/5/6 |
普通 Roll 展示 | dice_face_2 到 dice_face_6 |
| 普通骰子 | Clover 骰面 | 1 个 | 触发 bonus 或 Lucky Dice | dice_face_clover |
| Lucky Dice | Rocket 结果图标 | 1 个 | 表示进入 Slap Down | lucky_result_rocket |
| Lucky Dice | Thief 结果图标 | 1 个 | 表示进入 Treasure Heist | lucky_result_thief |
| Lucky Dice | 结果槽底板 | 1 套,可复用 3 格 | 当前显示 3 个相同结果槽 | lucky_slot_frame |
| UI | Lucky Dice 标题区 | 1 套 | 进入特殊流程时显示标题 | lucky_title_panel |
| UI | 倍率/奖励文案底板 | 1 套 | 显示倍率、奖励或结果反馈 | lucky_reward_panel |
| UI | 普通投骰按钮状态 | 至少 3 态 | 待投、投掷中、再投一次 | btn_roll_normal/default/disabled |
| UI | 特殊结果揭示状态 | 至少 1 套 | Lucky Dice 结果亮相 | lucky_reveal_state |
第一版建议提供
| 模块 | 资产 | 说明 |
|---|---|---|
| 转场 | 普通 Roll 命中 Lucky Dice 的轻量转场 | 不需要复杂白烟或飞入,先提供短过渡即可 |
| 反馈 | Clover bonus 的小特效 | 用于区分数字 + clover 和普通奖励 |
| 反馈 | Lucky Dice 命中特殊结果的高亮 | 结果槽定格时使用 |
| 音效 | 普通骰子滚动音效 | 可先 1 个循环或短音 |
| 音效 | Lucky Dice 揭示音效 | 结果揭示时播放 |
| 音效 | 进入目标玩法音效 | rocket/thief 跳转前反馈 |
后续扩展预留
| 扩展方向 | 资产需求 |
|---|---|
| 新 Lucky Dice 结果 | chest/bomb/key 等图标、命中特效、入口反馈 |
| 结果槽数量变化 | 2 格、4 格或动态布局适配资源 |
| 更复杂动画 | 托盘、骰子飞入、粒子爆发、白烟转场、镜头震动 |
| 教程/Bonus 模式 | 教程标识、bonus 标识、特殊状态底板 |
| 目标玩法落地 | Slap Down、Treasure Heist 各自入口插画或短玩法 UI |
完整表现开发需要提供
这些不是当前 demo core 的必需项,但属于下一阶段完整开发前必须向美术收齐的输入。
| 模块 | 资产/说明 | 需要确认 |
|---|---|---|
| 托盘动画 | Lucky Dice 托盘出现、停留、退出的完整动画 | 时长、入场方向、层级、是否可跳过 |
| 骰子飞入 | 普通骰或 Lucky Dice 结果飞入槽位的动画 | 起点、路径、缓动、落点反馈 |
| 白烟转场 | 命中 Lucky Dice 或进入目标玩法前的白烟/遮罩转场 | 遮挡范围、时长、是否承接场景切换 |
| 粒子爆发 | 命中特殊结果、Clover bonus、进入目标玩法的粒子 | 颜色、强度、触发节点 |
| 全套时序参考 | 竞品完整动画拆帧或时间轴 | 每段开始/结束点、可交互锁定时间 |
| 失败/兜底表现 | 候选池为空、目标模式缺失、普通奖励兜底的提示表现 | 是否展示给玩家、是否只进调试日志 |
策划配置清单
骰子集合配置
| 字段 | 当前值 | 说明 | 提供方 |
|---|---|---|---|
diceSetId |
normal_main |
普通骰子集合 ID | 策划 |
setType |
Normal |
普通骰子集合 | 程序固定枚举,策划确认 |
diceCount |
2 |
普通 Roll 投几颗骰子 | 策划 |
faces |
2,3,4,5,6,clover |
普通骰面池 | 策划确认,美术提供图 |
diceSetId |
lucky_dice |
Lucky Dice 集合 ID | 策划 |
setType |
Lucky |
特殊结果集合 | 程序固定枚举,策划确认 |
defaultResultSlotCount |
3 |
特殊结果默认展示槽数 | 策划 |
faces |
rocket,thief |
第一版特殊结果池 | 策划确认,美术提供图 |
普通组合规则配置
| 字段 | 当前示例 | 说明 |
|---|---|---|
ruleId |
normal_clover_clover_lucky_dice |
规则唯一 ID |
priority |
100 |
优先级,高的先匹配 |
matcherType |
ExactCombo |
使用哪种匹配器 |
comboKey |
clover_clover |
精确组合 key |
actions |
trigger_lucky_dice |
命中后执行的行为 |
stopAfterMatched |
true |
命中后是否停止后续规则 |
当前默认规则:
| 优先级 | 规则 | 行为 |
|---|---|---|
| 100 | clover_clover |
trigger_lucky_dice |
| 50 | 包含 1 个 clover |
grant_reward + add_multiplier |
| 10 | 全部是数字 | grant_reward |
策划新增组合时,优先新增规则配置;只有现有 matcher 无法表达时才需要程序新增 matcher。
可用 matcher 类型
| matcher | 可表达内容 |
|---|---|
ExactCombo |
精确匹配无序或有序组合 key |
AllNumbers |
所有骰子都是数字 |
ContainsFace |
包含指定骰面 |
FaceCount |
指定骰面数量等于某值 |
FaceCountRange |
指定骰面数量在区间内 |
DiceCount |
限定骰子数量 |
NumberPair |
数字对子 |
NumberOfAKind |
N 个相同数字 |
NumberSumRange |
数字点数和区间 |
可用 action 类型
| action | 当前效果 | 需要策划提供的参数 |
|---|---|---|
grant_reward |
产出普通奖励效果 | 后续需要接真实奖励时补奖励 ID、数量、倍率策略 |
add_multiplier |
产出倍率效果 | 当前使用 reason=clover_bonus |
trigger_lucky_dice |
进入 Lucky Dice 流程 | 无 |
规格中预留了 enter_mode 和 show_popup,但当前默认执行器尚未实现;如果策划需要直接进玩法或弹提示,需要先补程序执行器。
Lucky Dice 候选配置
| 字段 | 当前示例 | 说明 |
|---|---|---|
resultKey |
rocket |
Lucky Dice 抽中的特殊结果 |
targetKey |
slap_down |
目标玩法 ID |
resultSlotCount |
3 |
显示几个结果槽 |
weight |
1 |
权重随机用 |
enabled |
true |
是否启用 |
minLevel |
0 |
最低玩家等级 |
sourceFilter |
normal_roll |
允许从哪个来源触发 |
isDefault |
true |
候选池兜底结果 |
当前默认候选:
| resultKey | targetKey | modeKey | slot | weight | default |
|---|---|---|---|---|---|
rocket |
slap_down |
slap_down_normal |
3 | 1 | 是 |
thief |
treasure_heist |
treasure_heist_normal |
3 | 1 | 否 |
目标模式配置
| 字段 | 当前示例 | 说明 |
|---|---|---|
resultKey |
rocket |
Lucky Dice 特殊结果 |
targetKey |
slap_down |
目标玩法 |
modeKey |
slap_down_normal |
具体进入模式 |
后续如果要支持新手教程、bonus 模式或活动模式,建议新增 mode 配置与解析规则,不要把分支写进 Lucky Dice 随机逻辑里。
完整结果与短玩法内容配置
这些内容是下一阶段开发需要策划提供的核心输入。
| 内容 | 需要提供 | 说明 |
|---|---|---|
chest 完整玩法 |
resultKey、targetKey、默认 modeKey、奖励规则、表现需求、失败/退出规则 |
当前 core 支持新增候选,但玩法语义需要策划定义 |
bomb 完整玩法 |
触发条件、目标玩法、奖励或惩罚、是否影响倍率、表现需求 | 需要明确是否只是入口还是独立短玩法 |
key 完整玩法 |
解锁对象、奖励池、目标玩法、与进度/关卡的关系 | 需要明确是否有库存、冷却或次数限制 |
| Slap Down 短玩法规则 | 入口条件、胜负条件、交互方式、奖励结算、退出回主循环规则 | 当前只解析到 slap_down_normal,未实现短玩法内容 |
| Treasure Heist 短玩法规则 | 入口条件、交互方式、奖励结算、失败处理、退出回主循环规则 | 当前只解析到 treasure_heist_normal,未实现短玩法内容 |
| 组合行为说明 | 每个普通骰组合对应的玩家可感知结果、奖励、倍率、提示、是否进入 Lucky Dice | 程序仍优先映射到通用 action;只有出现新通用行为时才新增 executor |
复杂运营权重策略
当前 core 已有 weight、enabled、minLevel、sourceFilter,但复杂运营策略还需要策划补完整规则。
| 策略 | 需要提供 |
|---|---|
| 活动期权重 | 活动 ID、起止条件、哪些 resultKey 提权、权重变化值 |
| 新手期策略 | 第几次 Roll 固定结果、何时开放随机、教程模式如何映射 |
| 冷却策略 | 每个 targetKey/resultKey 的冷却时间、次数限制、跨局是否继承 |
| 保底策略 | 连续未命中特殊结果几次后提升概率或强制命中 |
| 互斥策略 | 哪些结果不能连续出现,哪些结果不能与当前关卡/活动共存 |
| 兜底策略 | 候选池为空、权重全 0、模式缺失时给玩家什么结果 |
兜底与验收配置
策划需要确认以下策略:
| 问题 | 当前程序行为 | 需要确认 |
|---|---|---|
| 普通组合未命中 | 目前规则覆盖默认 2 骰主要组合 | 未命中时是否发普通奖励兜底 |
| Lucky Dice 候选过滤后为空 | 优先找过滤后 default;没有则 NormalRewardFallback |
是否允许回普通奖励 |
| 候选权重都小于等于 0 | 不参与随机,走 default 或普通奖励兜底 | 是否需要配置校验直接报错 |
| 目标模式缺失 | 返回 TargetModeFailedEffect |
是否弹错误、发普通奖励或阻断 |
| 新增结果没有图标 | core 可出结果,但表现层无法正确展示 | 是否允许占位图 |
当前 core 实现说明
入口
LuckyDiceRuntimeFactory.CreateDefaultFlow() 创建默认运行时,注入:
DiceRollServiceComboRuleMatcherRollActionDispatcherLuckyDiceFlowServiceTargetModeResolver
外部只需要向 LuckyDiceRollFlowService.Execute() 传入 RollFlowRequest,就能得到完整 RollFlowResult。
普通 Roll
DiceRollService 根据 DiceSetConfig.DiceCount 投掷,不写死两颗骰子。ComboFactBuilder 会把普通结果转成:
- 原始 faces
FaceCountsNumberValuesNumberSumCloverCountNormalizedKeyOrderedKey
普通组合匹配只处理 DiceSetType.Normal。如果把 Lucky Dice 特殊结果交给 ComboFactBuilder,测试已经覆盖会拒绝处理。
规则匹配
ComboRuleMatcher 按优先级匹配规则,matcher 由 MatcherType 注册。当前默认 matcher 已覆盖第一版和 N 骰扩展常用场景。
这意味着新增组合时通常只需要策划加配置,例如:
FaceCountRange clover min 2 -> trigger_lucky_dice
NumberOfAKind count 3 -> grant_reward + add_multiplier
行为执行
RollActionDispatcher 只按 ActionType 找 executor,不按 clover_clover 这类组合 key 找方法。
当前执行器只实现三类:
grant_rewardadd_multipliertrigger_lucky_dice
如果未来要有弹窗、直接进玩法、发具体道具包,需要新增通用 executor,而不是给每个组合写独立方法。
Lucky Dice 选择
LuckyDiceFlowService.Select() 当前做了三层筛选:
enabledplayerLevel >= minLevelsourceFilter包含当前TriggerSource
筛选后按 weight 做随机。若没有可随机候选,会尝试 filtered 里的 isDefault;仍没有时返回普通奖励兜底标记 NormalRewardFallback。
当前实现还没有独立的 cooldown/tutorial filter 类,字段和规格已预留,后续要做时应在这里扩展筛选链。
结果槽
Lucky Dice 随机只选一个 resultKey。展示槽由配置生成:
slotCount = candidate.resultSlotCount
?? luckyDiceSet.defaultResultSlotCount
?? 3
第一版会把同一个 resultKey 重复填满槽位,例如 rocket, rocket, rocket。
目标模式解析
TargetModeResolver 用 resultKey + targetKey 查 TargetModeConfig,得到最终 modeKey。
当前默认映射:
rocket + slap_down -> slap_down_normalthief + treasure_heist -> treasure_heist_normal
如果映射缺失,会返回 MissingTargetMode,不会静默吞掉。
表现层
LuckyDiceDemoController 是当前最小表现 demo:
- 运行时创建 Canvas。
- 展示 2 个普通骰子文本。
- 命中 Lucky Dice 时展示 3 个特殊结果槽。
- 根据
LuckyDiceDemoSnapshot显示组合、规则、效果和目标模式。
它现在使用文字模拟骰面和结果,尚未接入正式图片、动画、音效或目标玩法真实场景。
给美术和策划的交付格式建议
美术交付建议
Art/LuckyDice/
DiceFaces/
dice_face_2.png
dice_face_3.png
dice_face_4.png
dice_face_5.png
dice_face_6.png
dice_face_clover.png
LuckyResults/
lucky_result_rocket.png
lucky_result_thief.png
UI/
lucky_slot_frame.png
lucky_title_panel.png
lucky_reward_panel.png
VFX/
vfx_clover_bonus.prefab
vfx_lucky_reveal.prefab
Audio/
sfx_dice_roll.wav
sfx_lucky_reveal.wav
sfx_target_enter.wav
策划配置表建议
第一版建议拆成 4 张表或 4 个 JSON/ScriptableObject:
| 表 | 主键 | 内容 |
|---|---|---|
DiceSetConfig |
diceSetId |
骰子集合、数量、面池、默认槽数 |
ComboRuleConfig |
ruleId |
普通组合规则、优先级、matcher、actions |
LuckyDiceCandidateConfig |
resultKey + targetKey |
Lucky Dice 候选、权重、启用条件、槽数 |
TargetModeConfig |
resultKey + targetKey |
目标玩法模式映射 |
程序当前已经有这些结构的本地默认版本;后续可以把默认硬编码迁移到 ScriptableObject 或 JSON。
下一阶段需要收齐
当前 demo core 已经足够验证基础链路。下一阶段如果要进入完整开发,需要美术和策划补齐以下内容:
- 完整复刻竞品的托盘、飞入、白烟、粒子爆发全套动画拆解与资源。
chest/bomb/key的完整玩法内容、入口配置、奖励结算和表现需求。- 复杂运营权重策略,包括活动期、新手期、冷却、保底、互斥和兜底。
- Slap Down / Treasure Heist 的完整短玩法规则,而不仅是
modeKey。 - 每个普通骰组合的行为需求说明,包括奖励、倍率、提示、是否触发 Lucky Dice。
程序侧当前不建议为每个组合直接新增独立方法;策划需要提供的是“组合对应的玩法意图和参数”。程序会优先把这些意图配置到现有 matcher/action 体系中,只有现有通用 action 无法表达时,才新增新的通用 executor。