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

Unity中如何修改父GameObject的缩放而不影响子GameObject?

核心原因

Unity的变换层级默认是完全继承的,父对象的缩放会直接应用到所有子对象的变换计算中,所以修改玩家根对象的localScale.y时,挂载在其下的枪子对象必然会同步继承缩放,出现压扁效果。

可行解决方案

  • 调整对象层级结构(最优方案)
    重构玩家节点的层级,不要将武器直接挂载在玩家根对象下,在根对象下拆分两个平级的子节点:

    1. 角色身体容器:存放所有角色身体相关的模型、动画组件
    2. 武器容器:存放所有武器、枪械相关的对象
      下蹲操作时仅修改角色身体容器的localScale.y,同时调整玩家根对象上CapsuleCollider的height参数即可,武器容器和身体容器平级,完全不会受到缩放影响。
  • 子对象反向抵消缩放(适配不想改层级的场景)
    如果你暂时不想调整现有层级结构,可以在修改父对象缩放的同时,同步给枪对象的localScale做反向计算,抵消父级的缩放影响,参考代码示例:

    public Transform playerRoot;
    public Transform gun;
    public float crouchScale = 0.5f;
    
    void DoCrouch()
    {
        // 应用父对象下蹲缩放
        playerRoot.localScale = new Vector3(playerRoot.localScale.x, crouchScale, playerRoot.localScale.z);
        // 反向抵消枪的y轴缩放,保持枪的原始比例
        gun.localScale = new Vector3(gun.localScale.x, 1 / crouchScale, gun.localScale.z);
    }
    

    该方案弊端是如果有多个需要忽略父级缩放的子对象,需要逐一处理,嵌套层级过深时还可能出现计算误差。

  • 替换下蹲实现逻辑(无缩放方案)
    你也可以完全放弃缩放父对象的实现方式,通过以下操作实现下蹲效果,从根源避免缩放继承问题:

    1. 向下偏移角色模型的localPosition
    2. 调小CapsuleCollider.height参数,同时向下调整CapsuleCollider.center的y值
      该方案无需修改任何缩放属性,自然不会影响挂载在根对象下的武器显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:57:02