[Unity学习]使用ScrollRect实现自动滚动到底部显示实时消息,并在拖动的时候取消自动滚动,再次手动滑到底部,又继续自动滚动

Posted 努力码代码走上人生巅峰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Unity学习]使用ScrollRect实现自动滚动到底部显示实时消息,并在拖动的时候取消自动滚动,再次手动滑到底部,又继续自动滚动相关的知识,希望对你有一定的参考价值。

首先需要重写ScrollRect组件:

using UnityEngine.UI;
using UnityEngine.EventSystems;

public class MScrollRect : ScrollRect

    public bool isDrag;
    public override void OnDrag(PointerEventData eventData)
    
        base.OnDrag(eventData);
        isDrag = true;
    

    public override void OnEndDrag(PointerEventData eventData)
    
        base.OnEndDrag(eventData);
        if (normalizedPosition.y<=0)
        
            isDrag = false;
        
    

下面通过协程实现在不滚动ScrollRect的时候,自动滚动到底部。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public static class UIHelper

 	public static void AddScrollText(Text prefab, RectTransform contentRoot, string text, MScrollRect scrollRect)
    
        if (contentRoot == null)
            return;

        var listItem = GameObject.Instantiate<Text>(prefab, contentRoot, false);
        listItem.text=text;

        if (scrollRect != null && scrollRect.isActiveAndEnabled)
            scrollRect.StartCoroutine(ScrollToBottom(scrollRect));
    

    public static IEnumerator ScrollToBottom(MScrollRect scrollRect)
    
        yield return null;

        if (scrollRect != null && scrollRect.isActiveAndEnabled&&!scrollRect.isDrag)
            scrollRect.normalizedPosition = new Vector2(0, 0);
    


 

使用时,写下面类似代码即可:

using UnityEngine;
using UnityEngine.UI;

public class AutoScrollTest : MonoBehaviour

    public Text textPrefab;
    public RectTransform contentRoot;
    public MScrollRect scrollRect;
    private float interval = 1;
    private float time=0;
    private void Update()
    
        time += Time.deltaTime;
        if (time>=interval)
        
            AddText();
            time = 0;
        
    

    public void AddText()
    
        UIHelper.AddScrollText(textPrefab, contentRoot, time.ToString(), scrollRect);
    


Unity原生Scroll View更改配置如下:

其中ScrollView游戏物体更改组件如下:

content配置如下:

实现效果如下:

大功告成!加上对象池模式控制添加的text实例效果会更好哦。

以上是关于[Unity学习]使用ScrollRect实现自动滚动到底部显示实时消息,并在拖动的时候取消自动滚动,再次手动滑到底部,又继续自动滚动的主要内容,如果未能解决你的问题,请参考以下文章

[Unity学习]使用ScrollRect实现自动滚动到底部显示实时消息,并在拖动的时候取消自动滚动,再次手动滑到底部,又继续自动滚动

Unity UGUIScrollRect 动态缩放格子大小,自动定位到中间的格子

优化ScrollRect ,实现自动定位到Item中心

Unity之滑页效果&基于ScrollRect实现

Unity之滑页效果&基于ScrollRect实现

Unity之滑页效果&基于ScrollRect实现