You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 05:10:04