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

Unity TextMeshPro Dropdown单个选项设置不同字体及相关问题解决方案问询

TMP Dropdown 需求实现方案

该需求完全可以实现,以下提供两种不同场景的落地方法:


方案1:保留虚拟占位项,自定义首选项样式

通过继承TMP_Dropdown重写选项生成逻辑,即可单独修改第一个虚拟项的字体样式、颜色、大小等属性:

  1. 新建自定义Dropdown脚本,代码如下:
using UnityEngine;
using TMPro;

public class CustomStyleDropdown : TMP_Dropdown
{
    [Header("首选项特殊样式配置")]
    public FontStyles firstItemFontStyle = FontStyles.Bold;
    public Color firstItemColor = new Color(0.3f, 0.3f, 0.3f, 1f);
    public int firstItemFontSizeOffset = 2;

    protected override GameObject CreateOptionItem(int index)
    {
        GameObject optionItem = base.CreateOptionItem(index);
        TMP_Text itemText = optionItem.GetComponentInChildren<TMP_Text>();

        // 仅对第一个虚拟项应用特殊样式
        if (index == 0 && itemText != null)
        {
            itemText.fontStyle = firstItemFontStyle;
            itemText.color = firstItemColor;
            itemText.fontSize += firstItemFontSizeOffset;
        }
        return optionItem;
    }
}
  1. 将原节点上的TMP Dropdown组件替换为上述CustomStyleDropdown,即可在Inspector面板直接调整首选项的样式参数,运行时动态修改选项列表也会自动生效。

方案2:无需虚拟项,解决已选中项点击不触发回调的问题

如果不需要保留“未选择”的状态,更推荐直接修改Dropdown的选择逻辑,让点击任意选项(包括已选中项)都触发回调,彻底规避虚拟项的额外处理成本:

  1. 新建自定义Dropdown脚本,代码如下:
using UnityEngine;
using TMPro;
using UnityEngine.Events;

public class NoLimitDropdown : TMP_Dropdown
{
    [Header("点击任意选项都会触发的回调")]
    public UnityEvent<int> onOptionClicked;

    protected override void SelectItem(int itemIndex)
    {
        // 优先触发自定义回调,无论选中值是否变化
        onOptionClicked?.Invoke(itemIndex);
        base.SelectItem(itemIndex);
    }
}
  1. 将原On Value Changed事件绑定的业务逻辑,转移到新的onOptionClicked事件上即可。

内容的提问来源于stack exchange,提问作者mike

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:36:03