Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pjv:laboratoare:02 [2018/10/14 20:15]
alexandru.gradinaru
pjv:laboratoare:02 [2019/10/16 15:50] (current)
alexandru.gradinaru
Line 1: Line 1:
-===== Elemente de programare a jocurilor ​2D =====+ ===== 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)
 +
 +<​code>​
 +public float speed;
 +
 +public Sprite[] images;
 +
 +
 +[SerializeField]
 +private Text scoreText;
 +    ​
 +[SerializeField]
 +private GameObject[] enemyTypes;
 +</​code>​
 +
 +
 +=== Instantierea obiectelor ===
 +
 +Obiectele se pot instantia folosind functia
 +<​code>​
 +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;
 +</​code>​
 +
 +=== Transformari ===
 +
 +Transformarile unui obiect se pot accesa prin atributul `transform` (https://​docs.unity3d.com/​ScriptReference/​Transform.html)
 +
 +<​code>​
 +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);​
 +</​code>​
 +
 +=== Random ===
 +
 +Pentru a genera valori random puteti folosi clasa Random
 +
 +<​code>​
 +
 +Random.Range(-10.0f,​ 10.0f)
 +Random.Range(0,​ 8);
 +
 +</​code>​
 +
 +=== Controlul unor obiecte sau componente ===
 +
 +Afisarea sau ascunderea unui obiect din scena se poate face prin functia de activare
 +
 +<​code>​
 +myObject.SetActive(false);​ // ascunde
 +myObject.SetActive(true);​ // arata
 +</​code>​
 +
 +Similar, se pot controla componentele unui obiect
 +
 +<​code>​
 +
 +this.GetComponent<​BoxCollider>​().SetActive(false);​ // dezactivare
 +this.GetComponent<​SpriteRenderer>​().sprite = image; //setarea unei imagini
 +
 +myObject.GetComponent<​Text>​().text = '​123'​ //setarea unui text
 +
 +</​code>​
 +
 +De asemenea se pot accesa elemente copil sau parinte
 +<​code>​
 + ​childObject=parentObject.GetChild("​child_name"​);​
 +
 + //​setarea unei componente a elementului copil
 + ​parentObject.GetChild("​child_name"​).GetComponent<​SpriteRenderer>​().sprite = image; ​
 +</​code>​
 +
 +=== 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).
 +
 +<​code>​
 +void Start()
 +{
 +    StartCoroutine(Example());​
 +}
 +
 +IEnumerator Example()
 +{
 +    print(Time.time);​
 +    yield return new WaitForSeconds(5);​
 +    print(Time.time);​
 +}
 +</​code>​
 +
 +=== Evenimente de Input ===
 +
 +Pentru a putea detecta daca un element a fost apasat, se poate folosi functia OnMouseDown
 +<​code>​
 +
 +void OnMouseDown()
 +{        ​
 +      gameObject.SetActive(false);​
 +}
 +    ​
 +</​code>​
 +
 +<note important>​Atentie! Aceasta functie este activa doar in cazul in care utilizatorul apasa cu mouseul peste un elemente de UI sau un Collider</​note> ​
 +
 +=== Cerinte ===
 +
 +Realizarea unui joc 2D de memorare
 +
 +
 +  - Configurati scene pentru rulare 2D
 +  - Adaugati in scena o imagine care reprezinta o tabla de joc (masa)
 +  - Adaugati doua imagini in scena: ​
 +    - unul care sa reprezinte elementul ascuns ​
 +    - unul care sa reprezinte elementul afisat
 +  - Scriptati elementul afisat astfel incat la click sa se ascunda si sa se afiseze cel ascuns
 +  - Colectati inca 3 imagini pentru elementele afisate
 +  - Realizati un game controller in care sa scriptati urmatoarele
 +    - instantierea dinamica a unui grid de 4x4 elemente (primul este deja instantiat)
 +    - pozitionarea random a tipurilor de elemente (in scena trebuie sa fie perechi de elemente - deci vor fi 8 perechi pozitionate random la fiecare rulare)
 +    - schimbarea dinamica a imaginii in functie de tip pentru fiecare element din scena
 +    - mentinerea elementelor selectate curent (se selecteaza o data maxim 1 pereche)
 +    - rularea asincrona a verificarii daca perechea a fost selectata sau nu corect
 +    - mentinerea si afisarea unui scor. Scorul creste atunci cand descoperiti doua elemente identice.
 +  - Adaugati un buton de restart game
  
  
  
pjv/laboratoare/02.1539537342.txt.gz ยท Last modified: 2018/10/14 20:15 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