P-018 v0.1 交互系统 — PersistenceSubsystem 命名/语义修正(交互物消耗状态) #43
Notifications
Due Date
No due date set.
Blocks
#42 P-017 v0.1 交互系统 — ⑥交互物放置与Effect数据配置
starmen1265/ChildHood
Reference: starmen1265/ChildHood#43
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
任务信息
背景
UPersistenceSubsystem(Source/ChildHood/Interaction/PersistenceSubsystem.h/.cpp)中存在命名/语义误导问题:CollectedItemIDs及其方法IsItemCollected/MarkItemCollected的真实语义是"交互物消耗状态",用于配合InteractableComponent的bOneShot(一次性交互物)字段,记录某交互物是否已被触发消耗、防止重复交互。它与收集系统(Collection,CollectionCollectedIDs/GetCollectionState/SetCollectionState)是两套完全独立的数据,名字却都含 "Collected/收集",极易混淆。调用点确认:仅
InteractableComponent.cpp两处 C++ 调用(:102 MarkItemCollected、:128 IsItemCollected)。更糟的是文件内注释自相矛盾——既承认又否认:
.h:28分组标题=== 物品消耗状态 ===✅ 正确.h:55-56区分注释「CollectedItemIDs 记录交互物消耗状态」✅ 正确.h:18类头注释「CollectedItemIDs: 已收集物品 ID 集合」❌ 误导.h:30,34,68方法/成员注释「物品是否已被收集/标记为已收集」❌ 误导.cpp:18日志「物品已收集」❌ 误导引入真正 Collection 系统时已意识到此混淆(故加了 :55 区分注释),但未彻底改掉旧命名,留下半改的烂摊子。
预期产出
1. 语义重命名(建议命名,可按技术方案术语微调)
将"物品收集"语义统一改为"交互物消耗"语义:
CollectedItemIDs(UPROPERTY)ConsumedInteractableIDsIsItemCollected(ItemId)IsInteractableConsumed(InteractableId)MarkItemCollected(ItemId)MarkInteractableConsumed(InteractableId)ItemIdInteractableId命名最终由程序定夺,但必须与 Collection 系统的
CollectionCollectedIDs明确区分,避免 "Collected" 歧义。2. 同步修正误导注释/日志
.h:18类头注释:CollectedItemIDs: 已收集物品 ID 集合→ 反映消耗语义.h:30,34方法注释:「物品是否已被收集/标记为已收集」→ 改为消耗语义.h:68成员注释:「已收集物品 ID 集合」→ 改为消耗语义.cpp:7分组标题保留「物品消耗状态」(已正确).cpp:18日志「物品已收集」→ 改为「交互物已消耗」.h:54-56那段区分注释:重命名后两套数据名字已不冲突,可简化或删除冗余说明3. 调用点同步更新
InteractableComponent.cpp:102, :128两处调用同步改为新方法名。关联风险(执行前必须确认)
IsItemCollected/MarkItemCollected是UFUNCTION(BlueprintCallable),grep 仅显示 C++ 调用。需确认是否有蓝图节点调用(蓝图调用不在 C++ grep 范围)。若有,需同步更新蓝图。CollectedItemIDs是UPROPERTY()。需确认该字段是否参与存档序列化(SaveGame)。从当前代码看UPersistenceSubsystem为纯内存 GameInstanceSubsystem 持有,未见 USaveGame/序列化标记,但需程序最终确认——若有序列化,重命名字段需考虑旧存档兼容(或确认 v0.1 无需兼容旧存档)。验收标准
CollectedItemIDs/IsItemCollected/MarkItemCollected