グリッド

m*nのスクロール可能なグリッドを作成します。
m=1であればメニューリスト等に利用可能です。

他のWidgetに比べて、作成する手順がやや複雑です。

YUI_INFO_GRID

グリッドを生成する際に利用する情報クラス

特筆項目内容
SetColRowNum 表示の行・列数と内部の行・列数を指定します。
SetRectMin 行数・列数から必要な最小グリッドサイズにします。
各アイテムクラスのサイズは後述のカスタムアイテムクラスで行います。
SetMoveType 移動タイプを指定する
完全制限・制限(慣性つき)・制限なしから選択します。
SetData 表示するカスタムデータクラスのListをセットします。
SELITEM_BACK_BLOCK カスタムアイテムクラスの背景を設定します。
カスタムグリッドクラスで個別に指定しても構いません。
SELFRAME_NORMAL_BLOCK アイテムマウスオーバー時のフレームスプライト指定ブロック
SELFRAME_PRESS_BLOCK アイテム押下時のフレームスプライト指定ブロック
SCROLL_H_BACK_BLOCK 水平スクロールバー背景のスプライト設定ブロック
SCROLL_H_COVER_BLOCK 水平スクロールバーカバーのスプライト設定ブロック
SCROLL_V_BACK_BLOCK 垂直スクロールバー背景のスプライト設定ブロック
SCROLL_V_COVER_BLOCK 垂直スクロールバーカバーのスプライト設定ブロック

カスタムクラスの定義

生成に際し、以下のカスタムクラスを定義する必要があります。
・カスタムパラメータクラス
・カスタムアイテムクラス
・カスタムグリッドクラス
各クラスのサンプルを以下に例として示します。

カスタムパラメータクラス

各グリッドアイテムの要素を示すパラメータクラスです。
グリッド生成時に配列としてセットし、コマンド通知時は選択アイテムのパラメータが親に送られます。


	using UnityEngine;
	using System.Collections;

	/// 【Sample】カスタムパラメータ.
	public class CCustomParam : YUI_PARAM_SELITEM {

		int m_nEquipID			= 0;

		public int EQUIP_ID	{ get { return this.m_nEquipID;	} }

		/// コンストラクタ.
		public CCustomParam( int nEquipID ) {
			m_nEquipID			= nEquipID;
		}

		/// 有効か.
		public bool IsValid() {
			return ( m_nEquipID != 0 );
		}
	}
	

本クラスにはグリッドの各アイテムに送りたいパラメータや
各アイテムの制御に利用する関数を格納してください。

カスタムアイテムクラス

グリッド内に表示するアイテム(セル)のクラスです。


	using UnityEngine;
	using System.Collections;

	/// 【Sample】カスタムアイテム.
	public class CCustomItem : YUI_SELITEM {

		/*!	アイテム横取得.
		 */
		public static new int CalcWidth( object rParam = null ) {
			return 200;
		}

		/*!	アイテム縦取得.
		 */
		public static new int CalcHeight( object rParam = null ) {
			return 100;
		}

		/*! 生成後処理.
		 */
		protected override void LateInit() {

			CCustomParam rParam = GetParam<CCustomParam>();
			if ( !rParam.IsValid() ) {
				return;
			}

			YUI_INFO_TEXT rInfo = new YUI_INFO_TEXT( this );
			rInfo.SetRectMin( 10, 10 );
			rInfo.SetText( rParam.EQUIP_ID.ToString() );
			YUIMgr.Create<YUI_TEXT>( rInfo );
		}
	}

上記例では渡されたカスタムパラメータのIDをテキストとして表示しています。
セルの大きさを決めるCalcWidthとCalcHeightは必要に応じて上書きしてください。

定義したカスタムパラメータはGetParam関数にて取得可能です。

カスタムグリッドクラス

グリッド内にセルを配置していくクラスです。
前述のカスタムパラメータ・カスタムアイテムを利用します。


	using UnityEngine;
	using System.Collections;

	/// 【Sample】カスタムグリッド.
	public class CCustomGrid : YUI_GRID {

		/*!	アイテム横取得.
		 */
		protected override int CalcItemWidth() {
			return CCustomItem.CalcWidth();
		}

		/*!	アイテム縦取得.
		 */
		protected override int CalcItemHeight() {
			return CCustomItem.CalcHeight();
		}

		/*!	アイテムの作成.
		 */
		protected override void MakeItem( int nIndex, object rDataRecv ) {

			if ( rDataRecv == null ) {
				return;
			}

			YUI_INFO_GRID rInfo = GetInfo<YUI_INFO_GRID>();
			CCustomParam rData = rDataRecv as CCustomParam;

			rData.SetUniqueID( YUIMgr.GetNewID() );
			int nX		= CalcPosX( nIndex );
			int nY		= CalcPosY( nIndex );
			int nW		= CalcItemWidth();
			int nH		= CalcItemHeight();
			YUI_INFO_SELITEM rInfoItem = new YUI_INFO_SELITEM( rData.UNIQUE_ID );
			rInfoItem.SetParent( this, m_rContentRect );
			rInfoItem.SetParam( rData );
			rInfoItem.SetRect( nX, nY, nW, nH );
			rInfoItem.SetSelectable( rData.IsValid() );
			rInfoItem.SetCommandParam( rData );
			CopySpriteBlock( rInfoItem, rInfo );
			YUIMgr.Create<CCustomItem>( rInfoItem );

			// セルのIDを保持.
			m_arSelItemID.Add( rData.UNIQUE_ID );

			// コマンド登録.
			RegCommand( rData.UNIQUE_ID, FUNC_SELITEM );
		}

		/*!	アイテム作成コルーチン.
		*/
		protected override IEnumerator CoMakeItem() {
			YUI_INFO_GRID rInfo = GetInfo<YUI_INFO_GRID>();

			// 一度全て削除.
			foreach ( int nID in m_arSelItemID ) {
				YUIMgr.DestroyByID( nID );
			}
			m_arSelItemID.Clear();

			// アイテム生成.
			for ( int nIndex = 0; nIndex < rInfo.ITEM_MAX; ++nIndex ) {

				// アイテム作成.
				MakeItem( nIndex, GetData<CCustomParam>( nIndex ) );

				if ( nIndex > rInfo.SHOW_MAX ) {
					yield return new WaitForSeconds( rInfo.PAGE_DELAY );
				}
			}
		}

	}

