玩家角色切换与重生
返回总览。玩家控制脚本管理身份、世界状态和表现的接续;移动、战斗输入等实时底层能力仍由原生玩家/Ped 系统执行。
1. 身份、实体与镜头三个对象#
角色身份决定剧情、能力、电话和财产;Ped 句柄指向当前世界实体;玩家选择器控制选择界面及切换流程。它们会共同变化,但不应被当成一个变量。
player_controller.sc 创建/移除环境中的主角,监控环境主角、保存车辆、当前角色可用任务和过场实体。[S1] 非当前操作主角仍可能作为环境角色存在;切换不只是替换模型,也要处理他在世界中的位置、车辆和正在做的事。
2. selector 是模式协调器#
selector.sc 管理 UI 资源、统计显示、ambient selector、在线 quicklaunch、重生 failsafe 和清理。[S2] 因为它跨模式常驻,切换目标可能是另一位单机角色,也可能进入在线流程。
这里的实际切换由 Native/原生系统配合完成;脚本负责流程选择、角色条件、场景资源及恢复。切换阶段不能随意保存还未稳定的角色状态,存档控制器对此有专门延迟/拒绝分支。
3. 生活切入场景制造“角色一直在生活”的感觉#
player_timetable_scene.sc 接收 PLAYER_TIMETABLE_SCENE_STRUCT,包含道路/区域处理、角色录制载具、切换场景对白、同步镜头退出和角色任务混合退出。[S3]
这类内容把切换目标摆在一个已有动作中:开车、谈话或其他日常行为,随后逐步把控制交给玩家。技术重点是接缝:场景镜头回到 gameplay camera、同步动作退出、预录车辆改为可控制车辆、道路和区域覆盖撤销。
它是有限场景模板和状态选择的组合,不足以证明所有离屏主角始终在完整实时模拟自己的日程。报告中的“生活感”是玩家可见效果,不能反推全地图持续仿真。
4. 重生分离死亡表现与状态重建#
respawn_controller.sc 以等待死亡/被捕、等待重生、执行重生例程等阶段组织,分别处理死亡/被捕过场、非任务重生效果、玩家状态清理和重生菜单。[S4]
它需要知道玩家是否接受检查点重试。源码中的 CLEANUP_PLAYER_STATE_ON_RESPAWN 会对服装/特殊物品等区分 replay 情况:普通医院/警局恢复不能覆盖正在恢复任务检查点的状态。Replay/replay_controller.sc 负责失败屏幕及重试/跳过选择,不是录像编辑器。[S5]
在线死亡又有独立语义:任务可能继续,玩家进入观战或按模式规则重生;原生 GtaThread 明确不把网络死亡自动当作单机 force-cleanup。不能将 SP 重生控制器整体当成所有在线重生的唯一实现。
5. 特殊状态复用基础能力#
animal_controller 通过 peyote 拾取进入动物身份,处理镜头/模型/死亡/恢复主角和收集进度。[S6] 导演模式也会交换模型和角色,但拥有不同任务占用与保存规则。醉酒、服装、特殊能力等脚本则在正常角色流程上叠加局部状态。
这些机制共同要求:临时能力和模型变化可撤销;终止路径知道应恢复哪个身份;与任务、手机、存档、载具和镜头的占用不能互相覆盖。扩展特殊玩家模式时,应明确正常退出、死亡退出、切在线退出和强制清理四种结果。
源码证据#
| 编号 | 位置 |
|---|---|
| [S1] | player_controller.sc L1812/2177 主角实体;L2275 车辆;L2730 任务;L3126 过场 |
| [S2] | selector.sc L194/277 在线;L745 UI;L2942 failsafe;L3003 ambient |
| [S3] | player_timetable_scene.sc L620 清理;L6930 切换;L7138 对话;L7925/8048 接缝 |
| [S4] | respawn_controller.sc L118 清理;L436 效果;L619/903 过场;L1148 重生 |
| [S5] | replay_controller.sc L1007–1070 失败/重试上下文 |
| [S6] | animal_controller.sc L2399 恢复玩家;L2697 动物切换;L3071 重生 |
[S1]: <../../../GTAV Source/script/dev_ng/singleplayer/scripts/playercontrol/player_controller.sc> [S2]: <../../../GTAV Source/script/dev_ng/singleplayer/scripts/selectorcontrol/selector.sc> [S3]: <../../../GTAV Source/script/dev_ng/singleplayer/scripts/playercontrol/player_timetable_scene.sc> [S4]: <../../../GTAV Source/script/dev_ng/singleplayer/scripts/respawncontrol/respawn_controller.sc> [S5]: <../../../GTAV Source/script/dev_ng/singleplayer/scripts/Replay/replay_controller.sc> [S6]: <../../../GTAV Source/script/dev_ng/singleplayer/scripts/animal_controller/animal_controller.sc>