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

Unity2D:实现正方形仅从上到下缩小的非Canvas氧气条效果

解决非Canvas对象氧气条从上到下缩小的问题

核心思路

默认缩放是围绕对象的轴心(Pivot)进行的,你的正方形轴心在中心,所以缩放时会上下同时缩小。要实现仅从上到下缩小且整体底部保持原位,需要同步调整Y轴缩放和Y轴位置:每缩小一点Y轴缩放,就将对象向下移动对应距离,抵消轴心缩放带来的位置偏移。

修改后的完整代码

using UnityEngine;

public class OxygenBar : MonoBehaviour
{
    public Transform oxygenOverlay; // 拖拽你的正方形对象到这里
    private float remainingAir = 100f; // 当前剩余氧气
    private float defaultYScale; // 初始Y轴缩放值
    private float defaultPosY; // 初始Y轴位置
    private readonly float maxAir = 100f; // 氧气最大值

    void Start()
    {
        // 记录初始状态
        defaultYScale = oxygenOverlay.localScale.y;
        defaultPosY = oxygenOverlay.localPosition.y;
    }

    void AdjustOxygenBar()
    {
        // 计算当前Y轴缩放比例
        float currentYScale = defaultYScale * (remainingAir / maxAir);
        oxygenOverlay.localScale = new Vector3(oxygenOverlay.localScale.x, currentYScale, oxygenOverlay.localScale.z);

        // 计算并调整Y轴位置,让底部保持原位
        // 偏移量 = (当前高度 - 初始高度) / 2,这里高度用缩放值代替(本地空间下)
        float newPosY = defaultPosY + (currentYScale - defaultYScale) / 2f;
        oxygenOverlay.localPosition = new Vector3(oxygenOverlay.localPosition.x, newPosY, oxygenOverlay.localPosition.z);
    }

    // 示例:模拟氧气减少,你可以替换成实际的氧气消耗逻辑
    void Update()
    {
        if (remainingAir > 0)
        {
            remainingAir -= Time.deltaTime * 10f;
            AdjustOxygenBar();
        }
    }
}

原理说明

  1. 初始状态记录:在Start方法里保存对象初始的Y轴缩放和位置,作为基准值。
  2. 缩放计算:用剩余氧气占最大值的比例,乘以初始Y缩放,得到当前的Y轴缩放值。
  3. 位置调整:
    • 初始时,对象轴心在中心,底部到轴心的距离是defaultYScale / 2。
    • 缩放后,新的底部到轴心的距离是currentYScale / 2。
    • 要让底部位置不变,需要将轴心向下移动(defaultYScale - currentYScale) / 2,对应代码里的newPosY = defaultPosY + (currentYScale - defaultYScale) / 2f(等价于defaultPosY - (defaultYScale - currentYScale)/2)。

可选优化方案

如果可以修改模型的轴心,直接将正方形的Pivot设置为底部(在Unity编辑器里选中对象,点击Inspector里的Pivot按钮,切换到Local模式,拖动轴心到底部),这样只需要调整Y轴缩放,不需要修改位置就能实现从上到下缩小的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:40:32