파괴 시 생성과 정렬

파괴 시 생성과 정렬

- 이전과 이어서 Queue를 이용하여 다음 타일 파괴

- 파괴된 개수 만큼 생성하고 인덱스를 검사하면서 정렬

- 빈 인덱스에 추가

* 생성과 파괴가 잦으므로 ObjectPooling이 필요

* 주변 타일들도 검사하여 파괴하는 로직 필요

* 정렬 시 자연스럽게 이동하는 로직 필요

// 배열의 크기만큼 세로 줄 당 자리를 채워주게끔 정렬한 뒤
// while문에서 새롭게 타일들을 생성하여 자리에 채워줌

for (int i = 0; i < boardSize; i++)
{
    for (int j = 0; j < boardSize; j++)
    {
        tempIndex.x = j;
        tempIndex.y = i;
        if (!_board[tempIndex])
        {
            _nullQueue.Enqueue(tempIndex);
        }
        else if (_nullQueue.Count > 0)
        {
            Vector2Int nullIndex = _nullQueue.Dequeue();
            // 교환 세팅 로직...
            _nullQueue.Enqueue(tempIndex);
        }
    }



    while (_nullQueue.Count > 0)
    {
        CreateAdditionalTile();
    }

    _nullQueue.Clear();
}

private void CreateAdditionalTile()
{
    Vector2Int nullIndex = _nullQueue.Dequeue();
    // 타일 교환, 초기화 로직...
}

 

 

타일 초기화

커스텀 에디터를 이용한 타일 초기화

- 테스트 효율성을 위해 버튼으로 타일 초기화

* 초기 세팅에서 연결된 타일을 부시는 로직 필요

using UnityEditor;
using UnityEngine;

[CustomEditor(typeof(MainGame))]
public class BoardEditor : Editor
{
    private MainGame _board;

    private void OnEnable()
    {
        _board = (MainGame)target;
    }

    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        
        if (GUILayout.Button("ResetBoard"))
        {
            _board.InitBoard();
        }
    }
}

+ Recent posts