改变Sprite并保持相同的大小

时间:2014-06-14 20:37:31

标签: c# unity3d 2d

我正在使用统一的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);

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

如何修改宽度和高度:使用RectTransform.sizeDelta

此类脚本的示例

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.

More about sizeDeltas here

答案 2 :(得分:-2)

我会在脚本中公开两个公共变量,并带有一些默认值:

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

然后,每当你改变精灵时,设置宽度&amp;高度到那些预定义的值。