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

Unity中如何通过代码判断滚动状态并动态显示滚动提示?

修复ScrollHint脚本问题

你的脚本存在两个核心问题:

  1. 启用时初始化不完整:只判断了底部提示,未处理顶部提示,也没检查是否实际可滚动
  2. 未判断滚动可行性:不管内容是否能滚动,都会根据normalizedPosition显示提示

以下是修复后的完整代码:

using UnityEngine;
using UnityEngine.UI;

public class ScrollHint : MonoBehaviour
{
    [SerializeField] private GameObject _topHint;
    [SerializeField] private GameObject _bottomHint;
    [SerializeField] private ScrollRect _scrollRect;

    private void OnEnable()
    {
        _scrollRect.onValueChanged.AddListener(OnScrollValueChanged);
        // 启用时立即更新提示状态
        UpdateHintStates();
    }

    private void OnDisable()
    {
        // 移除监听避免内存泄漏
        _scrollRect.onValueChanged.RemoveListener(OnScrollValueChanged);
    }

    private void OnScrollValueChanged(Vector2 vector)
    {
        UpdateHintStates();
    }

    private void UpdateHintStates()
    {
        // 先判断是否实际可垂直滚动
        bool canScrollVertically = IsScrollable();

        // 不可滚动时直接隐藏所有提示
        if (!canScrollVertically)
        {
            _topHint.SetActive(false);
            _bottomHint.SetActive(false);
            return;
        }

        float normalizedY = _scrollRect.verticalNormalizedPosition;

        // 顶部提示:当未滚动到最顶部时显示,否则隐藏
        _topHint.SetActive(normalizedY < 1f);
        // 底部提示:当未滚动到最底部时显示,否则隐藏
        _bottomHint.SetActive(normalizedY > 0f);
    }

    // 判断ScrollRect是否垂直可滚动
    private bool IsScrollable()
    {
        if (_scrollRect.content == null || _scrollRect.viewport == null)
            return false;

        // 内容高度 > 视口高度时才可以滚动
        float contentHeight = _scrollRect.content.rect.height;
        float viewportHeight = _scrollRect.viewport.rect.height;
        return contentHeight > viewportHeight;
    }
}

关键修复点说明

  • 新增滚动可行性判断:通过IsScrollable()方法检查内容高度是否超过视口,不可滚动时直接隐藏所有提示
  • 完整初始化逻辑:OnEnable中直接调用UpdateHintStates(),一次性完成所有提示的状态初始化
  • 简化状态更新逻辑:合并原有的UpdateScrollTips和BorderCheck,直接根据normalizedPosition设置提示的激活状态,避免冗余判断
  • 添加监听移除:OnDisable中移除ScrollRect的监听,防止对象销毁后出现空引用错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:52:42