版本: Unity 6 (6000.0)
语言英语
  • C#

Texture2D.Apply

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。尽管我们无法接受所有提交内容,但我们确实会阅读用户提出的每个建议的更改,并在适用时进行更新。

关闭

提交失败

由于某种原因,您的建议更改无法提交。请在几分钟后<a>重试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public void Apply(bool updateMipmaps = true, bool makeNoLongerReadable = false);

参数

updateMipmaps 当值为 true 时,Unity 会使用 mipmap 等级 0 作为源,重新计算 mipmap 等级。默认值为 true
makeNoLongerReadable 当值为 true 时,Unity 会在将纹理上传到 GPU 后删除 CPU 内存中的纹理,并将 isReadable 设置为 false。默认值为 false

描述

将您在 CPU 纹理中所做的更改复制到 GPU。

对于大多数类型的纹理,Unity 可以将纹理的副本存储在 CPU 和 GPU 内存中。

CPU 副本是可选的。如果存在 CPU 副本,您可以比 GPU 副本更灵活地读取和写入 CPU 副本,例如使用 GetPixels。但是要渲染更新的纹理,您必须使用 Apply 将其从 CPU 复制到 GPU。

如果您将 makeNoLongerReadable 设置为 true,Unity 会在将纹理上传到 GPU 后删除 CPU 中的纹理副本。这意味着 Unity 无法重新加载纹理。即使在磁盘上存储数据的纹理资源上调用 Apply,如果 Unity 一旦丢弃 CPU 副本,它将不再尝试从磁盘重新加载,因为可读纹理数据可能已被更改。这在项目中使用 mipmap 限制以减少上传的 mip 数量时是相关的(例如,参见 QualitySettings.globalTextureMipmapLimit)。在 Apply 中丢弃 CPU 副本后,运行时纹理和可读纹理资源将不再遵循质量设置。纹理的上传分辨率将固定在 Unity 丢弃 CPU 副本时上传到 GPU 的分辨率上。如果这是不可取的,请确保纹理在完全分辨率下上传,无论是导入/构造时还是在运行时使用 Texture2D.ignoreMipmapLimit

通常,只有在您已经更新了 mipmap 等级(例如,使用 SetPixels)时,您才会将 updateMipmaps 设置为 false

Apply 是一种昂贵的操作,因为它会复制纹理中的所有像素,即使您只更改了其中一些像素,因此在调用它之前,请尽可能多地更改像素。

// Create a new texture and assign it to the renderer's material
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour { void Start() { Texture2D texture = new Texture2D(128, 128); GetComponent<Renderer>().material.mainTexture = texture;

for (int y = 0; y < texture.height; y++) { for (int x = 0; x < texture.width; x++) { Color color = ((x & y) != 0 ? Color.white : Color.gray); texture.SetPixel(x, y, color); } } texture.Apply(); } }

其他资源:SetPixelSetPixels 函数、Graphics.CopyTexture