改变雪碧和保持相同的大小

本文关键字:改变 | 更新日期: 2023-09-27 18:08:34

我正在使用unity的2d功能编写一款游戏。

我正在为玩家角色设计一种库存,并且我有一个带有许多占位符图像的游戏对象。这样做的目的是,当我真正加载这个游戏对象时,我将替换占位符图像的精灵,并显示我想要的内容。

我的问题是,当我使用这样的代码改变精灵

    var ren = item1.GetComponentInChildren<SpriteRenderer>();
ren.sprite = Resources.Load<Sprite>("DifferentSprite");

加载的图像是正确的,但是缩放适用于新的精灵。问题在于这些精灵的大小各不相同。因此,虽然原始占位符图像占用了一个小正方形,但替换的图像可能很小或很大,足以覆盖整个屏幕,这取决于实际png的大小。

我基本上想让精灵取代另一个并缩放自己,使其具有与占位符图像相同的宽度和高度。我该怎么做呢?

编辑-我试过玩弄比率。虽然还不够完美,但已经很接近了。

    var ren = item1.GetComponentInChildren<SpriteRenderer>();
    Vector2 beforeSize = ren.transform.renderer.bounds.size;
    ren.sprite = Resources.Load<Sprite>("Day0/LampOn");
    Vector2 spriteSize = ren.sprite.bounds.size;
    //Get the ratio between the wanted size and the sprite's size ratios
    Vector3 scaleMultiplier = new Vector3 (beforeSize.x/spriteSize.x, beforeSize.y/spriteSize.y);
    //Multiple the scale by this multiplier
    ren.transform.localScale = new Vector3(ren.transform.localScale.x * scaleMultiplier.x,ren.transform.localScale.y * scaleMultiplier.y);

改变雪碧和保持相同的大小

puzzle.Sprite = Sprite.Create(t, new Rect(0, 0, t.width, t.height),Vector2.one/2,256);

最后一个int是用于pixelperUnity的,它是改变大小的原因。它在我的项目中是固定的,我的默认pixelPerUnit=256和统一default = 100,所以它大2.56倍告诉我是否有帮助

如何修改宽度和高度:使用recttransform . sizeelta .

该类型脚本的示例

Vector3 originalDelta = imageToSwap.rectTransform.sizeDelta; //get the original Image's rectTransform's size delta and store it in a Vector called originalDelta
imageToSwap.sprite = newSprite; //swap out the new image
imageToSwap.rectTransform.sizeDelta = originalDelta; //size it as the old one was.

更多关于sizeltas的信息在这里

我将在脚本中公开两个公共变量,使用一些默认值:

public int placeholderWidth = 80;
public int placeholderHeight = 80;

然后,当你改变精灵时,设置宽度&