从其他纹理构建平铺的大纹理

时间:2014-02-04 13:05:48

标签: unity3d textures

我正在制作一个统一的2D RTS游戏,我想为平铺地图使用大纹理(而不是很多纹理 - 出于记忆的原因......)。

平铺地图应该在运行时随机生成,所以我不想保存纹理并上传它。我希望生成地图,然后从一组纹理资源构建它。

所以,我有一些草/森林/山丘等的瓷砖纹理,在我随机生成地图后,我需要在我的大地图纹理上绘制那些小纹理,所以我将它用作我的地图。

  1. 如何从其他纹理上的资源中绘制纹理?我看到只有一个Get / SetPixel函数......所以我可以使用它将所有像素逐个复制到大纹理,但有更容易的东西吗?
  2. 我的地图解决方案是否正常? (从并排创建大量纹理贴砖更好吗?还有其他更好的解决方案吗?)

2 个答案:

答案 0 :(得分:1)

嗯,经过更多搜索,我发现了Get / SetPixel s

Texture2D sourceTex = //get it from somewere        

var pix = sourceTex.GetPixels(x, y, width, height); // get the block of pixels
var destTex = new Texture2D(width, height); // create new texture to copy the pixels to it
destTex.SetPixels(pix);
destTex.Apply(); // important to save changes

答案 1 :(得分:1)

创建大型平铺地图的正确方法是从较小的,近似屏幕大小的块中组合它。 Unity将正确地无法绘制屏幕外的块。


至于你关于复制到纹理的问题:我之前在Unity中没有这样做过,但是这个过程叫做 Blitting ,而恰好是Unity中的一个方法叫Graphics.Blit()。它需要一个源纹理并将其复制到目标纹理中,这听起来就像您正在寻找的那样。但是,它需要Unity Pro :(

还有SetPixels(),但听起来这个函数在CPU而不是GPU上进行处理,因此它将非常慢/资源密集。