コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】uGUI のスクロールを下に引っ張って更新できる「Unity-PullToRefresh」紹介

はじめに

「Unity-PullToRefresh」を Unity プロジェクトに導入することで
uGUI のスクロールを下に引っ張って更新できるようになります

使用例

f:id:baba_s:20190103205424g:plain

使い方

using PullToRefresh;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class MyScrollView : ScrollRect, IScrollable
{
    private bool m_dragging;

    public bool Dragging { get { return m_dragging; } }

    public override void OnBeginDrag( PointerEventData eventData )
    {
        base.OnBeginDrag( eventData );

        m_dragging = true;
    }

    public override void OnEndDrag( PointerEventData eventData )
    {
        base.OnEndDrag( eventData );

        m_dragging = false;
    }
}

ScrollRect を継承し、IScrollable を実装した独自の ScrollRect クラスを用意します

f:id:baba_s:20190103205609p:plain

先ほど用意した ScrollRect コンポーネントを UI オブジェクトにアタッチして
されに「UIRefreshControl」コンポーネントをアタッチします

UIRefreshControl の「Scroll Rect」に独自の ScrollRect コンポーネントを設定し、
「Trans Icon Loading」にスクロール更新中に表示するオブジェクトを設定します

using PullToRefresh;
using System.Collections;
using UnityEngine;

public class Example : MonoBehaviour
{
    public UIRefreshControl m_control;

    private void Start()
    {
        // 表示更新する時に呼び出されるイベントを登録
        m_control.OnRefresh.AddListener( OnRefresh );
    }

    private void OnRefresh()
    {
        StartCoroutine( FetchDataDemo() );
    }

    private IEnumerator FetchDataDemo()
    {
        yield return new WaitForSeconds( 1 );
        
        // 表示更新を終了
        m_control.EndRefreshing();
    }
}

最後にこのようなコードを記述することで
表示更新のイベントを検知できるようになります