Unity3d在运行时拆分Texture2d

时间:2015-11-10 11:36:18

标签: unity3d split runtime texture2d

我正在创建一个移动绘画应用程序。我有两个纹理(Texture2D),它是图像的模板和颜色图。

此颜色贴图包含玩家可以绘制的模板的每个区域的唯一颜色。

我需要有几个其他纹理,颜色贴图中每个唯一颜色一个纹理。

目前我正在尝试使用GetPixels作为颜色贴图,并使用字典,检查每个像素。

如果此字典中没有颜色作为键值,请使用坐标创建带有SetPixel的新纹理 如果有一个颜色作为键,则使用键和SetPixel获取纹理,使用坐标来获得此纹理。

但是当我运行时,即使我的电脑开始极度滞后,也没有关于手机的消息。

有更好的方式吗?

为了帮助您可视化问题,我添加了颜色贴图,我需要分割的纹理。 enter image description here

2 个答案:

答案 0 :(得分:0)

我没有看到一个神奇的快速方法,但这里有一些提示可能会有所帮助:

  • 尝试使用GetPixels32(和SetPixels32)而不是简单的GetPixels - 返回值不是Color而是使用字节而不是浮点的Color32,它应该更快。请参阅http://docs.unity3d.com/ScriptReference/Texture2D.SetPixels32.html http://docs.unity3d.com/ScriptReference/Texture2D.GetPixels32.html
  • 不要为每个像素调用SetPixel,这真的很慢。相反,为每种颜色创建一个临时的Color32数组并使用它,并且只在最后使用SetPixels32将所有数组分配给新纹理。
  • 如果您使用foreach循环或Array.ForEach或某些linq内容来解析colors数组,请不要这样做 - 使用简单的for循环,这是最快的方法。

希望这有帮助。

答案 1 :(得分:0)

现在有一种更快的方法,使用Texture2D.GetRawTextureData()Texture2D.LoadRawTextureData()