unity3d - 如何在非 GUI 元素中使用 "9-sliced"图像类型?

标签 unity3d textures

在我的游戏中,我在四边形上使用简单的纹理。我可以看到 Unity GUI 允许我们通过将“图像类型”选项设置为 来切片图像。切片 .

我想对我在四边形中使用的其他纹理做同样的事情。

简单来说,当纹理本身被缩放时,我不希望我的纹理的边缘被缩放。

谢谢。

最佳答案

看起来你必须自己生成网格,不像听起来那么难。网格必须如下所示:

9 slice on a quad

每个纹理网格由顶点(图片上的红点)定义,并且(在这种情况下)每个顶点有两个参数:

  • 一个 Vector3与位置。只有 xy在这里使用,因为四边形是平坦的(因此,z = 0)。
  • 一个 Vector2使用 UV,这就是将 Material 放置在网格上的方式。这是纹理坐标:uv .

  • 为了配置这个网格,我添加了参数:
    b - 边框 - 游戏对象的边框有多大(以 3d 单位表示)
    w , h - 用于游戏对象的宽度和高度(以 3d 为单位)
    m - 图像中的边距有多大( float 0f 到 0.5f)

    如何在 Unity3d 中执行此操作:
  • 创建一个游戏对象,添加一个 MeshRenderer用你想要的 Material 和一个空的 MeshFilter .
  • 添加创建网格的脚本。看 Unity3d docs for Mesh , first example .

  • 请注意,对于 unity3d,您必须使用三角形创建它,而不是四边形(因此对于每个四边形制作两个三角形)。

    关于unity3d - 如何在非 GUI 元素中使用 "9-sliced"图像类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28516185/

    相关文章:

    textures - 在 Vulkan 中从数组创建纹理的步骤是什么?

    c# - 串行通信在 Unity 中运行缓慢

    ios - unity iOS link.xml 位置

    android - 如何从 GLSurfaceView 保存位图(仅位图,不是整个纹理)

    colors - 使用 Alpha channel /不透明度时颜色变深

    android - 在 LibGDX 的纹理上渲染视频

    android - LibGDX抗锯齿使边缘变灰

    unity3d - 如何从API LEVEL 16升级到28?

    ios - 由于 Cocoapods,Unity 无法使用 firebase 分析编译项目

    unity3d - 有没有办法在着色器中合并 Unity 中的纹理?