我正在使用统一的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);
答案 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.
答案 2 :(得分:-2)
我会在脚本中公开两个公共变量,并带有一些默认值:
public int placeholderWidth = 80;
public int placeholderHeight = 80;
然后,每当你改变精灵时,设置宽度&amp;高度到那些预定义的值。