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

如何在Unity与C#中实现2D物体下蹲效果?

2D物体下蹲(Y轴缩小)实现方案

核心逻辑

别硬套冲刺代码的逻辑,下蹲本质就是修改物体Transform组件的**本地缩放(localScale)**的Y值,直接针对Transform操作就行。

基础可用代码

直接把这个脚本挂到你的2D物体上,调整参数就能用:

using UnityEngine;

public class PlayerCrouch : MonoBehaviour
{
    [Header("下蹲参数")]
    public float defaultYScale = 1f;       // 站立时的Y轴缩放
    public float crouchYScale = 0.5f;      // 下蹲时的Y轴缩放
    public KeyCode crouchKey = KeyCode.LeftControl; // 触发下蹲的按键

    private Transform playerTrans;

    void Start()
    {
        // 提前获取Transform,避免每帧调用GetComponent浪费性能
        playerTrans = GetComponent<Transform>();
    }

    void Update()
    {
        // 按住按键时下蹲,松开恢复
        if (Input.GetKey(crouchKey))
        {
            // 只修改Y轴,保持X、Z轴缩放不变
            playerTrans.localScale = new Vector3(playerTrans.localScale.x, crouchYScale, playerTrans.localScale.z);
        }
        else
        {
            playerTrans.localScale = new Vector3(playerTrans.localScale.x, defaultYScale, playerTrans.localScale.z);
        }
    }
}

你之前大概率踩的坑

  • 找错了修改对象:如果之前拿SpriteRenderer或者其他组件改缩放,肯定没用——缩放属性属于Transform,不是渲染组件。
  • 用错了缩放属性:误改transform.scale(世界空间缩放)而不是localScale(本地空间缩放),如果物体有父物体,世界缩放会受父物体影响导致效果异常。
  • 输入逻辑错了:用GetKeyDown(只触发一次)代替GetKey(持续检测按住),导致缩放只跳一下就停了。
  • 平滑过渡搞砸了:如果想做渐变下蹲,直接赋值改成插值就行,比如把Update里的替换成:
if (Input.GetKey(crouchKey))
{
    float targetY = crouchYScale;
    playerTrans.localScale = Vector3.Lerp(playerTrans.localScale, new Vector3(playerTrans.localScale.x, targetY, playerTrans.localScale.z), Time.deltaTime * 5f);
}
else
{
    float targetY = defaultYScale;
    playerTrans.localScale = Vector3.Lerp(playerTrans.localScale, new Vector3(playerTrans.localScale.x, targetY, playerTrans.localScale.z), Time.deltaTime * 5f);
}

无报错但没效果的排查点

  • 确认脚本已经挂到目标2D物体上。
  • 检查defaultYScale和crouchYScale是不是设了不同的值(别都是1)。
  • 看下蹲按键是不是和代码里的设置一致(比如你按的是右Ctrl,但代码里设的左Ctrl)。
  • 如果物体有父物体,暂时把父物体缩放改成(1,1,1)试试,避免父缩放干扰本地缩放。

内容的提问来源于stack exchange,提问作者stab

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 21:18:15