对照小练 D · 把合作防守改成 PvP 一对多
这一章解决:把合作防守项目改成 PvP 一对多时,先改 ADR 和字段表,再决定代码改动。
先看一下
合作防守是所有玩家一起打敌人。PvP 一对多换成两个阵营:1 名防守者守住目标,多名攻击者尝试在时间内摧毁目标。玩法看起来变化很大,但底层仍然是 PlayerObject 发请求,GameState 裁决阶段、目标和胜负。
这一章会拿到什么
- 一份 PvP 一对多的改造目标
- 一张字段替换表
- 一个胜负裁决片段
- 一份对照测试矩阵
依赖前面
- 第 46 章项目改造对照表
- 第 27 章不对称队伍
- 第 28 章旁观和补位策略
- 第 43 章体感优化边界
把合作防守改成「1 名防守者 vs 多名攻击者」。
攻击方目标:在倒计时结束前摧毁核心。防守方目标:守到时间结束。攻击方可以多人,防守方第一版固定 1 人。
这次小练只改结构,不给完整代码。目标是看出哪些字段保留,哪些字段替换。
| 合作防守 | PvP 一对多 |
|---|---|
teamId = 0 合作队 | TEAM_ATTACKER / TEAM_DEFENDER |
| EnemyObject | DefenseCore / 可选防守道具 |
enemyAliveCount | coreHp / coreDestroyed |
RESULT_ALL_TARGETS_CLEARED | RESULT_ATTACKERS_WIN |
RESULT_TIME_UP | RESULT_DEFENDER_WIN |
personalScore | 伤害贡献 / 防守贡献 |
teamScore[] | 攻击进度 / 防守奖励 |
PlayerObject 保留 teamId、roleId、currentHP、personalScore、请求字段。GameState 保留 phase、matchId、stateVersion、phaseStartServerTime、resultReason。删除或废弃 enemyAliveCount,换成核心目标状态。
胜负不再靠分数大小,而靠目标状态和时间。
private void TickPvpMatch(){ if (coreHp <= 0) { EndPvpMatch(RESULT_ATTACKERS_WIN); return; }
double elapsed = Networking.CalculateServerDeltaTime( Networking.GetServerTimeInSeconds(), phaseStartServerTime); if (elapsed >= matchDuration) { EndPvpMatch(RESULT_DEFENDER_WIN); return; }}攻击者的命中请求仍然走 PlayerObject。GameState Owner 或核心对象 Owner 裁决伤害是否合法,再写 coreHp。防守者不能直接把 coreHp 回满,必须通过请求触发修复、护盾或阶段技能。
PvP 一对多比合作防守更需要旁观规则。
| 场景 | 推荐处理 |
|---|---|
| INGAME 中迟入 | 默认旁观,下一局再分队 |
| 防守者离开 | P1 严重:暂停、选新防守者,或防守方判负 |
| 攻击者离开 | 从攻击方名单移除,比赛继续 |
| RESULT 中加入 | 直接看结算,下一局参与 |
第一版推荐:防守者离开时安全结束本局,resultReason=RESULT_DEFENDER_LEFT。更复杂的补位会牵涉公平性和角色权限,留给后续迭代。
PvP 里本地预演要更保守。合作 PvE 可以先播预估伤害;PvP 一对多里,攻击者看到「已经打掉核心」但 Owner 拒绝,会产生很强的冲突。
建议规则:按钮、音效、攻击动画可以本地先播;核心受伤数字、核心 HP 条、胜负提示等确认后再播。远端特效可以采样,但核心 HP 必须等同步字段。
挑一条试。
- 把防守者离开处理改成「自动从旁观者中选新防守者」。需要哪些字段?怎样避免旧防守者的权限残留?
- 把攻击目标从一个核心改成三个据点。
coreHp会变成什么结构?胜负裁决怎么改?
| 场景 | 预期 | 实际 |
|---|---|---|
| 1. 开局分队 | 1 名防守者,多名攻击者,旁观者不参与 | … |
| 2. 攻击者打核心 | 请求经 Owner 裁决,coreHp 下降,攻击者贡献增加 | … |
| 3. 核心归零 | RESULT_ATTACKERS_WIN,结算冻结 | … |
| 4. 时间到 | RESULT_DEFENDER_WIN,结算冻结 | … |
| 5. 防守者离开 | 按设计安全结束或进入补位流程,不让比赛卡死 | … |
| 6. INGAME 迟入 | 默认旁观,不影响当前胜负 | … |
| 7. 连续重开 3 局 | matchId 隔离旧局请求,队伍和权限不串局 | … |
- 能说明合作防守和 PvP 一对多共享哪些底层字段
- 能把
enemyAliveCount替换成核心目标状态 - 能写出攻击方和防守方不同的胜利条件
- 能说明防守者离开为什么是高优先级问题
- 能指出 PvP 体感预演比 PvE 更保守的原因
- 第 46 章 · 项目改造对照表:本小练的改造方法来源。
- 第 27 章 · 计分、奖励与结算进阶:不对称队伍和胜负计算。
- 第 28 章 · 观战、旁观、掉线后重入进阶:旁观和补位策略。
- 第 43 章 · 加入体感优化:PvP 体感预演边界。