平台游戏角色下蹲功能异常,如何实现松开S键自动复位站立?
问题根因
- 现有逻辑未添加下蹲状态标记,每次按下S键都会重复扣减Y轴缩放值,导致角色尺寸持续缩小
- 仅监听了S键按下事件,未监听S键抬起事件,无法触发站立恢复逻辑
修复方案
首先新增两个成员变量,分别存储角色站立时的原始缩放值,以及标记当前下蹲状态,避免硬编码数值和重复触发逻辑:
public GameObject Player; // 存储站立时的原始Y轴缩放 private float originalScaleY; // 标记当前是否处于下蹲状态 private bool isCrouching = false; private void Start() { // 初始化时记录角色原始Y轴缩放,适配任意初始尺寸的角色 originalScaleY = Player.transform.localScale.y; } void Crouch() { // 按下S键且未处于下蹲状态时,触发下蹲 if(Input.GetKeyDown(KeyCode.S) && !isCrouching) { Player.transform.localScale = new Vector3( Player.transform.localScale.x, originalScaleY - 0.3f, Player.transform.localScale.z ); isCrouching = true; } // 松开S键且处于下蹲状态时,恢复站立 if(Input.GetKeyUp(KeyCode.S) && isCrouching) { Player.transform.localScale = new Vector3( Player.transform.localScale.x, originalScaleY, Player.transform.localScale.z ); isCrouching = false; } }
额外优化提示
- 仅修改
localScale只会改变角色的视觉表现,如果你用了碰撞体或者CharacterController组件,需要同步修改对应组件的尺寸参数,否则会出现视觉下蹲但碰撞体积不变的穿模、卡墙问题 - 0.3f的下蹲缩放差值可以根据你的角色实际尺寸调整,建议提取为公共变量方便在Inspector面板直接修改
内容的提问来源于stack exchange,提问作者Noah Brewer
相关产品推荐
相关产品推荐

