Unity之自定义Text组件默认属性值

内容将会持续更新,有错误的地方欢迎指正,谢谢!
 

Unity之自定义Text组件默认属性值
     
TechX 坚持将创新的科技带给世界!

拥有更好的学习体验 —— 不断努力,不断进步,不断探索
TechX —— 心探索、心进取!

助力快速掌握 Text 组件

为初学者节省宝贵的学习时间,避免困惑!


前言:

  在做项目的时候策划要求软件中出现的字体要是美术设定好的字体,而不是默认的Arial字体,由于很多时候在创建Text的时候都会忽略设置字体,而且手动去一个个的设置字体有点麻烦,所以就开发了这个功能,在创建Text组件的时候直接修改默认属性值。


TechX 教程效果:

在这里插入图片描述


文章目录

  • 一、创建Text组件默认配置文件
  • 二、加载配置文件并设置Text组件默认值
  • 三、Text组件默认配置文件的加载与保存


一、创建Text组件默认配置文件


在这里我们创建一个ScriptableObject类型的配置文件来保存要修改的默认值,其中包含:

  • 字体
  • 字体大小
  • 字体颜色
  • 对齐方式

在创建配置文件时,创建默认值,其中SourceHanSansCN-Regular为字体资源,在使用时可以换成你自己的字体

[CreateAssetMenu(fileName = "TextDefaultSettingConfig", menuName = "ScriptableObjects/TextDefaultSettingConfig", order = 1)]
[System.Serializable]
public class TextDefaultSettingConfig : ScriptableObject
{[SerializeField, HideInInspector]private bool isInitialized;//自定义默认字体public Font defaultFont;//自定义默认字体大小public int defaultFontSize;//自定义默认字体颜色public Color defaultFontColor;//自定义默认文本对齐方式public TextAnchor defaultAlignment;private void OnEnable(){if (isInitialized == false){defaultFont = Resources.Load<Font>("SourceHanSansCN-Regular");defaultFontSize = 20;defaultFontColor = new Color(1, 1, 1, 1);defaultAlignment = TextAnchor.MiddleCenter;isInitialized = true;}}
}
  • 设置默认字体为SourceHanSansCN-Regular字体
  • 设置默认字体大小为20
  • 设置默认字体颜色为白色
  • 设置默认对齐方式为居中对齐

在这里插入图片描述



二、加载配置文件并设置Text组件默认值


为了方便使用,要求在创建Text对象的时候就直接应用默认配置,而不需要做其他额外的操作。

ObjectFactory.componentWasAdded能够检测到场景中脚本的挂载,当我们创建Text对象时能够触发该事件。

可以通过[InitializeOnLoad]特性在初始化加载时对ObjectFactory.componentWasAdded事件进行注册。

当挂载的脚本是Text组件时,就可以加载配置文件中的值来应用到Text组件上。

