如何在保持中心不缩放的情况下对精灵进行 9 切片?

How to 9-slice a sprite while keeping the center not scaled?

我想知道有什么方法可以将这个 sprite(对话框弹出的东西)切片,以保持底部中心(倒三角形)不缩放?如果重要的话,我正在使用 nGUI。

没有

抱歉,这就是 9 切片缩放的工作原理。您将需要 25 个切片缩放比例来完成您正在寻找的事情,这对大多数事情来说都太过分了,所以我从未见过实现。

该怎么做...

将您的精灵分成两部分:9 片部分和“缺口”部分。然后把缺口放在正确的位置。

我没有使用过 nGUI(只有 iGUI 和 Unity native——新旧都有)所以我不确定 nGUI 如何让你这样做的确切性质,但你仍然需要两个精灵,其中一个缩放,另一个不缩放,手动或通过父子关系定位。如果您的对话框始终具有相同的宽度,那么它会非常简单。如果没有,它可能更具挑战性。

其他一些事情:

  • 您可能希望缺口精灵和气泡精灵具有相同的原始图像大小,但这不是必需的(可能会使事情变得更容易,也可能不会)。

  • 缺口会想要一些“溢出”,这样当两者堆叠时,底层渲染代码就不会眯着眼睛去“这里有一个缺口......”并绘制在某些情况下通过。

  • 根据气泡部分的绘制边缘,您可能希望缺口在前面后面。在您的确切情况下,我认为这不会有所作为。由于颜色的原因,有点难以分辨,但是当我做 a selectable tab(类似地构建)时,选项卡位于容器 window 的顶部,因此阴影边缘很好地流动。未选择的版本没有过度出血,因此它看起来像是位于“后面”(准确的像素放置——固定尺寸的 2D 游戏——确保没有渲染“间隙”)。

为 UI 图像实现这个有点乏味但非常简单。我最近这样做是为了让切片拉伸 9 切片的 left/right 边界而不是中心。

诀窍是继承 Image 并覆盖 OnPopulateMesh,您可以在其中进行所需的计算并将 positions/uvs 设置为您需要的任何值。

这是一篇很有帮助的操作方法文章:https://www.hallgrimgames.com/blog/2018/11/25/custom-unity-ui-meshes

非UI精灵的事情会更难。我认为您必须在脚本中创建所有几何图形,并且计算可能会有点复杂,因为您使用的是图集。