ПредишенСледващото

Програмиране Match3 игри на Unity - Програмиране - членове Directory

Първо, създайте блокове. За това ние използваме просто куб с различни цветове (взех 4 цвята) и задайте мащаба кубчета (0.8, 0.8, 0.8).
На следващо място, създаване на C # сценарий, ние го наричаме Match3

Това, което трябва да направите:
1) Генериране на дъската (дъски).
2) Избор на две пресечки.
3) Проверете дали те са в непосредствена близост.
4) обмен на позиции и данни.
5) сравнителни блокове.
6) унищожаването и размножаване сайтове.

? 200 '200px': '' + (this.scrollHeight + 5) + 'пиксела ");">
// Board
обществен инт # 91;,] борда;

// блокове
обществена трансформация # 91;] блок;

анулира Start (# 41;<
блокове = ново междинно съединение # 91, 10,10];
// Генериране на борда
GenBoard (# 41 ;;
>


анулира GenBoard (# 41;<
// 10х10 = 100blocks
за (междинно съединение х = 0 х за (междинно у = 0; Y Int randomNumber = Random.Range (0, block.Length # 41 ;; // ID
// блокове мицел
Transform OBJ = (Transform # 41; примери (блок # 91; randomNumber] .transform, нов Vector3 (х, у, 0 # 41;, Quaternion.identity # 41; като трансформация;
// присвоява родител
obj.parent = трансформиране;
// присвоява име
obj.name = "Блок # 91; X" + х + "Y" + у + "] ID:" + randomNumber;
// зададете идентификацията на борда на тази позиция
борда # 91; X, Y] = randomNumber;
>
>
>

Ние предаде на всеки блок на дъската и да се произволно номер за нея (това ще бъде цвета). Spawn единица.
Бъдете сигурни, за да присвоите всеки блок prefabs в блок масив.
Сега създайте нов скрипт. Нека го наречем Блок. Присвояване на този скрипт е създаден за всяка нова единица. Добавете няколко променливи за позицията и ID, те ще бъдат необходими по-късно.

? 200 '200px': '' + (this.scrollHeight + 5) + 'пиксела ");">
// позиция блок
обществен ID вътр;
обществен вътр х;
обществен инт у;

частен Vector3 myScale;
частен поплавък STARTTIME;

публично статично Transform изберете;
публично статично Transform moveTo;

анулира Start (# 41;<
myScale = transform.localScale;
StartTime = Time.time;
>

Сега трябва да добавите този скрипт за всеки блок, присвоите към мястото и ID. В Match3 скрипт в GenBoard функция за добавяне

? 200 '200px': '' + (this.scrollHeight + 5) + 'пиксела ");">
// Прикачване на скрипт за всеки блок
Блок б = obj.gameObject.AddComponent(# 41 ;;
// определя променлива
b.x = х;
b.y = Y;
b.ID = randomNumber;

Избирането на две пресечки.

За да изберете двата блока, ние трябва да се провери дали играчът е натиснат левия бутон на мишката. След това трябва да се провери по точно как блока приключи.
В блока скрипт, можем да използваме функция поставяне на показалеца, който се нарича, когато курсорът е над блок.
След това, ако нищо не е избрано, и играчът натисне левия бутон на мишката, изберете блока. И ако устройството е вече избрана - това изберете отново.
За да направите това, което трябва да се определят две статични променливи.

? 200 '200px': '' + (this.scrollHeight + 5) + 'пиксела ");">
публично статично Transform изберете;
публично статично Transform moveTo;

нищожен OnMouseExit (# 41;<
// нулиране блок СКАЛА
transform.localScale = myScale;
>

Проверете дали блоковете в близост до
За да проверите дали блоковете един до друг, трябва да знаете, техните позиции са.
Block.select използвате за достъп до статичната променлива. Ние получи трансформира избрания блок.
В Match3 скрипт във функцията Update, ние трябва да се провери дали двата блока са избрани. Ако е така, трябва да се обадите CheckIfNear функция, която връща истина или лъжа.

? 200 '200px': '' + (this.scrollHeight + 5) + 'пиксела ");">
нищожен Актуализация (# 41;<
ако (Block.select Block.moveTo # 41; // Проверете дали те са в близост до
ако (CheckIfNear (# 41; == вярно # 41;

? 200 '200px': '' + (this.scrollHeight + 5) + 'пиксела ");">
BOOL CheckIfNear (# 41;<
Блок SEL = Block.select.gameObject.GetComponent(# 41 ;;
Блок Mov = Block.moveTo.gameObject.GetComponent(# 41 ;;

// Проверете дали даден номер,
ако (sel.x-1 == mov.x sel.y == mov.y # 41;<
// Left
върнете вярно;
>
ако (sel.x + 1 == mov.x sel.y == mov.y # 41;<
// Право
върнете вярно;
>
ако (sel.x == mov.x sel.y + 1 == mov.y # 41;<
// Up
върнете вярно;
>
ако (sel.x == mov.x sel.y-1 == mov.y # 41;<
// Първа
върнете вярно;
>
Debug.Log ( "Какво се опитваш да избера?" # 41 ;;
върнете невярна;
>

Размяна блокови данни и промяна на позициите

За това ние отново се нуждаят от достъп до Блок компонент избран блок и промяна променливи.

? 200 '200px': '' + (this.scrollHeight + 5) + 'пиксела ");">
нищожен Swap (# 41;<
Блок SEL = Block.select.gameObject.GetComponent(# 41 ;;
Блок Mov = Block.moveTo.gameObject.GetComponent(# 41 ;;

Vector3 tempPos = sel.transform.position;
Int tempX = sel.x;
Int tempY = sel.y;

// обмен позиции
sel.transform.position = mov.transform.position;
mov.transform.position = tempPos;


// обмен на данни
sel.x = mov.x;
sel.y = mov.y;

mov.x = tempX;
mov.y = tempY;

// Промяна на ID да се качат
борда # 91; sel.x, sel.y] = sel.ID;
борда # 91; mov.x, mov.y] = mov.ID;

Проверка за сравнение е както следва.
Ние знаем, че избраната мерна единица. Което, например, черно. Ние знаем, че позицията на блока (има достъп до статична променлива). Но ние не знаем, е - има ли 3 на същия блок в непосредствена близост до маркирана.
За да разберете това, ние:
1) От позицията на избрания блок ще ида надясно.
2) Ако блока от същия цвят като бъде избран, отново отидете на правото и имайте предвид, че сме намерили един блок.
3) Ако блока е различен от цвета избран, спри, не си отивай дясно вече.
Почти същото и с други области, с изключение, че в този случай ние започваме от позицията на не проверка на избрания блок. Граф започнем от положение, насочени към избрания блок. Ние не искаме да се провери същия блок два пъти.

Същият принцип за горните и долните направления.

След това е необходимо да се провери дали или не ние имаме няколко идентични блокове. Ако countL + countR => 3, блокове унищожават ги прегледат и като празен.

? 200 '200px': '' + (this.scrollHeight + 5) + 'пиксела ");">
BOOL CheckMatch (# 41;<
// получите всички достъп до всички блокове в сцената
Блок # 91] allb = FindObjectsOfType (typeof (Блок # 41; # 41; като Блок # 91];
Блок SEL = Block.select.gameObject.GetComponent(# 41 ;;

Int countU = 0; // до брояч
Int Таймер = 0; // броене
Int countL = 0; // брояч лявата
Int countR = 0; // десен брояч

// Top
за (междинно ф = sel.y; ф ако (борда # 91; sel.x, ф] == sel.ID # 41;<
countU ++;
>


// Проверете дали има ред от три блока
ако (countL + countR> = 3 || Таймер + countU> = # 3 41;<
ако (countL + countR> = # 3 41;<
// унищожи и обърнете внимание на празните блокове
за (междинно CL = 0; CL<=countL; cl++)<
foreach (блок б в allb # 41;<
ако (b.x == sel.x-CI b.y == sel.y # 41;<
Унищожи (b.gameObject # 41 ;;
борда # 91; b.x, b.y] = 500; // обърнете внимание на празен блок
>
>
>
за (междинно съединение CR = 0; кр foreach (блок б в allb # 41;<
ако (b.x == sel.x + кр b.y == sel.y # 41;<
Унищожи (b.gameObject # 41 ;;
борда # 91; b.x, b.y] = 500;
>
>
>
>
ако (Таймер + countU> = # 3 41;<
за (междинно съединение CD = 0; сд<=countD; cd++)<
foreach (Блок BLC в allb # 41;<
ако (blc.x == sel.x blc.y == sel.y - CD # 41;<
борда # 91; blc.x, blc.y] = 500;
Унищожи (blc.gameObject # 41 ;;
>
>
>
за (междинно съединение Cu = 0; Cu foreach (Блок BLC в allb # 41;<
ако (blc.x == sel.x blc.y == sel.y + Cu # 41;<
борда # 91; blc.x, blc.y] = 500;
Унищожи (blc.gameObject # 41 ;;
>
>
>
>
Respawn (# 41 ;;
върнете вярно;

Сега можем да се създадат нови блокове в маркираните позиции на терена. Почти едно и също нещо, което направихме в функция GenBoard

? 200 '200px': '' + (this.scrollHeight + 5) + 'пиксела ");">
нищожен Respawn (# 41;<
за (междинно съединение х = 0 х за (междинно у = 0; Y ако (борда # 91; х, у] == 500 # 41; Int randomNumber = Random.Range (0, blocks.Length # 41 ;; // ID
Transform OBJ = (Transform # 41; примери (блокове # 91; randomNumber] .transform, нов Vector3 (х, у, 0 # 41;, Quaternion.identity # 41 ;;
obj.parent = трансформиране;
Блок б = obj.gameObject.AddComponent(# 41 ;;
// определя променлива
b.ID = randomNumber;
b.x = х;
b.y = Y;
// присвоява ID да се качат на новата стойност
борда # 91; X, Y] = randomNumber;
>
>
>
>

И вече във функцията Актуализация

? 200 '200px': '' + (this.scrollHeight + 5) + 'пиксела ");">
нищожен Актуализация (# 41;<
ако (Block.select Block.moveTo # 41; // Проверете дали те са в близост до
ако (CheckIfNear (# 41; == вярно # 41;<
// Близо
Swap (# 41 ;; // размени позицията си и данни

// Проверка за match3
ако (CheckMatch (# 41; == вярно # 41;<
// Има мач
Block.select = нула;
Block.moveTo = нула;
>
още<
// Не е съвпадение, да ги върне в позицията си по подразбиране
Swap (# 41 ;;
Block.select = нула;
Block.moveTo = нула;
>
>
още<
// Не близост
Block.select = нула;
Block.moveTo = нула;
// Ние можем отново да избира нови блокове
>
>
>

Свързани статии

Подкрепете проекта - споделете линка, благодаря!