我正在制作一个统一的2D RTS游戏,我想为平铺地图使用大纹理(而不是很多纹理 - 出于记忆的原因......)。
平铺地图应该在运行时随机生成,所以我不想保存纹理并上传它。我希望生成地图,然后从一组纹理资源构建它。
所以,我有一些草/森林/山丘等的瓷砖纹理,在我随机生成地图后,我需要在我的大地图纹理上绘制那些小纹理,所以我将它用作我的地图。
答案 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上进行处理,因此它将非常慢/资源密集。