交互对象越多,越不能各写各的
游戏里到处都是可交互对象:NPC、宝箱、门、机关、采集点、传送门、任务物品、商店牌、剧情触发器。原型阶段,每个对象自己放一个 Area,玩家进入后显示提示,按键触发。功能多了之后,问题就会出现:多个对象重叠时提示谁?战斗中能不能交互?条件不足怎么提示?交互后要不要等服务端?离开范围时事务怎么处理?
可交互系统的目标,是把“玩家意图”和“对象行为”统一起来。对象实现交互接口,交互管理器负责候选收集、优先级、提示、输入和事务。这样新增宝箱或 NPC,不需要重写提示逻辑。
flowchart TD
A[玩家交互范围/射线] --> B[候选对象收集]
B --> C[条件和优先级评估]
C --> D[当前最佳交互对象]
D --> E[显示交互提示]
E --> F[玩家按交互键]
F --> G[提交交互请求]
G --> H{本地/服务端确认}
H -->|成功| I[执行表现/状态更新]
H -->|失败| J[提示原因]
交互接口要表达能力
每个可交互对象可以实现接口:get_interaction_prompt()、can_interact(actor)、get_priority(actor)、begin_interact(actor)、cancel_interact(actor)。提示、条件、优先级和执行分开。交互管理器不需要知道对象是门还是 NPC。
条件返回不应只是 bool。它应该带原因:距离不足、战斗中不可用、缺钥匙、任务未完成、今日次数已满。UI 可以根据原因显示灰提示或隐藏。玩家靠近锁门时,看到“需要铜钥匙”比没有提示更自然。
交互对象也要有类型和图标。NPC 对话、拾取、打开、进入、采集可以显示不同按键提示。类型不决定逻辑,只帮助 UI 表达。
候选优先级解决重叠问题
多个对象同时可交互很常见。NPC 站在门口,地上有掉落物,旁边有任务物品。交互管理器需要排序:距离、视线方向、对象优先级、任务相关、当前镜头焦点。不要让 Area 进入顺序决定提示。
优先级要可调。任务关键对象可以高于普通掉落,危险战斗中可以隐藏低优先级采集点。玩家手动切换目标也可以支持,比如按方向键在候选之间切换。
候选列表要稳定。玩家站着不动时,提示不应在两个对象之间闪烁。可以给当前对象一点粘滞时间,除非新对象优先级明显更高。
输入和提示要分平台
PC 上提示“按 E”,手柄显示按钮图标,移动端可能显示屏幕按钮。交互系统发出当前可交互对象,输入提示系统根据设备显示。对象不应该硬编码提示文本。
长按交互也要支持。有些采集或开门需要持续按住,提示要显示进度。玩家离开范围、受击、松开按键时取消。长按进度是交互事务的一部分,不是 UI 自己倒计时。
移动端触屏可以点击对象或点击交互按钮。交互管理器仍然统一处理候选和条件。
事务边界要清楚
打开普通门可能本地即可,领取宝箱奖励需要服务端确认,进入副本需要资源预检和网络请求。交互对象应声明交互模式:Instant、Hold、Request、SceneTransition。交互管理器根据模式处理锁定、等待和取消。
请求型交互要防重复。玩家按键后对象进入 pending 状态,提示变为处理中。服务端成功后更新状态,失败后恢复并显示原因。玩家离开范围时,是否取消请求要看业务。领取宝箱请求发出后,即使玩家走开也可能完成。
状态更新要回到模型。宝箱是否已开、门是否解锁、NPC 对话进度,不应只存在对象节点里。场景重载后,模型或存档要能恢复。
调试交互
交互问题很容易主观:“我明明对着门按了 E”。调试模式应显示候选列表、距离、优先级、不可交互原因、当前最佳对象和最近输入。看到这些数据,问题就清楚了:射线被挡、距离超了、条件不满足,还是优先级错。
编辑器校验也有用。可交互对象缺碰撞范围、缺 prompt、缺 persistent_id、缺配置时,构建前报错。否则进入游戏后才发现某个宝箱没有提示。
小结
Godot 可交互对象系统要把提示、条件、优先级和事务统一管理。对象实现接口,交互管理器收集候选并处理输入,UI 根据设备显示提示,业务状态回到模型。这样交互对象越多,玩家体验越一致,团队也不用为每种对象重写一套逻辑。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
我会给交互系统做一个测试场景,把 NPC、门、宝箱、掉落物和采集点堆在一起,测试优先级和提示稳定性。真实关卡里最容易出问题的,往往就是这种对象重叠区域。
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。