You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity2D蹲伏问题:按住C键角色穿入地面Collider

问题解决:蹲伏时角色穿入地面Collider

问题原因

当前代码仅修改了Collider的尺寸(size),未同步调整Collider的中心位置。蹲伏时Collider尺寸缩小后,若中心仍保持角色原位置,Collider底部会向下偏移,与地面Collider重叠,进而出现穿模现象。

解决方案

修改Collider尺寸的同时调整其中心位置,确保蹲伏状态下Collider底部不会穿透地面:

  1. 在脚本中定义站立、蹲伏状态的Collider中心参数:
public Vector2 standing_center; // 在Inspector面板设置站立时的Collider中心
public Vector2 crouching_center; // 在Inspector面板设置蹲伏时的Collider中心
  1. 更新蹲伏逻辑代码,添加中心位置切换:
//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);
}
//--------------------
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 15:24:40