首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用编辑器中的TextMeshPro进行更改后,所有ExecuteInEditMode字体大小都会在统一运行时恢复

在使用编辑器中的TextMeshPro进行更改后,所有ExecuteInEditMode字体大小都会在统一运行时恢复
EN

Stack Overflow用户
提问于 2021-10-04 14:51:35
回答 2查看 473关注 0票数 0

“我的统一场景”有多个对象,其中包含一个TextMeshPro组件,我希望使用下面的代码以编程方式更改编辑器中的组件。当我将脚本附加到场景中的一个对象时,脚本将成功运行,尽管在Play模式中启动场景后,这些更改的字体大小都会恢复回(脚本执行前的值)。

初始字体大小= 0.06 ->附加脚本到对象,自动运行OnValidate ->新字体大小= 0.04 ->从对象中删除脚本,字体大小保持0.04 ->开始播放模式->字体大小恢复到0.06 ->退出播放模式->字体大小= 0.06

手动更改字体大小会维护新值,即使在播放模式下也是如此(因此不进行反转)。在使用脚本时,什么会导致字体大小持久性问题?

代码语言:javascript
复制
[ExecuteInEditMode]
public class ChangeAllFonts : MonoBehaviour
{
    void OnValidate()
    {
        TextMeshPro[] textMeshPro_Objects = Object.FindObjectsOfType<TextMeshPro>();
        foreach (TextMeshPro textMeshPro_Object in textMeshPro_Objects)
        {
            textMeshPro_Object.fontSize = 0.04f;
        }
    }
}
EN

回答 2

Stack Overflow用户

发布于 2021-10-28 03:21:09

不确定,但我怀疑这个问题与序列化有关。您更改的是值,但不是单元存储的序列化值,而是在会话之间持续存在的值。因此,当您点击play时,编辑器会话就会结束,并且统一将搜索序列化的值。

我建议从序列化对象访问字体属性并以这种方式更改它。因此,您需要将TMP对象转换为序列化对象,找到正确的属性,然后修改它。

每次调用OnValidate时,为所有TMP对象运行此脚本可能是性能密集型的。最好是将其作为按钮或菜单项,仅在您决定运行时才运行。

票数 0
EN

Stack Overflow用户

发布于 2022-11-29 12:15:36

您可以尝试将fontSize值保存并加载到playerPrefs中或使用JSON。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69438057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档