[InitializeOnLoad]
public class TextDefaultFontSetter
{public TextDefaultSettingConfig profile;static TextDefaultFontSetter(){//订阅创建新对象时触发的事件ObjectFactory.componentWasAdded -= OnComponentWasAdded;ObjectFactory.componentWasAdded += OnComponentWasAdded;}private static void OnComponentWasAdded(Component component){if(component is Text){SetTextDefaultValueDelay(component as Text);}}private static void SetTextDefaultValueDelay(Component component){profile = Resources.Load<TextDefaultSettingConfig>("TextDefaultSettingConfig");SetDefaultValueDelay((Text)component, profile);}private static void SetDefaultValueDelay(Text textComponent, TextDefaultSettingConfig settingConfig){// 确保颜色设置在所有其他设置之后EditorApplication.delayCall += OnDelayCall;void OnDelayCall(){SetDefaultFont(textComponent, settingConfig);SetDefaultSize(textComponent, settingConfig);SetDefaultAlignment(textComponent, settingConfig);SetDefaultColor(textComponent, settingConfig);EditorApplication.delayCall -= OnDelayCall;}}private static void SetDefaultFont(Text textComponent, TextDefaultSettingConfig settingConfig){if (textComponent == null) return;//将文本组件的字体设置为自定义默认字体if (settingConfig == null || settingConfig.defaultFont == null){textComponent.font = Resources.GetBuiltinResource<Font>("Arial.ttf");Debug.LogWarning("自定义字体为空,请检查配置文件是否正确。使用默认Arial字体。");}else{textComponent.font = settingConfig.defaultFont;}EditorUtility.SetDirty(textComponent);}private static void SetDefaultColor(Text textComponent, TextDefaultSettingConfig settingConfig){if (textComponent == null) return;textComponent.color = settingConfig.defaultFontColor;EditorUtility.SetDirty(textComponent);}private static void SetDefaultSize(Text textComponent, TextDefaultSettingConfig settingConfig){if (textComponent == null) return;textComponent.fontSize = settingConfig.defaultFontSize;EditorUtility.SetDirty(textComponent);}private static void SetDefaultAlignment(Text textComponent, TextDefaultSettingConfig settingConfig){if (textComponent == null) return;textComponent.alignment = settingConfig.defaultAlignment;EditorUtility.SetDirty(textComponent);}
}

在新建Text对象时,配置文件默认值已经应用到了Text组件上

在这里插入图片描述



三、Text组件默认配置文件的加载与保存


对于一些以前创建好的Text文本,如果也想使用配置文件中的值,那么就可以通过手动加载配置文件的方式来应用到Text组件上。

或者是对Text组件进行了合适的设置,想把这个设置保存到配置文件中,从而可以应用到其他Text组件上,那么你就可以使用Save保存设置。

[CustomEditor(typeof(Text))]
public class TextExtension : UnityEditor.UI.TextEditor
{private Text text => base.target as Text;public TextDefaultSettingConfig profile;protected override void OnEnable(){base.OnEnable();profile = Resources.Load<TextDefaultSettingConfig>("TextDefaultSettingConfig");}public override void OnInspectorGUI(){// 添加分隔线EditorGUILayout.Space();EditorGUILayout.LabelField("Custom Default Settings", EditorStyles.boldLabel);profile = (TextDefaultSettingConfig)EditorGUILayout.ObjectField("Profile", profile, typeof(TextDefaultSettingConfig), false);EditorGUILayout.BeginHorizontal();GUILayout.FlexibleSpace(); // 添加灵活空间if (GUILayout.Button("Load", GUILayout.Width(50))){text.font = profile.defaultFont;text.alignment = profile.defaultAlignment;text.fontSize = profile.defaultFontSize;text.color = profile.defaultFontColor;}if (GUILayout.Button("Save", GUILayout.Width(50))){profile.defaultFont = text.font;profile.defaultAlignment = text.alignment;profile.defaultFontSize = text.fontSize;profile.defaultFontColor = text.color;}EditorGUILayout.Space();EditorGUILayout.EndHorizontal();base.OnInspectorGUI();}
}

Profile为默认的配置文件

通过Load可以加载配置文件并应用到Text组件上

通过Save可以保存当前Text上的值到配置文件中

在这里插入图片描述





TechX —— 心探索、心进取!

每一次跌倒都是一次成长

每一次努力都是一次进步

END
感谢您阅读本篇博客!希望这篇内容对您有所帮助。如果您有任何问题或意见,或者想要了解更多关于本主题的信息,欢迎在评论区留言与我交流。我会非常乐意与大家讨论和分享更多有趣的内容。
如果您喜欢本博客,请点赞和分享给更多的朋友,让更多人受益。同时,您也可以关注我的博客,以便及时获取最新的更新和文章。
在未来的写作中,我将继续努力,分享更多有趣、实用的内容。再次感谢大家的支持和鼓励,期待与您在下一篇博客再见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/36873.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

普通集群与镜像集群配置

一. 环境准备 关闭防火墙和selinux&#xff0c;进行时间同步 rabbitmq-1 Rocky_linux9.4 192.168.226.22rabbitmq-2Rocky_linux9.4192.168.226.23rabbitmq-3Rocky_linux9.4192.168.226.24 修改主机名#192.168.226.22 hostnamectl set-hostname rabbitmq-1#192.168.226.22 ho…

isalpha()方法——判断字符串是否只由字母组成

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 isalpha()方法用于判断字符串是否只由字母组成。isalpha()方法的格式如下&#xff1a; str.isalpha() 如果字符串中至少有一个字符并且所…

「C++系列」C++ 基本语法

文章目录 一、C 基本语法1. **预处理指令**2. **数据类型**3. **变量和常量**4. **运算符**5. **控制流语句**6. **函数**7. **数组**8. **指针和引用**9. **结构体和类**10. **输入/输出**11. **异常处理**12. **命名空间** 二、C 程序结构1. 程序流程结构2. 文件结构3. 编译预…

MySQL之聚簇索引和非聚簇索引

1、什么是聚簇索引和非聚簇索引&#xff1f; 聚簇索引&#xff0c;通常也叫聚集索引。 非聚簇索引&#xff0c;指的是二级索引。 下面看一下它们的含义&#xff1a; 1.1、聚集索引选取规则 如果存在主键&#xff0c;主键索引就是聚集索引。如果不存在主键&#xff0c;将使…

【Lua】第二篇:打印函数和注释

文章目录 一. 打印函数二. 注释方式1. 单行注释2. 多行注释 一. 打印函数 Lua 程序是以 .lua 结尾的文件&#xff0c;创建一个的 Test.lua 的文件&#xff0c;使用 print 函数输出字符串"Hello World"&#xff1a; print(Hello World) 保存之后使用命令lua 文件名编…

Java | Leetcode Java题解之第206题反转链表

题目&#xff1a; 题解&#xff1a; class Solution {public ListNode reverseList(ListNode head) {if (head null || head.next null) {return head;}ListNode newHead reverseList(head.next);head.next.next head;head.next null;return newHead;} }

SpringBoot学习04-[定制SpringMVC]

定制SpringMVC 定制SpringMvc的自动配置定制springmvc-configurePathMatch配置定制SpringMVC-拦截器Interceptor定制SpringMVC-CORS配置全局cors配置针对某个方法加跨域解决 WebMvcConfigurer原理定制SpringMVC-JSONJSON开发jackson的使用定制化json序列化和反序列化 JSON国际化…

CriticGPT: 用 GPT-4 找出 GPT-4 的错误

CriticGPT 是 OpenAI 发布的一个基于 GPT-4 的模型&#xff0c;它可以帮助我们人类 Review 并纠正 ChatGPT 在生成代码时的错误。使用 CriticGPT 审查代码时&#xff0c;有 60% 的概率生成的代码更好更正确。

最近写javaweb出现的一个小bug---前端利用 form 表单传多项数据,后端 Servlet 取出的各项数据均为空

目录&#xff1a; 一. 问题引入二 解决问题 一. 问题引入 近在写一个 java web 项目时&#xff0c;遇到一个让我头疼了晚上的问题&#xff1a;前端通过 post 提交的 form 表单数据可以传到后端&#xff0c;但当我从 Servlet 中通过 request.getParameter(“name”) 拿取各项数…

【小沐学AI】Python实现语音识别(faster-whisper-webui)

文章目录 1、简介1.1 whisper1.2 faster-whisper 2、安装3、测试结语 1、简介 1.1 whisper https://github.com/openai/whisper Whisper 是一种通用语音识别模型。它是在各种音频的大型数据集上训练的&#xff0c;也是一个多任务模型&#xff0c;可以执行多语言语音识别、语音…

【JVM基础篇】垃圾回收

文章目录 垃圾回收常见内存管理方式手动回收&#xff1a;C内存管理自动回收(GC)&#xff1a;Java内存管理自动、手动回收优缺点 应用场景垃圾回收器需要对哪些部分内存进行回收&#xff1f;不需要垃圾回收器回收需要垃圾回收器回收 方法区的回收代码测试手动调用垃圾回收方法Sy…

Matlab|分时电价环境下用户负荷需求响应分析方法

主要内容 本程序复现《分时电价环境下用户负荷需求响应分析方法》文献中的方法&#xff0c;通过用户对不同时间下用电需求的自弹性和交叉弹性系数分析获得用户需求响应矩阵&#xff0c;进而利用该矩阵对用户在实行基于电价的需求侧管理后的负荷变化情况进行快速分析。 1.1…

ONLYOFFICE8.1版本桌面编辑器简单测评

ONLYOFFICE官网链接&#xff1a;在线PDF查看器和转换器 | ONLYOFFICE ONLYOFFICE介绍&#xff1a;https://www.onlyoffice.com/zh/office-suite.aspx OnlyOffice 是一款免费且开源的 Office 协作办公套件&#xff0c;支持桌面端和移动端等多平台&#xff0c;由一家领先的 IT 公…

【python】OpenCV—Aruco

文章目录 Detect ArucoGuess Aruco Type Detect Aruco 学习参考来自&#xff1a;OpenCV基础&#xff08;19&#xff09;使用 OpenCV 和 Python 检测 ArUco 标记 更多使用细节可以参考&#xff1a;【python】OpenCV—Color Correction 源码&#xff1a; 链接&#xff1a;http…

为什么IP地址会被列入黑名单?

您是否曾经历过网站访客数量骤减或电子邮件投递失败的困扰&#xff1f;这背后或许隐藏着一个常被忽略的原因&#xff1a;您的IP地址可能已经被列入了黑名单内。尽管您并没有进行任何违法的网络操作&#xff0c;但这个问题依然可能出现。那么&#xff0c;究竟黑名单是什么&#…

【VMware】VMware 开启的虚拟机无法联网的解决方案

目录 &#x1f30a;1. 问题说明 &#x1f30a;2. 解决方案 &#x1f30d;2.1 查看虚拟网络编辑器 &#x1f30d;2.2 设置 vmnet &#x1f30d;2.3 设置虚拟机网络 &#x1f30d;2.4 Xshell连接虚拟机 &#x1f30a;1. 问题说明 虚拟机 ping 其他网页显示失败,比如&#…

数据质量管理-时效性管理

前情提要 根据GB/T 36344-2018《信息技术 数据质量评价指标》的标准文档&#xff0c;当前数据质量评价指标框架中包含6评价指标&#xff0c;在实际的数据治理过程中&#xff0c;存在一个关联性指标。7个指标中存在4个定性指标&#xff0c;3个定量指标&#xff1b; 定性指标&am…

【旭日x3派】部署官方yolov5全流程

地平线旭日x3派部署yolov5--全流程 前言一、深度学习环境安装二、安装docker三、部署3.1、安装工具链镜像3.2、配置天工开物OpenExplorer工具包3.3、创建深度学习虚拟空间&#xff0c;安装依赖&#xff1a;3.4、下载yolov5项目源码并运行3.5、pytorch的pt模型文件转onnx3.6、最…

前端git约定式规范化提交-commitizen

当使用commitizen进行代码提交时&#xff0c;commitizen会提示你在提交代码时填写所必填的提交字段信息内容。 1、全局安装commitizen npm install -g commitizen4.2.4 2、安装并配置 cz-customizeable 插件 2.1 使用 npm 下载 cz-customizeable npm i cz-customizeable6.…

【论文复现】——基于LM优化的NDT点云配准算法

目录 一、算法原理1、论文概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。 一、算法原理 1、论文概述 传统的正态分布变换配准算法处理初始位姿变换相…