【问题标题】:build a tiled big texture from other textures从其他纹理构建平铺的大纹理
【发布时间】:2014-02-04 13:05:48
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: unity3d textures


    【解决方案1】:

    创建大型平铺地图的正确方法是由较小的、大约屏幕大小的块组成。 Unity 不会正确绘制屏幕外的块。


    关于你关于复制到纹理的问题:我之前在 Unity 中没有这样做过,但是这个过程称为 Blitting,而 Unity 中恰好有一个方法称为 @ 987654322@。它采用源纹理并将其复制到目标纹理中,这听起来正是您正在寻找的。但是,它需要 Unity Pro :(

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

    【讨论】:

    • 糟糕的答案-但是,您说实际上正确的做法不是制作大精灵,而是并排放置很多方块???有很多例子……我听错了……
    • 不,它是正确的。如果你有足够多的 sprite-instance 来考虑世界的大小,你应该卸载(销毁)远离相机的 sprite,并在靠近它们时将它们重新加载(实例化)。
    【解决方案2】:

    好吧,经过更多搜索,我发现了 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多