【问题标题】:Unity3d Split Texture2d at runtimeUnity3d 在运行时拆分 Texture2d
【发布时间】:2016-02-11 06:38:10
【问题描述】:

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

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

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

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

如果此字典中没有颜色作为键值,则使用 SetPixel 使用坐标创建新纹理 如果有颜色作为key,则通过key和SetPixel配合坐标获取纹理,得到这个纹理。

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

有没有更有效的方法?

为了帮助您将问题可视化,我正在添加颜色贴图,即我需要拆分的纹理。

【问题讨论】:

    标签: unity3d split runtime texture2d


    【解决方案1】:

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

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

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      现在有一种更快的方法可以做到这一点,即使用Texture2D.GetRawTextureData()Texture2D.LoadRawTextureData()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-26
        • 1970-01-01
        • 2011-10-09
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多