Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改精灵并保持相同大小_C#_Unity3d_2d - Fatal编程技术网

C# 更改精灵并保持相同大小

C# 更改精灵并保持相同大小,c#,unity3d,2d,C#,Unity3d,2d,我正在用unity的2d特性编写一个游戏 我正在为玩家角色设计一种目录,我有一个游戏对象,里面有许多占位符图像。其目的是,当我实际加载这个游戏对象时,我将替换占位符图像的精灵,并显示我想要的内容 我的问题是,当我使用这样的代码更改精灵时 var ren = item1.GetComponentInChildren<SpriteRenderer>(); ren.sprite = Resources.Load<Sprite>("DifferentSprite");

我正在用unity的2d特性编写一个游戏

我正在为玩家角色设计一种目录,我有一个游戏对象,里面有许多占位符图像。其目的是,当我实际加载这个游戏对象时,我将替换占位符图像的精灵,并显示我想要的内容

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

    var ren = item1.GetComponentInChildren<SpriteRenderer>();

ren.sprite = Resources.Load<Sprite>("DifferentSprite");
var ren=item1.getComponentChildren();
ren.sprite=Resources.Load(“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);
var ren=item1.getComponentChildren();
Vector2 beforeSize=ren.transform.renderer.bounds.size;
ren.sprite=Resources.Load(“Day0/LampOn”);
Vector2 spriteSize=ren.sprite.bounds.size;
//获取所需大小和精灵大小比率之间的比率
Vector3 scaleMultiplier=新Vector3(beforeSize.x/spriteSize.x,beforeSize.y/spriteSize.y);
//将比例乘以此乘数
ren.transform.localScale=new Vector3(ren.transform.localScale.x*scaleMultiplier.x,ren.transform.localScale.y*scaleMultiplier.y);

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

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

然后,无论何时更改精灵,请将宽度和高度设置为预定义值。

如何修改宽度和高度:使用

此类型脚本的示例

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.

最后一个int表示像素密度,这是改变大小的原因。 这在我的项目中是固定的, 我的默认值是pixelPerUnit=256和unity
default=100
,所以它是2.56倍
告诉我这是否有帮助

从占位符图像获取宽度和高度属性,并将实际图像宽度和高度设置为该值。。。或者你可以创建一组全新的调整大小的图像,专门用于你的库存。我不知道如何设置宽度和高度,除非使用LocalScale。你只需使用size fitter组件,这都是自动的,除非我不知道如何设置宽度和高度。我已经玩了几个小时的localscale和ratios,还没有得到完整的答案
puzzle.Sprite = Sprite.Create(t, new Rect(0, 0, t.width, t.height),Vector2.one/2,256);