コガネブログ

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

【Unity】【UGUI Super ScrollView】項目数の設定・追加、特定の項目へのジャンプを実装する

はじめに

 
「UGUI Super ScrollView」では
項目数の設定・追加、特定の項目へのジャンプを実装することができます

作成例は上記の GitHub リポジトリの
「Assets/Example/04_TopToBottomDynamic/Example.unity」シーンで確認できます

作成例

f:id:baba_s:20180309112201g:plain

ソースコード

スクロールの項目で使用するデータ

public sealed class ListItemData
{
    private readonly string m_name;

    public string Name { get { return m_name; } }

    public ListItemData( string name )
    {
        m_name = name;
    }
}

スクロールの項目

using UnityEngine;
using UnityEngine.UI;

[DisallowMultipleComponent]
public sealed class ListItemUI : MonoBehaviour
{
    [SerializeField] private Button m_buttonUI  = null;
    [SerializeField] private Text   m_textUI    = null;

    private ListItemData m_data;

    private void Awake()
    {
        m_buttonUI.onClick.AddListener( () => print( m_data.Name ) );
    }

    public void SetDisp( ListItemData data )
    {
        m_data = data;

        m_textUI.text = data.Name;
    }
}

スクロールビュー

using SuperScrollView;
using System.Linq;
using UnityEngine;

[DisallowMultipleComponent]
public sealed class Example : MonoBehaviour
{
    [SerializeField] private LoopListView2  m_view      = null;
    [SerializeField] private ListItemUI     m_original  = null;

    private ListItemData[] m_list;

    private string m_setCount       = "0";
    private string m_addCount       = "0";
    private string m_jumpToIndex    = "0";

    private void Start()
    {
        m_list = Enumerable
            .Range( 0, 1000 )
            .Select( c => ( c + 1 ).ToString( "0000" ) )
            .Select( c => new ListItemData( c ) )
            .ToArray()
        ;

        m_view.InitListView( m_list.Length, OnUpdate );
    }

    private LoopListViewItem2 OnUpdate( LoopListView2 view, int index )
    {
        if ( index < 0 || m_list.Length <= index ) return null;

        var data    = m_list[ index ];
        var itemObj = view.NewListViewItem( m_original.name );
        var itemUI  = itemObj.GetComponent<ListItemUI>();

        itemUI.SetDisp( data );

        return itemObj;
    }

    private void OnGUI()
    {
        m_setCount = GUILayout.TextField( m_setCount );
        int setCount = 0;
        int.TryParse( m_setCount, out setCount );
        if ( GUILayout.Button( "項目数設定" ) )
        {
            m_view.SetListItemCount( setCount, false );
        }

        m_addCount = GUILayout.TextField( m_addCount );
        int addCount = 0;
        int.TryParse( m_addCount, out addCount );
        if ( GUILayout.Button( "項目数追加" ) )
        {
            int count = m_view.ItemTotalCount + addCount;
            m_view.SetListItemCount( count, false );
        }

        m_jumpToIndex = GUILayout.TextField( m_jumpToIndex );
        int jumpToIndex = 0;
        int.TryParse( m_jumpToIndex, out jumpToIndex );
        if ( GUILayout.Button( "特定の項目にジャンプ" ) )
        {
            m_view.MovePanelToItemIndex( jumpToIndex, 0 );
        }

        if ( GUILayout.Button( "位置リセット" ) )
        {
            m_view.MovePanelToItemIndex( 0, 0 );
        }
    }
}

ゲームオブジェクト

スクロールの項目

f:id:baba_s:20180308212913p:plain

スクロールビュー

f:id:baba_s:20180308212926p:plain

スクロールビューを操作するクラス

f:id:baba_s:20180308212937p:plain