纹理和贴花

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

一个 Texture 是一种图像,你可以将其放置在任何 部件联合体 的任何面上,且在表面大小上 重复 水平和垂直方向。相对而言,Decal 是一种 拉伸 图像,以适应部件或联合体表面的区域。在将 TextureDecal 对象添加到部件或联合体后,你可以:

  • 更改纹理或贴花的 Color3 属性,通过 RGB 颜色代码设置颜色色调。

  • 将纹理或贴花的 Transparency 属性更改为介于默认值 0(完全可见)和 1(不可见)之间的值。

  • 对于纹理,设置其 缩放偏移

一个浅蓝色六边形图像,位于深蓝色背景上。
纹理图像
相同的纹理在一个块状部件上重复了八次。
应用于部件的纹理(重复)
一个浅紫色六边形图像,位于深紫色背景上。
贴花图像
相同的贴花被拉伸到一个块状部件上。
应用于部件的贴花(拉伸)

创建纹理或贴花

要创建一个纹理或贴花,你必须将 TextureDecal 对象添加到一个部件或联合体上。你可以 导入 图像到 Studio 中用作纹理和贴花,以便在游戏之间使用,并 分发创作者商店。一旦你导入了图像,Studio 会为其分配一个唯一的资产 ID。

要将纹理或贴花添加到 部件联合体

  1. 资源管理器 窗口中,将 TextureDecal 添加到部件或联合体。一个空的纹理或贴花对象在部件或联合体上会显示出橙色轮廓。

  2. 属性 窗口中,导航至 Face 属性并选择一个面(TopBottomFrontBackLeftRight)。

    • 可选
      为了帮助选择正确的面,右键单击部件/联合体并选择 显示方向指示器。这会显示一个圈 🅕,一条附着于对象前脸的蓝线,以及一支指向对象上面方向的绿色箭头。

  3. 选择 ColorMapContent 属性,并通过以下任一方法应用图像:

    • 选择任何你之前上传的纹理或贴花。
    • 在字段中输入一个 资产 ID
  4. 可选
    通过单击 Color3 属性左侧的小框,或输入 RGB 颜色代码来设置颜色色调。

    Color3 属性的特写视图,突出显示了小颜色框。
    Color3 属性的特写视图,突出显示了 RGB 代码。
    一个块状部件的顶部面有一个重复的蓝色六边形纹理。
    Color3: [255, 255, 255]
    相同的块状部件的顶部面有一个重复的六边形纹理,但六边形在深紫色背景上是粉红色的。
    Color3: [255, 0, 100]
  5. 可选
    Transparency 属性设置为介于默认的 0(完全可见)和 1(不可见)之间的任何值。

自定义纹理

与贴花不同,纹理 提供了更进一步的功能以缩放、偏移和动画源图像。

缩放纹理

部件的大小不会影响纹理。相反,缩放部件仅会增加或减少纹理的重复次数。

StudsPerTileUStudsPerTileV 属性决定每个“砖块”的大小(以研究单位为单位)。StudsPerTileU 决定纹理的横向大小,而 StudsPerTileV 决定纹理的纵向大小。

纹理在一个8x6研究单位的表面上,每个砖块的大小为2x2。

偏移纹理

如果你想对纹理的位置进行更多控制,可以通过调整 OffsetStudsU(水平)和 OffsetStudsV(垂直)属性来偏移纹理。这对 动画 也很有帮助。

在一个8x6研究单位的表面上,2x2的纹理没有偏移。

动画纹理

使用 TweenService,你可以对纹理属性进行 tween,像 OffsetStudsUStudsPerTileV,以实现动画表面。例如,如果你对一个容器应用两个雾纹理并用以下脚本对它们进行动画处理,你可以实现层叠移动雾的效果。

两个在地面附近的动画纹理,模拟移动雾效果

local TweenService = game:GetService("TweenService")
local texture1 = script.Parent.Texture1
local texture2 = script.Parent.Texture2
local tweenInfo1 = TweenInfo.new(8, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut, -1)
local tween1 = TweenService:Create(texture1, tweenInfo1, {OffsetStudsV=50})
local tweenInfo2 = TweenInfo.new(7, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut, -1, true)
local tween2 = TweenService:Create(texture2, tweenInfo2, {OffsetStudsU=50, StudsPerTileU=55, StudsPerTileV=45})
tween1:Play()
tween2:Play()

纹理流

纹理流 根据距离和相机视图动态加载纹理,让你可以更自由地使用纹理,而不必担心在不同设备间的缩放。引擎首先加载基线质量的纹理,按重要性顺序排列,然后逐渐提高每个纹理的质量,直到达到设备上的可用内存。纹理流是自动启用的,因此你无需采取任何措施即可受益于此。

一个可视化效果,展示了有无纹理流的游戏。
相同场景有无纹理流

优势

  • 更快的加载时间和更小的下载量:纹理几乎立即以基线质量出现,且引擎只下载所需的细节,在传输和本地磁盘缓存中进行压缩。
  • 在关键位置提供更高的质量:引擎持续估算每个对象的重要性,例如通过它占用的屏幕空间,并在这些纹理上使用内存预算,以便最突出对象获得最高的细节。
  • 减少内存不足导致的崩溃:由于引擎保持在内存预算内,并能在内存不足时降低纹理质量,玩家发生纹理内存峰值导致崩溃的可能性大大降低。

纹理流与 MeshPart(有骨骼和无骨骼)、SurfaceAppearanceTextureDecalMaterialVariantBeamParticleEmitter 以及应用于 PartOperationBasePart 实例的基础材质一同工作。

最佳实践

  • 优先使用独特、单独的纹理,而不是纹理图集,除非图集应用于可批量处理的零件;请求图集中某个纹理的高分辨率会同时流入整个图集的该分辨率。
  • 在你的 UV 映射网格中保持近乎均匀的像素密度,以便引擎能够为每个纹理选择最佳分辨率。
  • 继续仔细管理纹理内存,对于纹理流尚不支持的实例类型。
©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。