如何设置TextMeshPro文本切换斜体/常规样式(家长验证场景)
实现家长验证UI反馈的解决方案
第一步:完善NumberItem组件
你的每个数字按钮都挂载了NumberItem,需要给它添加TextMeshPro引用和样式控制方法:
using TMPro; using UnityEngine; public class NumberItem : MonoBehaviour { private ParentSecureController _controller; public int number; // 在Inspector给每个按钮设置对应数字(如5、3等) public TextMeshProUGUI numberText; // 拖入按钮上的TextMeshPro组件 public void SetParentSecureController(ParentSecureController controller) { _controller = controller; } // 数字按钮点击事件绑定此方法 public void OnNumberClicked() { _controller.CheckInput(number); } // 设置文本斜体/常规样式 public void SetItalic(bool isItalic) { numberText.fontStyle = isItalic ? FontStyles.Italic : FontStyles.Normal; } }
第二步:修改ParentSecureController逻辑
调整输入校验逻辑,同时加入UI样式控制:
using DefaultNamespace.Logging; using DefaultNamespace.ParentSecurity; using DefaultNamespace.SceneManager; using UnityEngine; public class ParentSecureController : MonoBehaviour { public SceneManager sceneManager; public SceneNames targetSceneName; private readonly int[] code = new int[5] { 5, 3, 4, 1, 2 }; private int index; private NumberItem[] _numberItems; // 缓存所有数字按钮引用 private void Start() { _numberItems = GetComponentsInChildren<NumberItem>(); foreach (var numberItem in _numberItems) { numberItem.SetParentSecureController(this); numberItem.SetItalic(false); // 初始化样式为常规 } } public void CheckInput(int number) { CustomLogger.Log("In CheckInput, code:" + code); CustomLogger.Log("In CheckInput, index:" + index); CustomLogger.Log("In CheckInput, nbr:" + number); if (number == 0) return; // 输入正确的情况 if (number == code[index]) { // 找到当前正确数字的按钮,设置为斜体 var correctItem = FindNumberItemByValue(code[index]); correctItem?.SetItalic(true); index++; // 序列全部输入完成,跳转场景 if (index >= code.Length) { sceneManager.LoadScene(targetSceneName); } } // 输入错误的情况 else { ResetAllNumberStyles(); // 重置所有按钮为常规样式 index = 0; } } // 根据数字值找到对应按钮 private NumberItem FindNumberItemByValue(int value) { foreach (var item in _numberItems) { if (item.number == value) { return item; } } return null; } // 重置所有按钮文本样式 private void ResetAllNumberStyles() { foreach (var item in _numberItems) { item.SetItalic(false); } } }
关键逻辑说明
- 初始化时缓存所有
NumberItem,避免重复查找组件,提升性能 - 输入正确时,匹配当前序列位的数字按钮,将其TextMeshPro设置为斜体
- 输入错误时,批量重置所有按钮的文本样式为常规,同时重置输入索引
- 修正了原脚本中提前跳转场景的问题,改为判断索引等于密码长度时再跳转,适配后续密码长度修改
内容的提问来源于stack exchange,提问作者Alenasteffx
相关产品推荐
相关产品推荐

