Introducere in 2D

Parametri

Parametri se pot controla in editor atat timp cat sunt definiti ca variabile publice sau serializabile.

Se pot defini atat variabile simple cat si liste (array)

public float speed;

public Sprite[] images;


[SerializeField]
private Text scoreText;
    
[SerializeField]
private GameObject[] enemyTypes;

Instantierea obiectelor

Obiectele se pot instantia folosind functia

newobj = Instantiate(objTemplate) as ObjType;

//from pregab - prefab must be in Resources folder
newobj1 = Instantiate(Resources.Load("enemy"));

// Instantiate the projectile at the position and rotation of this transform
Rigidbody projectile;
Rigidbody clone;
clone = Instantiate(projectile, transform.position, transform.rotation);

enemyOrc = Instantiate(Orc) as Enemy;

Transformari

Transformarile unui obiect se pot accesa prin atributul `transform` (https://docs.unity3d.com/ScriptReference/Transform.html)

Vector3 objectPosition = GameObject.transform.position;

GameObject.transform.position = new Vector3(posX, posY, posZ);

transform.Translate(Vector3.up * Time.deltaTime, Space.World);

transform.Rotate(Vector3.up * Time.deltaTime, Space.World);

Random

Pentru a genera valori random puteti folosi clasa Random

Random.Range(-10.0f, 10.0f)
Random.Range(0, 8);

Controlul unor obiecte sau componente

Afisarea sau ascunderea unui obiect din scena se poate face prin functia de activare

myObject.SetActive(false); // ascunde
myObject.SetActive(true); // arata

Similar, se pot controla componentele unui obiect

this.GetComponent<BoxCollider>().SetActive(false); // dezactivare
this.GetComponent<SpriteRenderer>().sprite = image; //setarea unei imagini

myObject.GetComponent<Text>().text = '123' //setarea unui text

De asemenea se pot accesa elemente copil sau parinte

 childObject=parentObject.GetChild("child_name");

 //setarea unei componente a elementului copil
 parentObject.GetChild("child_name").GetComponent<SpriteRenderer>().sprite = image; 

Asteptari/Wait

Daca vreti veti sa introduceti asteptari in rularea unui script/functii puteti folosi corutine. Corutinele sunt folosite pentru a porni functii asincrone, care se pot intinde pe mai multe frame-uri, si in care se poate pune pauza (wait).

void Start()
{
    StartCoroutine(Example());
}

IEnumerator Example()
{
    print(Time.time);
    yield return new WaitForSeconds(5);
    print(Time.time);
}

Evenimente de Input

Pentru a putea detecta daca un element a fost apasat, se poate folosi functia OnMouseDown

void OnMouseDown()
{        
      gameObject.SetActive(false);
}
    

Atentie! Aceasta functie este activa doar in cazul in care utilizatorul apasa cu mouseul peste un elemente de UI sau un Collider

Cerinte

Realizarea unui joc 2D de memorare

  1. Configurati scene pentru rulare 2D
  2. Adaugati in scena o imagine care reprezinta o tabla de joc (masa)
  3. Adaugati doua imagini in scena:
    1. unul care sa reprezinte elementul ascuns
    2. unul care sa reprezinte elementul afisat
  4. Scriptati elementul afisat astfel incat la click sa se ascunda si sa se afiseze cel ascuns
  5. Colectati inca 3 imagini pentru elementele afisate
  6. Realizati un game controller in care sa scriptati urmatoarele
    1. instantierea dinamica a unui grid de 4×4 elemente (primul este deja instantiat)
    2. pozitionarea random a tipurilor de elemente (in scena trebuie sa fie perechi de elemente - deci vor fi 8 perechi pozitionate random la fiecare rulare)
    3. schimbarea dinamica a imaginii in functie de tip pentru fiecare element din scena
    4. mentinerea elementelor selectate curent (se selecteaza o data maxim 1 pereche)
    5. rularea asincrona a verificarii daca perechea a fost selectata sau nu corect
    6. mentinerea si afisarea unui scor. Scorul creste atunci cand descoperiti doua elemente identice.
  7. Adaugati un buton de restart game
pjv/laboratoare/02.txt ยท Last modified: 2019/10/16 15:50 by alexandru.gradinaru
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0