セルの大きさを決めるCalcItemWidth()とCalcItemHeight()は必ず継承してください。
本関数を利用して、グリッドの最小の大きさを計算します。

生成後、コルーチンのCoMakeItem()がコールされます。
ここで順にMakeItem()を呼ぶ事でセルが作成されます。
一度に全てのセルを作成しても問題はありませんが、大量のセルで時間がかかるのが 気になる場合はこのコルーチンで適宜yield returnを行って下さい。

MakeItem関数はセルを描画する際に呼ばれます。この関数も必ず継承してください。
生成の際にパラメータクラスにWidgetのユニークIDの登録。
また、メンバの配列に作成したユニークIDの登録が必要です。

カスタムクラスの登録

作成した自作クラスはYUIMgr本体に一度登録する必要があります。
起動後、初期化の時に下記を一度呼び出すようにしてください。
登録が必要なのはアイテムクラスとグリッドクラスです。


	YUIRsc.RegCustomRsc( typeof( CCustomItem ), YUIRsc.E_RSC.SELITEM );
	YUIRsc.RegCustomRsc( typeof( CCustomGrid ), YUIRsc.E_RSC.GRID );

生成方法

生成にあたり、グリッドに登録する配列の準備が必要です。


	// ソースの先頭にusing System.Collections.Generic;が必要.
	
	// 表示する行と列の数.
	int COL	= 3;
	int ROW = 3;
	
	List<CCustomParam> arParam = new List<CCustomParam>();
	for ( int i = 1; i <= 10; ++i ) {
		CCustomParam rParam = new CCustomParam( i );
		arParam.Add( rParam );
	}
	
	int nRowMax		= Mathf.CeilToInt( (float)arParam.Count / (float)COL );
	nRowMax			= ( ROW > nRowMax ) ? ROW : nRowMax;
	
	// リソース準備.
	YUIAsync rAsyncSelItem		= YUI.GetSpriteAsync( YUI.E_SPRITE.SELITEM );
	YUIAsync rAsyncFrame		= YUI.GetSpriteAsync( YUI.E_SPRITE.SELITEM_HIGHLIGHT );
	YUIAsync rAsyncScrollBackV	= YUI.GetSpriteAsync( YUI.E_SPRITE.SCROLL_BACK_V );
	YUIAsync rAsyncScrollCoverV	= YUI.GetSpriteAsync( YUI.E_SPRITE.SCROLL_COVER_V );
	
	// リスト作成.
	YUI_INFO_GRID rInfo = new YUI_INFO_GRID();
	rInfo.SetColRowNum( COL, COL, ROW, nRowMax );
	rInfo.SetAnchorPivot( YUI.E_ANCHOR.CENTER, YUI.E_PIVOT.CENTER );
	rInfo.SetRectMin( 0, 0 );
	rInfo.SetMoveType( YUI.E_MOVE_TYPE.CLAMPED );
	rInfo.SELITEM_BACK_BLOCK.SetSprite( rAsyncSelItem );
	rInfo.SELFRAME_NORMAL_BLOCK.SetSprite( rAsyncFrame, YUI.E_FILL_TYPE.SLICED, false );
	rInfo.SELFRAME_PRESS_BLOCK.SetSprite( rAsyncFrame, YUI.E_FILL_TYPE.SLICED, false );
	rInfo.SELFRAME_PRESS_BLOCK.SetSpriteColor( Color.blue );
	rInfo.SCROLL_V_BACK_BLOCK.SetSprite( rAsyncScrollBackV );
	rInfo.SCROLL_V_COVER_BLOCK.SetSprite( rAsyncScrollCoverV );
	rInfo.SetData( arParam );
	YUIMgr.Create<CCustomGrid>( rInfo );

上記の例では、その場で作成した10個のパラメータをリストとして渡し3*3のグリッドとして表示しています。

生成結果

※仮想解像度1280*800の場合