Skip to content

feat: 宠物行为权重系统 - #30

Merged
ULookup merged 1 commit into
mainfrom
feat/pet-behavior-weight-system
Aug 20, 2026
Merged

feat: 宠物行为权重系统#30
ULookup merged 1 commit into
mainfrom
feat/pet-behavior-weight-system

Conversation

@ULookup

@ULookup ULookup commented Aug 20, 2026

Copy link
Copy Markdown
Owner

概述

按策划文档《数值规则_策划补齐版》(25 节,本地文档未随本 PR 提交)完成公寓场景双宠数值系统的设计与实现:行为权重决策、双宠交流、离线规则,并把亲密度接入「宠物状态」面板。

核心公式(§25)FinalWeight = BaseWeight × PersonalityMultiplier × EnergyMultiplier × MoodMultiplier × RepeatMultiplier

改动内容

行为权重系统(§1-§13、§22-§25)

  • 新增 Pet/Behavior/BehaviorConfigSO(每宠一张行为表)、BehaviorWeightCalculator(四倍率纯函数)、BehaviorSelector(精力硬规则过滤 → 冷却 → 四倍率 → 归一化加权随机;≤5 精力强制睡觉绕冷却防死锁;全零兜底待机)、BehaviorRuntimeState(最近 3 行为 + 冷却表)
  • PetController 接入行为驱动循环:非玩家可控宠按权重自主行动,复用宠物 prefab 的手动交互绑定(BindingInteractionType);RandomWander 新增外部目标模式
  • StatTickService 按 §11/§13 重写:清醒每 3 分钟 -1 精力、睡觉停止自然衰减、心情每 5 分钟向 50 回归 1 点(不越过)
  • 配置资产:BehaviorConfig_Angel/Devil(含性格标签/偏好精力/结算增量/冷却)、PetStateValueConfig 字段更新、PersonalityMatrix 初始值按 §23(文档 0-100 → 内部 -1..1);双宠 prefab 接上 _config(此前悬空)与 _behaviorConfig

交流系统(§14-§19)

  • 新增 Pet/Social/PetSocialService:对子亲密度(初始 30)、NEED_SPACE/WARM/NORMAL 回应判定(对方 E<30 或 M<30 优先)、§17 结算表、300s 防刷冷却(只挡亲密度,心情/精力照常结算)、§19 特殊事件旁路;实现 IPersistentServicepet_social
  • 点击宠物触发交流(被点击=对方,另一只=发起者,§16 发起者 E<10 禁止),NEED_SPACE/精力不足时气泡反馈

离线规则(§20)

  • PetRuntimeSaveService 存档 v2 附保存时刻;恢复时心情按离线时长向 50 回归(每 5 分钟 1 点、最多 6 点,即文档示例 Mood 80 离线 2h → 74),精力不衰减;v1 存档兼容

UI 接入

  • ProfilePanelStub 关系栏改读 IPetSocialService.Friendship(显示 数值·阶段标签 + 进度条),订阅 FriendshipChanged;废弃无写入路径的 PetRuntimeData.Relation 显示源

测试

  • 新增/重写 EditMode 测试 5 个文件、40+ 用例:四倍率数值与边界、硬规则/冷却/重复倍率优先级、加权分布(种子 RNG 3:1 ±10%)、社交全表/防刷/持久化往返、离线回归(含文档示例)/v1 兼容
  • ⚠️ 请在本机 Test Runner 跑一遍 GeminiLab.Tests.EditMode 后再合并

验证步骤

  1. Test Runner 全绿
  2. 公寓场景 Play:观察非玩家可控宠按性格自主行动(天使多读书/浇花/弹琴,恶魔多打游戏/画画);精力 ≤5 时强制去睡觉
  3. 侧边栏「宠物状态」页:心情/精力条实时变化,关系栏显示 30·普通;点击宠物交流后变 31·普通,5 分钟内再点不变(防刷)
  4. 精力 >70 时宠物不会主动去睡觉

行为权重系统(§1-§13、§22-§25):
- 新增 Behavior/ 模块:BehaviorConfigSO(每宠一张行为表)、
  BehaviorWeightCalculator(性格/精力/心情/重复四倍率纯函数)、
  BehaviorSelector(硬规则过滤 + 归一化加权随机 + 强制睡觉/兜底待机)、
  BehaviorRuntimeState(最近 3 行为 + 冷却表)
- PetController 接入行为驱动循环:非玩家可控宠按权重自主行动,
  复用手动交互绑定(BindingInteractionType);RandomWander 支持外部目标
- StatTickService 按 §11/§13 重写:清醒 3 分钟 -1 精力、睡觉停止自然衰减、
  心情每 5 分钟向 50 回归 1 点
- 配置资产:BehaviorConfig_Angel/Devil、PetStateValueConfig 字段更新、
  PersonalityMatrix 初始值按 §23(0-100 → 内部 -1..1);双宠 prefab 接线

交流系统(§14-§19):
- 新增 Social/PetSocialService:对子亲密度(初始 30)、
  NEED_SPACE/WARM/NORMAL 回应判定、结算表、300s 防刷冷却、
  特殊事件旁路;IPersistentService(pet_social)
- PetClickReactionController 点击触发交流(被点击=对方,另一只=发起者),
  NEED_SPACE/精力不足时气泡反馈

离线规则(§20):
- PetRuntimeSaveService 存档 v2 附保存时刻,恢复时心情按离线时长
  向 50 回归(每 5 分钟 1 点,最多 6 点),精力不衰减;v1 兼容

UI 接入:
- ProfilePanelStub 关系栏改读 IPetSocialService.Friendship(数值+阶段标签),
  订阅 FriendshipChanged;废弃无写入路径的 Relation 显示源

架构修正:
- PersonalityVector / IPersonalityEvolutionService 上移至 Pet 程序集根
  (命名空间不变),解除 Pet ⇄ Personality 程序集循环引用

测试:四倍率/选择器/Tick/社交/离线 40+ EditMode 用例(含文档示例:
Mood 80 离线 2h → 74)
@ULookup
ULookup force-pushed the feat/pet-behavior-weight-system branch from 84fe8c6 to a3c3f9d Compare August 20, 2026 14:58
@ULookup ULookup changed the title feat: 宠物行为权重系统 + 交流系统(数值规则_策划补齐版 §1-§25) feat: 宠物行为权重系统 Aug 20, 2026
@ULookup
ULookup merged commit 6f499b3 into main Aug 20, 2026
3 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant