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

Unity 2D矩形单侧缩放问题求助:当前矩形无法正常移动

解决2D矩形单侧缩放的问题

嘿,我懂你想实现的效果——让矩形从单侧(比如左/右边缘)往内缩放,而不是从中心往两边缩对吧?当前代码的问题出在没利用好**锚点/轴心(Pivot)**这个关键设置,而且手动平移的计算逻辑也没跟上缩放的本质~

问题根源分析

你现在的代码里,每次缩小x轴缩放的同时向x方向平移,但默认情况下,2D物体(不管是UI的RectTransform还是Sprite)的Pivot都在中心位置。这意味着缩放操作会从中心向两边同步缩小,你手动加的平移只能勉强抵消一部分偏移,自然没法实现真正的单侧缩放效果。

最优解决方案:调整Pivot + 简化代码

最直接的方式是先调整物体的轴心,让缩放围绕你想要的单侧进行,之后只需要单纯调整缩放值就行,完全不用手动平移。

分两种场景处理:


1. 如果是UI矩形(比如Image组件)
  • 第一步:在Inspector里选中你的HungerRectangle,找到它的RectTransform组件,把Pivot的X值改成对应方向:
    • 想从右侧往左缩 → 把Pivot的X设为1(Y值保持0.5不变)
    • 想从左侧往右缩 → 把Pivot的X设为0
  • 第二步:修改代码,去掉多余的Translate操作,同时用Time.deltaTime让缩放速度和帧率无关:
public RectTransform HungerRectangle; // 注意这里要声明为RectTransform而非Transform
public float HungerRectangleScaleDelay; // 建议改成每秒缩放的量,比如0.5f

void Update() 
{
    MakeHungerRectangleScaleDown();
}

public void MakeHungerRectangleScaleDown () 
{
    Vector3 currentScale = HungerRectangle.localScale;
    // 限制缩放最小值为0,避免出现负缩放的异常
    currentScale.x = Mathf.Max(currentScale.x - HungerRectangleScaleDelay * Time.deltaTime, 0f);
    HungerRectangle.localScale = currentScale;
}

2. 如果是2D Sprite物体(比如带SpriteRenderer的游戏对象)
  • 第一步:在Inspector里找到SpriteRenderer组件,修改Pivot的X值:
    • 从右侧往左缩 → X设为1
    • 从左侧往右缩 → X设为0
  • 第二步:代码逻辑和UI场景类似,只是用Transform即可:
public Transform HungerRectangle;
public float HungerRectangleScaleDelay;

void Update() 
{
    MakeHungerRectangleScaleDown();
}

public void MakeHungerRectangleScaleDown () 
{
    Vector3 currentScale = HungerRectangle.localScale;
    currentScale.x = Mathf.Max(currentScale.x - HungerRectangleScaleDelay * Time.deltaTime, 0f);
    HungerRectangle.localScale = currentScale;
}

为什么不用手动平移?

如果坚持不想改Pivot,也可以通过计算平移距离来模拟,但这样需要记录初始宽度,每次缩放都要重新计算偏移,逻辑更复杂,远不如调整Pivot来得直观可靠。比如初始宽度是originalWidth,每次x缩放减少deltaScale,需要平移的距离是(originalWidth * deltaScale) / 2,但这种方式容易因为数值精度问题出现偏移,不推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 21:02:32