gpt4 book ai didi

c# - 将 Sprite 对象数组组合成一个 Sprite - Unity

转载 作者:可可西里 更新时间:2023-11-01 08:27:59 25 4
gpt4 key购买 nike

我在 Unity 中有一组 Sprite 对象。它们的大小取决于加载的图像。我想像一张平铺 map 一样将它们并排组合成一个图像。我希望它们的布局就像您正在形成一行图像一样,一个接一个。 (注意:不是一个在另一个之上)我怎样才能做到这一点?

我合并的原因(仅供那些想知道的人)是因为我使用的是 polygon2D Collider。由于并排使用多个碰撞器时会发生一些奇怪的行为,因此我决定在添加一个大型多边形碰撞器之前先合并图像。请注意,这些事情发生在运行时。我不能只创建一个大图像并加载它,因为图像的顺序仅在运行时确定。

我希望能得到一些帮助。谢谢。

最佳答案

PackTextures method在 Texture2D 类中,但由于它使你的图集变成正方形,你不能制作一行 Sprite ,所以还有另一种方法可以通过读取图像的像素并将它们设置为新图像来实现,这在运行时确实很昂贵但是给出了你的结果。

// Your textures to combine
// !! After importing as sprite change to advance mode and enable read and write property !!
public Sprite[] textures;

public Texture2D atlas; // Just to see on editor nothing to add from editor
public Material testMaterial;
public SpriteRenderer testSpriteRenderer;

int textureWidthCounter = 0;
int width,height;
private void Start () {
width = 0;
height = 0;

foreach(var t in textures) {
width += t.texture.width;

if (t.texture.height > height)
height = t.texture.height;
}

atlas = new Texture2D(width,height, TextureFormat.RGBA32,false);

for (int i = 0; i < textures.Length; i++)
{
int y = 0;

while (y < atlas.height) {
int x = 0;

while (x < textures[i].texture.width ) {
if (y < textures[i].texture.height)
atlas.SetPixel(x + textureWidthCounter, y, textures[i].texture.GetPixel(x, y)); // Fill your texture
else atlas.SetPixel(x + textureWidthCounter, y,new Color(0f,0f,0f,0f)); // Add transparency
x++;
}
y++;
}
atlas.Apply();
textureWidthCounter += textures[i].texture.width;
}

// For normal renderers
if (testMaterial != null)
testMaterial.mainTexture = atlas;

// for sprite renderer just make a sprite from texture
var s = Sprite.Create(atlas, new Rect(0f, 0f, atlas.width, atlas.height), new Vector2(0.5f, 0.5f));
testSpriteRenderer.sprite = s;

// add your polygon collider
testSpriteRenderer.gameObject.AddComponent<PolygonCollider2D>();
}

关于c# - 将 Sprite 对象数组组合成一个 Sprite - Unity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25545506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com