1. 注意点

  1. 系统字为一个库,并不是每一种字体都支持你需要的文本,因此需要自己寻找一个适合的文本

1. 在UGUI.Text中使用

// 获得系统字体名称列表
string[] systemFontNames = Font.GetOSInstalledFontNames();
// 获得某种字体
into index = 0;
string systemFontName = systemFontNames[index];
Font font = Font.CreateDynamicFontFromOSFont(systemFontName, 36);
GetComponent<Text>().font = font;

2. 在UGUI.TMP_Text中使用

必须是TMP 3.2以上版本

// 获得系统字体名称列表
string[] systemFontNames = Font.GetOSInstalledFontNames();
// 获得某种字体
into index = 0;
string systemFontName = systemFontNames[index];
// 创建字体文件
var fontAsset = TMP_FontAsset.CreateFontAsset(systemFontName, "");
GetComponent<TMP_Text>().font = fontAsset;

3. 一个自动寻找对应字体支持的fallback管理器

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using Framework;
using UnityEngine;
using TMPro;
using FontWeight = TMPro.FontWeight;
using Object = UnityEngine.Object;public static class TMProFallbackExtra
{private static List<TMP_FontAsset> _fallbackFonts = new();private static bool _init;private static Coroutine _coroutine;// 清理数据public static void ClearAllData(){if (_coroutine != null){try{GameManager.Instance.StopCoroutine(_coroutine);}catch (Exception e){Debug.LogError(e);}}foreach (var tmpFontAsset in _fallbackFonts){if (tmpFontAsset != null){tmpFontAsset.ClearFontAssetData();Object.Destroy(tmpFontAsset);}}_fallbackFonts.Clear();_coroutine = null;_init = false;}// 初始化,每组字符串为一种需要兼容的语言,如日语可写「アイウエオ」public static void Init(params string[] testTxts){if (_init){Debug.LogError("初始化已经完成,因此没必要进行再次初始化!");return;}_coroutine = GameManager.Instance.StartCoroutine(InitAsync(testTxts));}private static IEnumerator InitAsync(params string[] testTxts){yield return null;var systemFontNames = Font.GetOSInstalledFontNames();foreach (var testTxt in testTxts){foreach (var systemFontName in systemFontNames){var fontAsset = TMP_FontAsset.CreateFontAsset(systemFontName, "");if (fontAsset == null) continue;fontAsset.name = systemFontName;var data = CharacterToCoding(testTxt);var over = true;foreach (var d in data){var unicode = uint.Parse(d, NumberStyles.HexNumber);if (TMP_FontAssetUtilities.GetCharacterFromFontAsset(unicode, fontAsset, false,FontStyles.Normal, FontWeight.Regular, out _) != null) continue;over = false;break;}if (!over){Object.Destroy(fontAsset);continue;}fontAsset.isMultiAtlasTexturesEnabled = true;_fallbackFonts.Add(fontAsset);Debug.Log($"为兼容字符串 {testTxt} ,添加Fallback字体 {systemFontName}");yield return null;break;}}_coroutine = null;_init = true;}// 清除字符串中的emojipublic static string ClearEmoji(string str){var sb = new StringBuilder();var data = CharacterToCoding(str);for (var j = 0; j < data.Length; j++){var unicode = uint.Parse(data[j], NumberStyles.HexNumber);if (!((unicode > 0xE001 && unicode < 0xE05A) ||(unicode > 0xE101 && unicode < 0xE15A) ||(unicode > 0xE201 && unicode < 0xE253) ||(unicode > 0xE301 && unicode < 0xE34D) ||(unicode > 0xE401 && unicode < 0xE44C) ||(unicode > 0xE501 && unicode < 0xE537) || unicode == 0xfffd)){sb.Append(str[j]);}}return sb.ToString();}// 为指定字体文件追加fallback,可从textfield上直接获取public static void AddFallback(TMP_FontAsset fontAsset){if (!_init){Debug.LogWarning("初始化尚未完成,将在稍后为字体文件添加Fallback");return;}foreach (var font in _fallbackFonts){fontAsset.fallbackFontAssetTable.Add(font);}Debug.Log($"为字体文件 {fontAsset.name} 添加了Fallback");}public static void AddInputFieldClearEmoji(TMP_InputField input){input.onValueChanged.RemoveAllListeners();input.onValueChanged.AddListener(str => { input.SetTextWithoutNotify(ClearEmoji(str)); });}private static string[] CharacterToCoding(string character){var codings = new string[character.Length];for (var i = 0; i < character.Length; i++){var bytes = Encoding.Unicode.GetBytes(character.Substring(i, 1));//取出二进制编码内容var lowCode = Convert.ToString(bytes[0], 16);//取出低字节编码内容(两位16进制)if (lowCode.Length == 1){lowCode = "0" + lowCode;}var hightCode = Convert.ToString(bytes[1], 16);//取出高字节编码内容(两位16进制)if (hightCode.Length == 1){hightCode = "0" + hightCode;}codings[i] = hightCode + lowCode;}return codings;}
}

