Если брать за основу то что есть и не переписывать, то добавить в
BoardManager.cs метод определения возможной комбинации
Используется csharp
public bool CheckCombination(GameObject objectForCheck)
{
SpriteRenderer spriteRenderer = objectForCheck.GetComponent<SpriteRenderer>();
if (spriteRenderer != null)
{
Sprite sprite = spriteRenderer.sprite;
if (sprite != null)
{
int x = -1, y = -1;
for (int i = 0; i < xSize; i++)
{
for (int j = 0; j < ySize; j++)
{
GameObject tmp = tiles[i, j];
if (tmp == objectForCheck)
{
x = i;
y = j;
break;
}
}
}
if (x != -1 && y != -1)
{
int minCombo = 3;
int minNeighbours = minCombo - 1;
// Horizontal
int start = Mathf.Max(x - minNeighbours, 0);
int end = Mathf.Min(x + minNeighbours, xSize - 1);
int found = 0;
for (int i = start; i <= end; i++)
{
GameObject go = tiles[i, y];
if (go != null)
{
SpriteRenderer tmp = go.GetComponent<SpriteRenderer>();
if (tmp != null && tmp.sprite == sprite)
{
if (++found >= minCombo)
return true;
}
else
{
found = 0;
if (i > x)
break;
}
}
}
// Vertical
start = Mathf.Max(y - minNeighbours, 0);
end = Mathf.Min(y + minNeighbours, ySize - 1);
found = 0;
for (int i = start; i <= end; i++)
{
GameObject go = tiles[x, i];
if (go != null)
{
SpriteRenderer tmp = go.GetComponent<SpriteRenderer>();
if (tmp != null && tmp.sprite == sprite)
{
if (++found >= minCombo)
return true;
}
else
{
found = 0;
if (i > y)
break;
}
}
}
}
}
}
return false;
}
А в
Tile.cs туда где происходит свап вместо
Используется csharp
SwapSprite(previousSelected.render);
написать
Используется csharp
if (BoardManager.instance.CheckCombination(gameObject))
{
SwapSprite(previousSelected.render);
}
Вот и не лень мне было о_О )
И скажу вам честно, так как в игре с того сайта сделано - определение фишки по ее спрайту, комбинации на рейкастах, получение компонентов... да и все остальное - это лютая дичь) Так сказать - посмотрите как сделано и никогда так сами не делайте)