Differences

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

Link to this comparison view

pjv:laboratoare:2024:a02 [2024/10/21 13:29]
alexandru.gradinaru [Sisteme turn based]
pjv:laboratoare:2024:a02 [2024/10/23 08:45] (current)
maria_anca.balutoiu [Sisteme de evenimente]
Line 47: Line 47:
     * Inamicii realizeaza actiuni random     * Inamicii realizeaza actiuni random
  
-Pentru simplitate, toate interactiunile se pot realiza prin butoane de comanda.+Pentru simplitate, toate interactiunile se pot realiza prin butoane de comanda, dar este necesar sa folositi un sistem de evenimente pentru decuplarea responsabilitatilor (la alegere).
  
 Bonusuri: Bonusuri:
Line 75: Line 75:
  
 === Gestiune harta === === Gestiune harta ===
 +
 +Desi se poate gestiona o harta turn based si fara un sistem grid, cele mai adesea se folosesc sisteme grid de tip matrice sau hexagonal, ca si in imaginile exemplificate mai sus.
 +
 +Daca in cazul unui sistem de tip matrice reprezentarea in memorie este simpla, folosind direct o matrice, in cazul unui sistem hexagonal, lucrurile sunt ceva mai complicate.
 +
 +Cateva resurse in acest sens: 
 +  * [[https://​www.redblobgames.com/​grids/​parts/​]]
  
 === Gestiune personaje === === Gestiune personaje ===
 +
 +Pentru gestiunea personajelor sunt importante 3 elemente:
 +  * gestiunea pe harta: miscare, constrangeri,​ efecte, pozitionare,​ pathfinding etc
 +  * gestiunea prin interfata grafica: abilitati, skilltree, actiuni etc
 +  * gestiunea in memorie
 +
 +
 +Intrucat sunt foarte multe elemente de gestionat, recomandarea este sa se incerce o decuplare a acestor componente, din punct de vedere logic.
 +
 +Pentru selectia personajelor cel mai adesea se folosesc RayCast-uri.
 +Pentru selectie multipla (mai multe personaje/​unitati odata) o varianta poate fi:
 +  * Obține raycast a poziției în care jucătorul a început să tragă ​
 +  * Obțineți raycast a poziției în care jucătorul a terminat de tras
 +  * Din aceste două Vector3 puteți construi un cub 3D.
 +  * Tratați-l ca pe un plan 2D (adică ignorați înălțimea cubului);
 +  * Pentru fiecare unitate: dacă unitatea se află în planul 2D, selectați-o.
  
 === Gestiune comenzi === === Gestiune comenzi ===
Line 116: Line 139:
 Pentru a face acest lucru, va trebui să treceți un Vector3 în metoda Mutare pentru a ghida jucătorul de-a lungul celor patru direcții ale busolei. De asemenea, puteți utiliza un raycast pentru a detecta pereții în LayerMask corespunzătoare. Desigur, implementarea a ceea ce doriți să aplicați command pattern este separată de modelul în sine. Pentru a face acest lucru, va trebui să treceți un Vector3 în metoda Mutare pentru a ghida jucătorul de-a lungul celor patru direcții ale busolei. De asemenea, puteți utiliza un raycast pentru a detecta pereții în LayerMask corespunzătoare. Desigur, implementarea a ceea ce doriți să aplicați command pattern este separată de modelul în sine.
  
-{{https://​unity.com/​_next/​image?​url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Ffuvbjjlp%2Fproduction%2F568b09cd13f867dca530771bd1f94f31a51a2cf9-800x545.jpg&​w=3840&​q=75?​500}}+
  
 Pentru a urma command pattern, capturați metoda de mutare a PlayerMover ca obiect. În loc să apelați direct Move, creați o nouă clasă, MoveCommand,​ care implementează interfața ICommand. Pentru a urma command pattern, capturați metoda de mutare a PlayerMover ca obiect. În loc să apelați direct Move, creați o nouă clasă, MoveCommand,​ care implementează interfața ICommand.
Line 225: Line 248:
   ​   ​
    // Unsubscribe from the event (stop listening).    // Unsubscribe from the event (stop listening).
-   ​private void OnDisable() => player.OnPlayerHealthChanged ​+= HandlePlayerHealthChanged;​+   ​private void OnDisable() => player.OnPlayerHealthChanged ​-= HandlePlayerHealthChanged;​
        
    // Method which is called on event invocation    // Method which is called on event invocation
Line 294: Line 317:
    ​fileName = "​PlayerEventSO",​    ​fileName = "​PlayerEventSO",​
    ​menuName = "​Player/​PlayerEventSO"​)]    ​menuName = "​Player/​PlayerEventSO"​)]
-public class PlayerEventSO : MonoBehaviour+public class PlayerEventSO : ScriptableObject
 { {
    // Unity event.    // Unity event.
pjv/laboratoare/2024/a02.1729506572.txt.gz · Last modified: 2024/10/21 13:29 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