Unity2D蹲伏问题:按住C键角色穿入地面Collider
问题解决:蹲伏时角色穿入地面Collider
问题原因
当前代码仅修改了Collider的尺寸(size),未同步调整Collider的中心位置。蹲伏时Collider尺寸缩小后,若中心仍保持角色原位置,Collider底部会向下偏移,与地面Collider重叠,进而出现穿模现象。
解决方案
修改Collider尺寸的同时调整其中心位置,确保蹲伏状态下Collider底部不会穿透地面:
- 在脚本中定义站立、蹲伏状态的Collider中心参数:
public Vector2 standing_center; // 在Inspector面板设置站立时的Collider中心 public Vector2 crouching_center; // 在Inspector面板设置蹲伏时的Collider中心
- 更新蹲伏逻辑代码,添加中心位置切换:
//Crouch + Animation if (Input.GetButtonDown("Crouch")) { spriteRenderer.sprite = crouching; player_collider.size = crouching_size; player_collider.center = crouching_center; // 添加此行调整Collider中心 anim.SetBool("crouch_ing", true); } if (Input.GetButtonUp("Crouch")) { spriteRenderer.sprite = standing; player_collider.size = standing_size; player_collider.center = standing_center; // 添加此行恢复原中心 anim.SetBool("crouch_ing", false); } //--------------------
- 在Unity编辑器中配置参数:
- 选中角色Collider组件,先切换到站立状态,调整
size和center,确保Collider底部刚好贴合地面,将参数赋值给standing_size和standing_center - 切换到蹲伏状态,缩小
size后向上偏移center,保证Collider底部不低于地面,将参数赋值给crouching_size和crouching_center
额外优化建议
- 若使用
CharacterController(3D)或第三方2D角色控制器,建议直接修改控制器的height和center,这类组件会自动处理碰撞边界逻辑,减少手动调整的误差 - 若调整后仍存在穿模,可开启Collider的持续碰撞检测(Continuous Collision Detection),避免状态切换时的碰撞遗漏
内容的提问来源于stack exchange,提问作者Dhiaa Xdd
相关产品推荐
相关产品推荐

