遮罩UI图像/原始图像

8
我最近遇到了UI的问题。我打开了一个新的2D项目,并使用带有Image组件的GameObject创建了一个画布。然后通过右键单击Assets > Create > Sprites > Circle添加了一个精灵。这将在我的Assets文件夹中添加一个圆形精灵。
问题在于,当我选择Image组件的Source Image为圆形时,它仍显示为矩形。 Screenshot showing white rectangle 圆形精灵被导入为纹理类型的Sprite。
这个问题也发生在其他形状上,比如三角形。
我正在使用Unity 5.6.0b9 Personal。生成目标是PC、Mac、Linux Standalone。
我可能忽略了一些非常简单的东西。感谢任何帮助!
2个回答

39
这样是行不通的。在“资源 > 创建 > 精灵”菜单下的圆形和其他类型的精灵适用于SpriteRenderers。如果您使用了来自 GameObject -> 2D对象 -> Sprite 的SpriteRenderer,那么这将起作用。它们不适用于UI。
对于UI,必须使用Mask组件来完成此操作。只需获取任何圆形图像,然后使用它从目标正方形图像中切出圆形。
  1. 创建一个名为“TargetSquare”的UI图像,这是您要圆形化的图像。

  2. 复制它,然后将其命名为“MaskCircle”,然后调整大小,使其比“TargetSquare”小,直到该圆形形状符合您的要求。

  3. 使“MaskCircle”对象成为“TargetSquare”对象的父级,然后使用我制作的 圆形精灵作为其源图像。

  4. Mask组件附加到“MaskCircle”对象上。

完成。您的“TargetSquare”对象将具有“MaskCircle”对象的形状。

如果出现锯齿状边缘,请选择用于“MaskCircle”图像的精灵,然后确保Mipmap已禁用。


这很奇怪... 常规 PNG 对于 SpriteRenderer 和 Image 都可以正常使用。为什么它们不给内置的精灵兼容性呢? - yummypasta
为什么?它明确地说了“Sprite”。最初,这是为了让SpriteRenderer轻松创建许多形状而制作的。Unity的UI / Image是新的,几年前才发布。 Unity的UI / Image与Sprite和SpriteRenderer不同。它仅用于显示UI。如果您正在使用2D角色或2D世界,则应该使用SpriteRenderer。 UI / Image有其自己的解决方案,可以为图像提供虚假形状,即Mask。它允许您在运行时执行此操作。您无法使用Sprites。 - Programmer
至于为什么不支持,因为假精灵使用占位符精灵和算法来生成形状,但这不是UI的工作方式。这就是为什么它不受支持的原因。UI使用直接的OpenGL /模板来使其工作,以便速度非常快。我相信Unity希望您使用Mask,因为这更有意义。该菜单实际上称为“SpriteCreator”,您可以在此处阅读更多信息:https://docs.unity3d.com/Manual/SpriteCreator.html - Programmer
你能帮我在Unity中创建屏幕转换,例如垂直和水平转换吗? - shankar
1
@shankarkn 创建一个新的Unity问题,并解释你想要做什么以及你尝试了什么。我会看一下,看看我能否做到。 - Programmer

-1

可能是个bug,在Unity 5.6.1f1中也有同样的问题。试着下载新版本的Unity 5.6.2f,我不知道这个bug是否已经修复。

或者

使用一些图像编辑器,例如Photoshop。

P.S. 我失败了,一切正常,在SpriteRenderer组件上它可以工作。Unity生成一个白色的正方形,在这个精灵属性设置Sprite Mode为Polygon并使用顶点创建一些形状。


这不是一个 bug,更新 Unity 也无法解决。也许 Unity 会在未来的 UI 中添加它。 - Programmer
是的,我的失误,但也许他只想画圆,而不使用遮罩。 - nipercop
菜单中提到的选项不会绘制圆形。它创建了可以使用遮罩复制的圆形精灵,如果您想要使用UI来完成这个操作。如果OP不想使用UI,则应该像我之前提到的那样使用SpriteRenderers,因为它支持Assets > Create > Sprites > Circle 菜单中的所有内容。 - Programmer
@nipercop 是的,我只想绘制一个圆形,但使用遮罩是唯一的方法。 - yummypasta
@yummypasta 注意了,如果你在制作移动游戏,遮罩组件会占用很多绘制调用。 - nipercop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接