要求(策划)
设计意图
为了解决传统Rigidbody控制器常见的“边缘掉落无法起跳(脑溢血操作)”、“起跳动作与物理位移脱节(滑步感)”以及“斜坡悬空”等痛点,本模块引入了土狼时间、动画事件驱动与贴地微重力机制,旨在打造具有“吸附感”和“高容错”的动作游戏3C体验。
3.2.1 核心机制与边界条件
① 土狼时间 (Coyote Time / 地面缓冲)
- 规则:当角色主动走下悬崖或离开平台边缘时,系统不立即切断“地面状态”,而是保留一个短暂的宽限期。
- 边界条件:
- 宽限期内(默认0.1s)按下跳跃,视为地面起跳,正常触发跳跃流程。
- 若角色是被击飞或获得向上初速度(
verticalVelocity > 0.1),则立即强制切断土狼时间,防止二次起跳。 - 宽限期结束后未起跳,角色进入下落(Fall)状态。
② 动画事件驱动起跳 (Anim-Event Driven Jump)
- 规则:按下跳跃键不直接赋予物理速度,而是先触发
JumpTrigger 播放前摇动画。 - 执行流:输入跳跃 -> 播放前摇 -> 动画播放到“发力帧” -> 触发代码
OnPlayerJump()-> 赋予真实物理初速度 -> 角色腾空。 - 限制:起跳后进入
jumpCooldown(0.5s),期间屏蔽所有跳跃输入。
③ 贴地微重力 (Sticky Gravity) - 规则:角色处于地面状态(
isGrounded == true)且未起跳时,不使用0作为垂直速度,而是强制施加-2 m/s的向下微重力。 - 目的:确保角色走下斜坡、跨越微小台阶时,胶囊体能紧紧“吸”住地面,杜绝物理引擎计算延迟导致的“下坡悬空”或“落地弹跳”现象。
3.2.2 策划配置表 (Inspector 暴露参数)
| 参数名 (代码变量) | 类型 | 默认值 | 调参指导与边界限制 |
|---|---|---|---|
jumpHeight |
Float | 1.5 |
跳跃绝对高度(米)。程序已做公式反推,改此值即可,勿直接改初速度。 |
jumpCooldown |
Float | 0.5 |
跳跃硬直冷却(秒)。若需实现“连跳”流派,需通过Buff将此值降为0。 |
groundBufferTime |
Float | 0.1 |
土狼时间(秒)。建议范围 0.08 ~ 0.15。>0.2s会导致明显的“空中二段跳”视觉Bug。 |
groundCheckDistance |
Float | 0.2 |
脚底射线长度(米)。注意:修改角色胶囊体高度/半径时,需同步微调此值。 |
gravity |
Float | -9.81 |
基础重力。若Boss战需要“厚重感”,可通过区域Trigger将此值临时改为 -15.0。 |
可以看看根据这些要求能不能写出来
需求分析和代码实现
从策划文字到落地中间有很大的挑战,这里我用加法原则,先保证基础功能,在往里做加法。
比如这里就可以先写基础的WSAD移动实现,然后加入简单跳跃功能,然后后优化跳跃做出地面缓冲,加入动画控制等。
1.基础平面控制WSAD控制逻辑
2.跳跃控制(需要自己实现重力和补足地面检查)先实现简单的跳跃。
3.加入动画控制
4.优化跳跃控制加入地面缓冲,跳跃冷却,跳跃中检测。
1 | using System.Collections; |
后续可优化内容(不定时更新)
1.根据项目需求加入更多的动画
说些什么吧!