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

Unity C#实现Dropdown选中项自动滚动及模板保持显示

Unity Dropdown 自定义功能实现

功能1:选择选项后模板保持可见

默认Unity Dropdown选中选项后会自动关闭下拉模板,要实现选中后保持模板可见,只需监听选项变更事件,在选中后强制重新打开模板即可:

using UnityEngine;
using UnityEngine.UI;

public class CustomDropdown : MonoBehaviour
{
    private Dropdown _dropdown;

    void Start()
    {
        _dropdown = GetComponent<Dropdown>();
        // 监听选项变更事件
        _dropdown.onValueChanged.AddListener(KeepTemplateVisible);
    }

    void KeepTemplateVisible(int selectedIndex)
    {
        // 切换模板显示状态(抵消默认的关闭操作)
        _dropdown.Toggle();
        // 也可以直接设置模板为可见:_dropdown.template.gameObject.SetActive(true);
    }
}

功能2:打开模板时自动滚动到上次选中的选项

要实现打开下拉框时自动定位到之前选中的选项,需要获取滚动组件,计算选中项的位置并调整滚动条:

在上面的脚本中补充以下代码:

private ScrollRect _dropdownScrollRect;
private RectTransform _contentRect;

void Start()
{
    _dropdown = GetComponent<Dropdown>();
    _dropdown.onValueChanged.AddListener(KeepTemplateVisible);

    // 获取下拉框的滚动组件和内容容器
    _dropdownScrollRect = _dropdown.template.GetComponentInChildren<ScrollRect>();
    _contentRect = _dropdownScrollRect.content;

    // 监听模板打开事件(通过Selectable的选中事件触发)
    _dropdown.template.GetComponent<Selectable>().onSelect.AddListener(_ => ScrollToLastSelected());
}

void ScrollToLastSelected()
{
    if (_dropdown.options.Count == 0) return;

    // 获取选中项的RectTransform
    RectTransform selectedItem = _contentRect.GetChild(_dropdown.value).GetComponent<RectTransform>();
    // 获取单选项高度(假设所有选项高度一致)
    float itemHeight = selectedItem.rect.height;
    // 计算内容容器总高度和视口高度
    float contentTotalHeight = _contentRect.rect.height;
    float viewportHeight = _dropdownScrollRect.viewport.rect.height;

    // 计算选中项需要滚动到的位置比例
    float targetScrollPos = 1 - ((_dropdown.value * itemHeight + itemHeight / 2) / (contentTotalHeight - viewportHeight));
    // 限制滚动范围在0-1之间
    targetScrollPos = Mathf.Clamp01(targetScrollPos);

    // 设置滚动条位置
    _dropdownScrollRect.verticalNormalizedPosition = targetScrollPos;
}

使用步骤

  1. 创建上述C#脚本,命名为CustomDropdown
  2. 将脚本挂载到场景中的Dropdown对象上
  3. 运行场景测试即可实现两个自定义功能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 07:51:20