TSM - Realizarea unui joc Arcade în Unity (III)

Ovidiu Mățan - Fondator @ Today Software Magazine

Continuăm seria de articole despre realizarea unui joc în Unity. În articolul de față vom învăța cum să urmărim personajul principal, să afișăm scorul și să colectăm puncte.

Cinemachine

Vom folosi pentru urmărirea personajului o cameră virtuală. Instalarea acesteia se realizează din Package Manager -> Cinemachine

După instalare, va apărea un nou meniu: Cinemachine de unde vom selecta Create 2D camera

Un nou obiect: CM vcam1 va fi creat, iar camerei principale: Main Camera îi va fi adăugată componenta CinemachineBrain. La rularea aplicației, vom observa faptul că camera urmărește personajul, dar acesta apare în centrul ecranului în loc să fie la baza acestuia. Soluția la această problemă este să ne definim o zonă în care să se miște camera virtuală:

  1. CM vcam1- > CinemachineVirtualCamera-> Add Extension -> CinemachineConfiner;

  2. Adăugăm componenta Poligon Collider 2d obiectului Grid ;

  3. Drag & Drop obiectul Grid în CM vcm1 -> Bounding Shape 2D.

Am obținut astfel o zonă în care camera are voie să se miște. Pentru a rămâne fixă pe orizontală, vom edita polygon collider-ul 2d și îl vom transforma într-o linie orizontală. În funcție de poziția pe verticală a acestuia vom putea obține efectul dorit.

Obținerea punctelor

Nici un joc nu este complet dacă nu putem să culegem comori care se vor transforma în puncte. Vom crea un nou obiect empty pe care îl redenumim Coin. Identitatea vizuală o vom adăuga din pachetul Sunnyland, iar pentru aceasta mergem în Sunnyland->artwork->Sprites->Items->gem. Selectăm toate obiectele după care le adăugăm prin Drag & Drop peste obiectul Coin.

Rulăm aplicația și vom observa obiectul animat, fără însă a putea interacționa cu el. Așa cum probabil v-ați gândit, interacțiunea propriu-zisă se poate realiza prin adăugarea unui Box Collider 2D obiectului Coin. Rulăm din nou aplicația, de data aceasta va reprezenta un obiect real.

Pasul următor este să adăugăm un script pentru a le face să dispară în momentul în care le atingem. Vom modifica metoday OnCollsionEnter2D în felul următor:

public void OnCollisionEnter2D(Collision2D collision)
{
  if (collision.gameObject.name.StartsWith("Coin"))
  {
    print("found a coin");
    collision.gameObject.SetActive(false);
  }
  isJumping = false;   
}

Prefabs

Pentru un joc real vom avea nevoie însă de mai multe artefacte de cules. Unity ne oferă o modalitate ușoară să realizăm acest lucru prin intermediul componentelor Prefabs. Orice obiect care este mutat prin Drag&Drop în fereastra Proiect este transformat într-un prefab.

Vom muta moneda noastră artefact într-un nou folder numit Prefabs. După acest pas, o vom șterge din Ierarhia proiectului. Pasul următor este să adăugăm mai multe obiecte în scenă prin Drag&Drop a obiectului Coin prefab. Rulăm jocul și vom observa cum personajul nostru poate acum să culeagă toate monedele.

Afișarea scorului

Pasul final este să afișăm scorul jocului. Vom adăuga o nouă componentă Canvas. Dăm dublu click pe ea și vom observa că este mult mai mare decât scena noastră. Canvasul va fi afișat pe tot ecranul.

Adăugăm textul Score: :

  1. Right-click Canvas -> UI -> Text - TextMeshPro, instalăm software-ul necesar pentru folosire.

  2. Mutăm componenta text în partea de sus a Canvasului și o inițializăm cu textul "Score:"

  3. Adăugăm o nouă componentă TextMeshPro în continuarea Score-ul. Aceasta va fi responsabilă cu afișarea efectivă a scorului obținut și o inițializăm cu "0"

Modificăm codul pentru afișarea scorului:

using TMPro;
…
public TextMeshProUGUI scoreUI;
….
void Update()
{
  scoreUI.text = (coins).ToString();   
}

Înainte de rulare mai trebuie să asociem prin Drag&Drop obiectul text, în care afișăm scorul peste variabila membru scoreUI.

Referință Github

Proiectul prezentat în varianta completă este disponibil pe GitHub.

git clone https://github.com/ovidiumatan/unity-demo.git

Pentru rulare, trebuie să îl adăugați în Unity Hub. La prima rulare va trebui să deschideți scena File->OpenScene-> Scenes/SampleScene.unity

Concluzie

Sperăm că te-am inspirat și te invităm să ne trimiți un e-mail cu proiectele tale în Unity pe adresa de contact a revistei: contact@todaysoftmag.com