Unity-使用系统字体相关推荐

  1. Android App修改字体大小,且不随系统字体大小更改

    在做混合开发时发现,无论是APP内的字体大小,还是前端的字体大小,都会随着系统字体大小发生变化.当遇到老人字体(特大号字体)时,有些页面的布局就乱掉了.而玩过游戏的都知道,所有游戏APP的字体都不会随 ...

  2. Unity基础笔记(3)—— Unity UI系统

    Unity UI系统 一.UI系统介绍 1. Unity2D 和 UI的区别 Unity2D:主要基于 SpriteRenderer 和 2D物理系统等组成. UI:由 Canvas 以及 各种 UI ...

  3. Unity制作美术字体、图片转字体库C#

    前言:在遇到Unity支持的字体库之外的字体时,可以将每个字的图片集中生成一个字体库,用来Unity文本使用. 一.功能 1.字体图片设置 字体图片等比等分在一张图片上,方便Unity系统自处理 2. ...

  4. 【Unity】对Unity引用三方字体的踩坑日志

    一.Unity导入三方字体 导入字体文件 要在项目中添加字体,必须将字体文件放在 Assets 文件夹中.然后,Unity 会自动将其导入.支持的字体格式为 TrueType 字体(.ttf 文件)和 ...

  5. Linux 桌面玩家指南:04. Linux 桌面系统字体配置要略

    Linux 桌面玩家指南:04. Linux 桌面系统字体配置要略 原文:Linux 桌面玩家指南:04. Linux 桌面系统字体配置要略 特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客 ...

  6. CentOS 7.7 x86-64安装系统字体及美化实录

    我在rMBP上用VMware Fushion 15.1安装了CentOS 7.7的虚拟机,带有gnome界面,打算用于日常的开发工作.但是发现界面实在是太丑陋了,决定趁周末折腾一下,网上研究了一些资料 ...

  7. 硬件断点反跳似乎_高性能应用程序:多路复用,反跳,系统字体和其他技巧

    硬件断点反跳似乎 by Atila Fassina 通过阿蒂拉·法西纳(Atila Fassina) 高性能应用程序:多路复用,反跳,系统字体和其他技巧 (High Performance Apps: ...

  8. native字体尺寸自适应 react_ReactNative字体大小不随系统字体大小变化而变化

    引言 在开发react-nativeApp时,相信大家都应该遇到过这样的问题:用户设置了系统的字体大小之后,导致自己的APP布局紊乱,甚至有些内容会被切掉/隐藏,这对于用户来讲,是非常不好的用户体验. ...

  9. unity桌面设置vnc_Ubuntu 16.04下安装VNC和Unity桌面系统

    本站之前已经跟大家分享了不少关于VNC以及桌面系统传送),关于为什么Linux要安装桌面,这个见仁见智,对于我而言,一个用途是是挂Vegax赚点零花钱(用Firefox的插件),之前的教程,所安装的桌 ...

  10. flutter字体不跟随系统_flutter 禁止字体大小跟随系统字体改变大小

    最近遇到个问题 刚开始是根据设计图写的字体大小 但是到我手机上都是非常小的文字 后来找到问题是因为我的手机系统字体比较小 习惯了 我的Android Studio字体也是比较小的 微信图片_20190 ...

最新文章

  1. 如果面试官问你 JVM,额外回答逃逸分析技术会让你加分!
  2. 测试数据库sql声明效率
  3. UBOOT添加命令的执行流程
  4. 锁相放大器sr830_各位谁会用Stanford SR830啊,我都快被这个锁相放大器折腾死了!!!!-北京搜狐焦点...
  5. 数据结构--线性表链式存储(链表)--单链表
  6. nginx 配置详解_Nginx 配置详解
  7. API设计原则(觉得太合适,转发做记录)
  8. android 悬浮窗 输入框_利用DecorView实现悬浮窗的效果
  9. Wget 命令用法详解
  10. C#的TextBox控件输入测试-只允许输入数字的测试:
  11. CF1047C Enlarge GCD
  12. GoAhead学习之GoForms
  13. 在安装win7系统时如何不产生100M的系统保留分区
  14. 业余无线电新手入门基础知识(全网最全)
  15. spring扫描出现Annotation-specified bean name 'userService' for bean class [com.test.service.UserService]
  16. java swing 文本域_java文本域
  17. android hid 鼠标,使用BluetoothHidDevice将安卓手机同时模拟成鼠标和键盘
  18. python获取涨停股票_摸索:半天完成Python获取数据,建立每日涨停股票池。
  19. latex 公式编号的自定义
  20. 汽车电子狗的原理 【闲杂篇】

热门文章

  1. 控制windows系统音量
  2. Hive load data 时中文乱码的解决
  3. prim算法_数据结构与算法
  4. 【DL】什么是dropout
  5. python和按键精灵自动化测试_高级版按键精灵,同时也是UI自动化测试的好帮手 - SIKULI...
  6. 张镰:平阳县电子商务服务中心数字化转型模式探索
  7. H.264视频监控系统架构
  8. BoundingBox 图片分割
  9. linux下如何删除文件
  10. ctfshow--网络迷踪