【大神系列】TextMeshPro打包问题,和Lighing2D 光插件

低质的文章又来了

之前好像写过一个相关文章,某些原因发不出

总之我如果不亲身处理这个目录,十个项目,十个都不会处理,真心不知道这些项目是怎么维护的

多少年了,官方处理了没有?

(总之,世界上就是一个巨大的草台班子)

我写的

<找不到了>

大神写的 -无幻

Unity TextMesh Pro 组件的 Resources 文件夹打包_textmeshpro assetbundle-CSDN博客

大神介绍了这种做法:

损失点性能使用反射来对其进行赋值,因为只需赋值一次,所以性能可以忽略。将 Resources 文件夹改名成其他名称,然后把TMP_Settings.asset文件移到 AssetBundle 预制读取目录。最后在游戏资源检测完毕后,调用如下代码:(见上面链接)

但是

但是(*&(*&**......&*

  1. 不建议像大神改内核,对于新手更容易导致项目的其他问题
  2. 删除一些Resources的内部文件,最小化,或者是比较简单的方案
  3. 大神建议了牺牲性能,换来最终的AB打包结果,但如果你的项目不需要AB打包呢;又如果是牺牲一些Assetbundle的冗余,换来小项目的稳定也未尝不是一个合理的牺牲
  4. 有没有人提供一些最小化TextMeshPro,优化过的TextMeshPro; 我也经常这么个干;但是缺点是最新版本无法同步,或者当前代码就有一些隐含BUG,对项目的稳定更不利

总之就是怎么选都是难,也不能怪其他团队草台,因为真的团队内没人敢改,无人敢负责

TMP Res目录的处理

对于我来说,就是加了一个Text,是为了测试材质和着色器(上个文章有说)是否能支持旧的 Legacy的普通Text 和这个新的TextMeshPro (实测,是有2个uv的()

但是我也已经在旧的普通的 Text 实现了两个UV,

所以以下基本对于我来说,都可删,因为不需要

建议保留

文件/目录 作用 是否可删
TMP Settings.asset TMP 全局配置,默认通过 Resources.Load 加载 不要删
Shaders/ TMP 文本渲染用到的 Shader 不要删
Fonts & Materials/LiberationSans SDF* 默认英文字体和材质 项目完全不用可删,但建议先检查引用
Sprite Assets/EmojiOne* 默认 Emoji 精灵资产 不用 Emoji 可删
Style Sheets/Default Style Sheet* 默认文本样式表 不用富文本样式可删
Color Gradient Presets/ 默认颜色渐变预设 不用可删
LineBreaking Leading/Following Characters* 换行规则 建议保留,删了可能影响文本排版
TMP Examples & Extras 相关示例 官方示例场景、材质、字体 可以删

TMP Settings 必须在 Resources 里,这是 TMP 官方要求。

Resources 下的资产在打包时不会被 Unity 自动剔除,所以这里越干净,最终包体越安全。

可以优先清理的

如果你是通过 Window > TextMeshPro > Import TMP Essential Resources 导入的资源,那么其中很多默认字体、示例材质、Emoji、样式表、渐变预设,通常只是"默认示例"。

可以这样判断:

  1. 在 Project 窗口搜索 t:TMP_FontAsset,看哪些字体被预制体、场景或 TMP Settings 引用。
  2. 搜索 t:TMP_SpriteAsset,确认 EmojiOne 是否被引用。
  3. 搜索 t:TMP_StyleSheet,确认默认样式表是否被引用。
  4. 搜索 t:TMP_ColorGradient,确认渐变预设是否被引用。
  5. 打开 TMP Settings.asset,检查 Default Font Asset、Default Sprite Asset、Default Style Sheet、Default Color Gradient Presets Path 是否还指向这些资源。

如果某个资源没有被任何地方引用,也没有被 TMP Settings 设为默认值,就可以删。

不建议直接改 PackageCache 里的 Resources

如果你看到的是 Library/PackageCache/com.unity.textmeshpro 或类似路径下的 Resources,不要直接删。那是包缓存,更新包后还会回来,也可能导致包校验异常。

更稳妥的做法是:

只清理 Assets/TextMesh Pro/Resources 下你项目确实不用的默认资产;如果你用了 Addressables / AssetBundle,还要注意避免同一份字体同时存在于 Resources 和 AB 中,否则容易出现双份内存占用。

最稳的操作顺序

  1. 先确认项目里所有 TMP 文本组件实际使用的字体、材质、精灵资产。
  2. 把 TMP Settings 里的默认引用改成你自己正式使用的资产。
  3. 再删除 Resources 下未被引用的默认字体、Emoji、样式表、渐变预设、示例资源。
  4. 删除后做一次全平台 Build 测试,重点检查中文/英文/数字/标点是否缺字。

参考 - 无厘头 - 先预留新的地图篇章之入口,45°地图需要Lighting 2D

各种Unity Lighting 2D插件对比

PC平台随便用,主要是测评Webgl平台,手机平台取个平均即可

|------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------|
| 名字 | 连接 | 试用 |
| SmartLighting2D | RELEASED 2021.7.1 Smart Lighting 2D - Unity Forum | webgl测试后性能堪忧 |
| 2D LIGHTS IN UNITY | Unity - How to use 2D lights in Unity to set the mood | 官方的Urp |
| Soraphis2DLighting | soraphis/Unity-2D-Lighting: 2D Lighting Strategies for Unity (github.com) | 有点太艺术了,太糊了,光影效果不行(貌似是欧洲人做的) |
| Fast2DLight | (1) Need 2D Lights in your games? I just released a super-duper fast GPU-powered 2D lighting framework (Free, Open-Source) : Unity2D (reddit.com) | Unity2022版本及以上,依赖Shader,性能真心不错,但是效果略微简单 |
| | | |

其实关键很简单,其实就是要给背景,创建一个材质(Sprites/Diffuse)

​

最原生,最原始的Built-in Light 2D

如图,Sprites/Diffuse Shader 的材质是灰色一片的。。。

​

​

参考,扩展阅读:

一个大牛,虽然用的是JAVA

Tech talk: Faking lights in 2D games -- Orangepixel

Lighting Effect (gif,video)

Pinterest

相关推荐
scott.cgi10 个月前
「Unity3D」TextMeshPro的TMP_InputField在Android上使用返回键关闭虚拟键盘,会清空文本或恢复上次内容的问题
ugui·textmeshpro·tmp_inputfield·android返回键·虚拟键盘返回·ugui虚拟键盘·inputfield返回键
@LYZY1 年前
Unity TextMeshPro 文本对齐方式详解
unity·游戏引擎·textmeshpro·tmp
scott.cgi1 年前
「Unity3D」TextMeshPro使用TMP_InputField实现,输入框高度自动扩展与收缩
unity·ugui·textmeshpro·tmp_inputfield·inputfield高度自动化·unity输入框高度扩展·textmeshpro高度扩展
scott.cgi2 年前
「Unity3D」TextMeshPro中的TMP_InputField,用来实现输入框的几个小问题
unity·ugui·textmeshpro·tmp_inputfield·inputfield·inputfield输入框·ugui输入框
杰信步迈入C++之路2 年前
【脑与认知科学】第六章 心里表象
tmp
杰信步迈入C++之路2 年前
【脑与认知科学】第八章 记忆:编码和存储
人工智能·算法·计算机视觉·tmp
时光不染3 年前
TextMeshPro图文混排的两种实现方式,不打图集
unity·textmeshpro