【问题标题】:Fill Font Characters with White?用白色填充字体字符?
【发布时间】:2016-01-16 22:47:27
【问题描述】:

我的字体有一个空的“内部”。如下图:

白底字体:

蓝色背景字体:

我们如何在不使用背景的情况下使文本的“内部”始终为白色?我将使用 Unity 游戏引擎。

当然,我不能编辑 .ttf 文件。正如@itchee 指出的那样:TTF 字体总是只有一种颜色。它只能指定不透明和透明的部分(从技术上讲,只指定了不透明的部分,其他的都是透明的)。显示该字体的应用程序可以为不透明部分选择一种颜色。但它不能使“部分变黑,部分变白”。我的问题是如何使用 Unity 游戏引擎实现我想要的。欢迎任何 C# 脚本。

正如@fafase 所说,一个填充算法,对于每个字符,寻找包围区域并填充它们是理想的。

【问题讨论】:

  • 这是什么字体?它是您制作的字体,还是您获得的字体,或者您从内置的 windows/mac 获得的字体?还是这只是一张图片?
  • "fonts" 可以在像游戏引擎这样复杂的东西中以多种方式实现;您至少需要包含设置的屏幕截图,以便让人们了解您在做什么。
  • @ʇolɐǝzǝɥʇqoq 这是我从网上下载的字体。

标签: text unity3d fonts unity5


【解决方案1】:

您可以使用位图字体。 Unity 本身并不支持它们,因此您可以使用资产商店中名为CJFinc: Bitmap Font Tools 的资产。如果你不愿意付那么多钱,我找到了一个很好的教程here

但到目前为止,我最灵活的想法,也许我会做的是创建第二个字体,你可以将它放在第一个字体后面。您会将原始字体保持为黑色。第二种字体将是适合您的填充形状的简单形状,并且您可以设置为您想要的任何颜色。这是我的意思的简要概述:

您可以使用fontforge 来创建您的自定义字体。这可能会花费您相当多的时间,但它会始终如一地、简单地工作,并且不会对您的脚本进行太多更改。

【讨论】:

  • 不幸的是,这个选项是噱头。正如@fafase 所说,对于每个字符,寻找包围区域并填充它们的填充算法将是理想的。欢迎任何其他可靠的方式。
  • 填充算法也是噱头(更好的词可能是hacky、workaround或polyfill)。填充算法将不必要地复杂、缓慢且难以制作。不要为自己过度复杂化。如果这样做,您将遇到问题和并发症。您将如何制作复杂的颜色检测填充算法与填充形状并创建第二种字体的速度?这个选择对我来说似乎很清楚。
  • 我明白,但是根据您的建议,我必须为每个字符创建一个特定的填充...
  • 这应该比创建所谓的填充算法少得多。
  • 无论如何,您必须从 tff 字体读取像素值(因此算法会知道在哪里填充您的颜色),但它无法读取这些值,因为 ttf 字体文件是实际上是一个svg。据我所知,我什至认为这样的算法是不可能的。不要等着别人给你写剧本。如果您希望有人为您制作脚本,请雇用他们来赚钱。这是一个帮助程序员的网站,而不是为他们工作。
【解决方案2】:

虽然可以编辑 TTF 字体,但不能将“背景”设为白色。

TTF 字体只能指定不透明和透明部分(从技术上讲,只指定不透明部分,其他一切都是透明的)。显示该字体的应用程序可以为不透明部分选择一种颜色。但它不能使“部分黑,部分白”。

【讨论】:

  • 那么,我怎样才能用 Unity 游戏引擎实现我想要的呢?
  • 我能想到的唯一方法是为您要使用的每个角色使用一个精灵图,并从精灵中编写您的文本。
  • 感谢您的回答,但该选项效率不高,而且会浪费空间...
  • 但这就是您的答案,这是您最初发布此问题时告诉您的内容。您正在等待一个似乎不存在的解决方案。所以要么你使用告诉你的东西,要么放弃它。如果你愿意,你可以想出一个填充算法,对于每个字母,它会寻找被包围的区域并填充它们。让赏金达到 500,也许有人会花一些时间在上面。
  • @fafase 我放弃所有积分换取赏金,我问这个问题已经 5 天了...我真的需要一个答案,因为我的项目的最后期限是几天后! :( 顺便说一句,你的填充算法想法听起来很有趣。
猜你喜欢
  • 1970-01-01
  • 2019-05-27
  • 2017-04-20
  • 1970-01-01
  • 2011-10-20
  • 1970-01-01
  • 2012-12-17
  • 1970-01-01
相关资源
最近更新 更多