【问题标题】:How to 9-slice a sprite while keeping the center not scaled?如何在保持中心不缩放的情况下对精灵进行 9 切片?
【发布时间】:2017-06-19 14:54:55
【问题描述】:

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

【问题讨论】:

    标签: unity3d ngui


    【解决方案1】:

    没有

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

    该怎么做...

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

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

    其他一些事情:

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

    • 缺口会希望有一些“过度出血”,这样当两个堆栈时,底层渲染代码不会全都眯着眼睛,“这里有一个间隙......”并在某些情况下绘制出来。

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

    【讨论】:

    • 谢谢,知道不能做的事情同样重要:D
    • @armnotstrong 有时“你不能”是唯一正确的答案。从技术上讲,还有第二种选择:编写您自己的 25 切片缩放渲染器(我在很久以前写过一个 9 切片的渲染器)。但这是一项ton 的工作,不会与现有的 UI 解决方案(如 nGUI)集成。我主要是从 Minecraft 改编代码(因为我想以类似方式处理事情),所以我有一个可以参考的工作实现。字体渲染器也是这样吗?是一次有趣且内容丰富的体验。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-03-25
      • 2015-09-18
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 2012-08-27
      相关资源
      最近更新 更多