This shows you the differences between two versions of the page.
|
pjv:laboratoare:2023:12 [2023/12/18 15:58] alexandru.gradinaru |
pjv:laboratoare:2023:12 [2024/10/07 10:49] (current) alexandru.gradinaru |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ===== Sisteme UI avansate ===== | + | ===== 11. Sisteme UI avansate ===== |
| ==== Cerinte ===== | ==== Cerinte ===== | ||
| Line 13: | Line 13: | ||
| * obiectele se pot adauga, utiliza sau elimina din inventar | * obiectele se pot adauga, utiliza sau elimina din inventar | ||
| * obiectele sunt de cel putin 2 tipuri: | * obiectele sunt de cel putin 2 tipuri: | ||
| - | - consumabil: de ex la apasarea pe el se poate recupera din viata personajului | + | - consumabil: de ex la apasarea pe el se poate recupera din viata personajului; dispare dupa consum |
| - echipabil: de ex la o apasare se echipeaza - cresc anumite atribute ale playerului (strength, dexterity etc.) - la o alta apasare se dezechipeaza - scad atributele definite pe item | - echipabil: de ex la o apasare se echipeaza - cresc anumite atribute ale playerului (strength, dexterity etc.) - la o alta apasare se dezechipeaza - scad atributele definite pe item | ||
| Line 66: | Line 66: | ||
| Intrucat exista atribute implicite pentru un obiect scriptabil (e.g. name), putem folosi variabile diferite (e.g. objectName) sau putem suprascrie definirea acestui atribut prin folosirea metodei ''new'' (new public string name). | Intrucat exista atribute implicite pentru un obiect scriptabil (e.g. name), putem folosi variabile diferite (e.g. objectName) sau putem suprascrie definirea acestui atribut prin folosirea metodei ''new'' (new public string name). | ||
| + | |||
| + | Mai mult, putem crea obiecte cu actiuni specifice: de ex obiect consumabil sau echipabil. | ||
| + | |||
| + | <code c#> | ||
| + | |||
| + | using UnityEngine; | ||
| + | |||
| + | /* An Item that can be consumed. So far that just means regaining health */ | ||
| + | |||
| + | [CreateAssetMenu(fileName = "New Item", menuName = "Inventory/Consumable")] | ||
| + | public class Consumable : Item { | ||
| + | |||
| + | public int healthGain; // How much health? | ||
| + | |||
| + | // This is called when pressed in the inventory | ||
| + | public override void Use() | ||
| + | { | ||
| + | // Heal the player | ||
| + | PlayerStats playerStats = Player.instance.playerStats; | ||
| + | playerStats.Heal(healthGain); | ||
| + | |||
| + | Debug.Log(name + " consumed!"); | ||
| + | |||
| + | RemoveFromInventory(); // Remove the item after use | ||
| + | } | ||
| + | |||
| + | } | ||
| + | |||
| + | </code> | ||
| Mai departe, pentru un inventar vom avea nevoie de o lista de obiecte gestionabile. Pentru acest lucru vom face un script de gestiune pentru inventar (e.g InventoryManager) care gestioneaza adaugarea, eliminarea si interogarea inventarului. Pentru o accesare mai usoara si mai facila, ideal ar fi ca acest inventorymanager sa fie un Singleton. Pentru a avea un singleton trebuie sa ne asiguram ca avem o singura instanta creata pentru acest script atunci cand e accesat. | Mai departe, pentru un inventar vom avea nevoie de o lista de obiecte gestionabile. Pentru acest lucru vom face un script de gestiune pentru inventar (e.g InventoryManager) care gestioneaza adaugarea, eliminarea si interogarea inventarului. Pentru o accesare mai usoara si mai facila, ideal ar fi ca acest inventorymanager sa fie un Singleton. Pentru a avea un singleton trebuie sa ne asiguram ca avem o singura instanta creata pentru acest script atunci cand e accesat. | ||