2022.4.18 5日目 今日はUnityで、読み込んだExcelデータを表示した後、そのデータを条件によってソートしてみます。
準備
以前にやったExcelデータを表示して以下GIFのような動作を実装しておきます。
ポップアップで表示しているcellは以下のようになっております。
「ID Name Level」の順で表示しています。
今回は、IDかLevelでソートできるようにしていきます。
ソートポップアップの準備
以下のように、ソートのポップアップを表示したら、ポップアップの外側をクリックすると非アクティブになるようにします。
以下のサイトを参考にしました。(感謝)
https://unity-senpai.hatenablog.com/entry/2019/03/27/012403
当たり判定をPopupにつけました。
BoxCollider2Dを付けて、IsTriggerにチェックを付けました。
以下のようなスクリプトを作成し、Popupにアタッチします。
SortPopup.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class SortPopup: MonoBehaviour {
[SerializeField] public GameObject sortPopup;
// Start is called before the first frame update
void Start() {
}
// Update is called once per frame
void Update() {
//ソートポップアップが無かったらreturn
if( sortPopup.activeSelf == false ) {
return;
}
//マウスでクリックしたら
if( Input.GetMouseButtonDown( 0 ) ) {
//Rayを飛ばして
Ray ray = Camera.main.ScreenPointToRay( Input.mousePosition );
//Rayの先に当たり判定のあるオブジェクトがあるかどうか
RaycastHit2D rayHit2D = Physics2D.Raycast( ( Vector2 ) ray.origin, ( Vector2 ) ray.direction );
//なかったらソートポップアップを消す
if( !rayHit2D ) {
sortPopup.SetActive( false );
}
}
}
}
これでソートのポップアップを表示したら、ポップアップの外側をクリックすると非アクティブになるようになりました。
ソートを実装する(仮)
public void OnClickLevelSortButton() {
for( int i = 0; i < cellNum; i++ ) {
GameObject temp = null;
if( _instance[ i ].GetComponent<Cell>().getCellLevel() > _instance[ i + 1 ].GetComponent<Cell>().getCellLevel() ) {
temp = _instance[ i ];
_instance[ i ] = _instance[ i + 1 ];
_instance[ i + 1 ] = temp;
}
}
}
こんな感じで書いてみましたが、別の場所でエラーが出てしまったので、明日はそこを修正して、動作を確認します。
今日は終わりです。