3 Match 움직임 핵심 로직
public IEnumerator PositionUpCharacterObject()
{
var moves = new List<(GameObject, Vector3Int)>();
for (var x = 0; x < gridManager.gridWidth; x++)
{
var emptyCellCount = 0;
for (var y = gridManager.gridHeight - 1; y >= 0; y--)
{
var currentPosition = new Vector3Int(x, y, 0);
var currentObject = CharacterObject(currentPosition);
if (currentObject == null)
{
emptyCellCount++;
}
else if (emptyCellCount > 0)
{
var targetPosition =
new Vector3Int(x, y + emptyCellCount, 0);
moves.Add((currentObject, targetPosition));
}
}
}
// PerformMoves를 시작하고 PositionUpCharacterObject
// 코루틴을 일시 중지하고 PerformMoves가 완료될 때까지 기다립니다.
yield return StartCoroutine(PerformMoves(moves));
// PerformMoves가 완료된 후 PositionUpCharacterObject가
// 특정 지연을 기다리며 계속됩니다.
// SpawnAndMoveNewCharacters를 시작하고 PositionUpCharacterObject
// 코루틴을 일시 중지하고
// SpawnAndMoveNewCharacters가 완료될 때까지 기다립니다.
yield return StartCoroutine(SpawnAndMoveNewCharacters());
// SpawnAndMoveNewCharacters가 완료된 후 PositionUpCharacterObject가
// 특정 지연을 기다리며 계속됩니다.
// CheckMatchesAndMoveCharacters를 시작하고
// PositionUpCharacterObject 코루틴을 일시 중지하고
// CheckMatchesAndMoveCharacters가 완료될 때까지 기다립니다.
yield return
StartCoroutine(matchManager.CheckMatchesAndMoveCharacters());
}