This shows you the differences between two versions of the page.
pjv:laboratoare:2023:12 [2023/12/18 15:56] 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 49: | Line 49: | ||
public Sprite icon; | public Sprite icon; | ||
public Vector3[] spawnPoints; | public Vector3[] spawnPoints; | ||
+ | | ||
+ | // Called when the item is pressed in the inventory | ||
+ | public virtual void Use () | ||
+ | { | ||
+ | // Use the item | ||
+ | // Something may happen | ||
+ | } | ||
+ | |||
+ | // Call this method to remove the item from inventory | ||
+ | public void RemoveFromInventory () | ||
+ | { | ||
+ | Inventory.instance.Remove(this); | ||
+ | } | ||
} | } | ||
</code> | </code> | ||
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. |