场景
我们先来看,什么叫做“边框不被拉伸”。这里我们以提示弹窗作为例子。
正常情况下,不管展示的信息长短,都希望有 24px 的“圆润”的边框
图1-短文本
图2-长文本
但是,背景是一张图片,在宽高比不一致的情况下,想要填满一个区域,横向或纵向会被拉伸或者压缩。就可能呈现下图的样式。
图3-长文本错误边框
针对这样的问题,Unity 提供了什么解决方案呢?
九宫格纹理解决方案
使用 Unity 的九宫格纹理技术(9-slicing Sprites)。九宫格纹理是一种将图片分成九个区域的技术,其中四个角落区域保持原样,四个边缘区域在平铺时只沿一个方向拉伸,中间的区域则在两个方向上拉伸。
九宫格技术仅适用于平铺的背景和边框,不适用于需要进行旋转或者缩放的 UI 元素。九宫格技术是对图片进行切割来实现的,而旋转和缩放会改变图片的形状和大小。这种场景下,可以使用 Shader 技术来对 UI 元素进行着色和渲染,或者动态生成纹理等技术。
以下几点描述了更改图像尺寸时发生的情况:
- 四个角(A、C、G 和 I)的大小不变。
- B 和 H 部分水平拉伸或平铺。
- D 和 F 部分垂直拉伸或平铺。
- E 部分同时水平且垂直拉伸或平铺。
操作示例 —— 手把手教学
- 点击图片资源,在 Inspector 中点击 Sprite Editor。
- (已安装则跳过)如果提示没有安装 Sprite Editor,请点击菜单栏 Window -> Package Manager。在 Package Manager 中,Packages 选项选择 Unity Registry,点击 2D Sprite 包,在右下角点击安装。
- 在 Sprite Editor 中,设置上下左右 border 的位置,点击 Apply。
- 在使用该纹理的图片上,设置 Image Type 为 Sliced,并勾选 Fill Center(是否勾选可以根据需求来)。
参考资料:9 切片精灵 - Unity 手册