【问题标题】:Unity load a font from the disk or the webUnity 从磁盘或网络加载字体
【发布时间】:2018-11-13 18:12:24
【问题描述】:

这个字体需要动态更改,所以我不能放在资源中。

我还没有找到任何资源或方法来实现这一点,都在谈论资源。

编辑:我确实查看了 AssetBunble,但它看起来有点矫枉过正,所以我想可能需要用户在他的机器上安装字体,但 Font.CreateDynamicFontFromOSFont 什么也没做。无论给定的输入是什么(即使是无效的),它都会返回相同的“Arial”字体,并且视觉上没有任何变化。

我可能会再次查看 AssetBundles,但我不希望在目标机器上安装 Unity,如果我理解正确,您无法在不运行 Unity 的情况下构建 AssetBundle。

【问题讨论】:

  • 您可以从 Resources 文件夹或 AssetsBundle 中加载几乎所有内容您是否尝试过这样做?
  • @buffalo94 我需要它是动态的(用户提供),所以它不能放入资源中。我正在研究 Asset bundle 解决方案,但它似乎需要 Unity 来构建一个(并且预计用户不会安装 Unity)。理想情况下,他应该只提供字体文件,然后瞧。
  • 我不会让你加载任意文件并将其用作字体,因为几乎所有 Unity 资产都在构建时序列化
  • @buffalo94 Unity 支持流式传输音频和视频,而且我还设法下载了精灵(无论是否用于纹理),尽管它比较棘手。让用户能够选择自己选择的字体似乎微不足道?我不希望它像构建中未包含的那样优化。
  • 您适合视频、音频、纹理,但听说过统一支持从任意文件加载字体?我不这么认为!所以我怀疑它是否可行

标签: unity3d dynamic fonts


【解决方案1】:

没有 Unity API 可以将标准字体从磁盘或 Web 加载到 Unity 的字体中。

如果您使用Font.CreateDynamicFontFromOSFont,则必须在设备上安装字体。这在 Windows 等某些平台上很容易做到,但在 Android 等设备上却非常困难。


推荐的方法是使用 AssetBundles。您将需要 Unity 编辑器来创建 AssetBundle,但您不需要它来在运行时加载 AssetBundle。将字体放在 AssetBundles 中,然后构建它并将其托管在服务器上。使用UnityWebRequest API 下载 Assetbundle,然后从中提取字体。您可以随时在服务器上更新此 Assetbundle。

如果您希望用户能够从任何来源加载字体,您可以通过询问用户字体在哪里来自动化构建部分,获取该字体并使用 UnityWebRequest 将其发送/上传到您的服务器API。在服务器端,以无头模式运行 Unity Editor,检索发送给它的字体并从中构建一个 Assetbundle,然后将其发送回播放器并在客户端加载它。

所以,UnityWebRequestAssetBundle.GetAssetBundle 用于下载 AssetBundle,AssetBundle.LoadAssetAsync 用于其中的字体。

除非您拥有非常昂贵的 Unity 源代码,否则没有其他方法可以做到这一点。通过这种方式,您不需要安装字体,也不会在移动设备上遇到问题。这篇文章展示了如何构建和加载Assetbundle,但您必须在无头模式下进行。

【讨论】:

  • 困难模式!确实,这种方式不需要用户安装 Unity 来自己制作捆绑包。
  • 我会让它啜饮一会儿,如果没有更好的结果,我会接受你的回答。
  • 没问题。我也希望有更好的方法来做到这一点,但我不这么认为。在对 Unity 进行研究和试验后,我们很难诉诸于此。
  • 如果有人愿意提供这样的服务,那也很棒。 :) (当然它还不存在,并且承认这是合法使用 Unity 公开公开它,尽管我不明白为什么不这样做)
  • 我认为如果共享它可能会违反 Unity 的服务条款,因为您正在使用编辑器而不是构建进行操作。当您将其用于自己的游戏但不将其作为服务提供给他人时应该没问题。如果没问题,那么人们还将提供类似的远程服务,让其他人使用专业版构建 Unity 项目并删除 Unity 启动画面。
猜你喜欢
  • 1970-01-01
  • 2020-10-15
  • 1970-01-01
  • 2017-02-21
  • 1970-01-01
  • 2011-06-13
  • 2016-03-13
  • 1970-01-01
  • 2011-09-26
相关资源
最近更新 更多