Differences

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

Link to this comparison view

pjv:laboratoare:2024:a05 [2024/12/02 12:26]
alexandru.gradinaru [Cerinte]
pjv:laboratoare:2024:a05 [2024/12/03 20:52] (current)
andrei.lapusteanu Added extra info
Line 8: Line 8:
   * - getting started host mode [[https://​doc.photonengine.com/​fusion/​current/​tutorials/​host-mode-basics/​1-getting-started]]   * - getting started host mode [[https://​doc.photonengine.com/​fusion/​current/​tutorials/​host-mode-basics/​1-getting-started]]
   * - de mentionat existenta exemplelor (example projects)   * - de mentionat existenta exemplelor (example projects)
 +  * cum se foloseste https://​github.com/​VeriorPies/​ParrelSync
  
    
Line 15: Line 16:
 ==== Cerinte ===== ==== Cerinte =====
  
-Realizarea unui joc multiplayer de tip whac-a-mole+Realizarea unui joc multiplayer de tip whack-a-mole ​/ colectare:
  
-  * Creati o scena care sa genereze random obiecte pe harta, sincronizate in retea+  * Creati o scena care sa genereze random obiecte pe harta, sincronizate in retea. Host-ul sau server-ul este cel care are autoritate, asadar are '​dreptul'​ de a realiza spawn-ul acestor obiecte
   * Jocul incepe atunci cand exista cel putin 2 jucatori conectati   * Jocul incepe atunci cand exista cel putin 2 jucatori conectati
 +  * Fiecare jucator va avea health, afisati acesta in joc printr-un health bar (ex. world-space canvas) ​
   * Jucatorii sunt animati si se pot deplasa folosind input standard de la mouse/​tastatura pentru a atinge obiectele   * Jucatorii sunt animati si se pot deplasa folosind input standard de la mouse/​tastatura pentru a atinge obiectele
   * In momentul in care un obiect este atins, jucatorul care l-a atins primeste scor, iar obiectul este distrus   * In momentul in care un obiect este atins, jucatorul care l-a atins primeste scor, iar obiectul este distrus
 +  * In scena apar la anumite intervale de timp zone de damage
 +    * Decideti voi cum si unde apar zonele, va recomandam sa apara la locatii random din ce in ce mai des dupa ce incepe o sesiune de joc
 +    * Aceste zone vor aplica damage unitatilor
 +    * In mod ideal, precum este si in referinta video, aceste zone sunt marcate in prealabil cu cateva secunde pentru a informa jucatorii de pericol si a le da timp sa se deplaseze din acea zona
 +    * Jocul se incheie atunci cand ramane in viata un singur client
   * Exista un leaderboard afisat pe TAB care afiseaza scorul curent al tuturor jucatorilor conectati   * Exista un leaderboard afisat pe TAB care afiseaza scorul curent al tuturor jucatorilor conectati
 +  * Jocul poate functiona in mod client-server (aveti nevoie de 3 instante/​build-uri,​ unul pentru server, 2 pentru clienti) sau in mod host-client (aveti nevoie de 2 instante/​build-uri,​ unul care va fi atat server cat si client, si un alt client)
  
-Bonus: ​mouse click-and-move+**Bonus**Click-and-move ​folosind cursorul
  
-Exemplu: [[https://​www.youtube.com/​watch?​v=U-CP6OlgZic&​t=305s]]+**Exemplu**In acest mini-game dintr-un mod de tower defense din Warcraft 3 se poate observa o scena in care apar in mod constant obiecte colectabile (coins), precum si o unitate controlata de player (minutele 5:05 -> 5:​20). ​[[https://​www.youtube.com/​watch?​v=U-CP6OlgZic&​t=305s|Video referinta]]. Daca ar fi sa implementati un joculet similar, va trebui sa aveti 2 astfel de unitati spawn-ate in scena, controlabile in mod independent. ​
 ===== Documentatie video ====== ===== Documentatie video ======
 Gasiti pe MS Teams inregistrat Gasiti pe MS Teams inregistrat
Line 31: Line 39:
 ===== Documentatie text ====== ===== Documentatie text ======
  
-Pentru acest laborator sugestia este sa folositi Photon Fusion+Pentru acest laborator sugestia este sa folositi ​**Photon Fusion ​2**. Aceasta este solutia care se va prezenta in cadrul laboratorului,​ dar conceptele folosite in alte biblioteci de sincronizare sunt similare. Puteti opta pentru alte solutii precum: 
 +  * NetCode for GameObjects 
 +  * Mirror 
 +  * FishNet 
 +  * DarkRift Networking 2 
 +  * Photon PUN (predecesor al lui Fusion, asadar recomandam Fusion in schimb) 
 +  * Solutia de networking built-in din Unreal Engine
  
-[[https://​doc.photonengine.com/​fusion/​current/​tutorials/​host-mode-basics/​1-getting-started]]+Concepte de interes pentru acest laborator (acestea vor fi parcurse pe scurt in laborator dar voi va trebui apoi sa le implementati):​ 
 +  - [[https://​doc.photonengine.com/​fusion/​current/​tutorials/​host-mode-basics/​1-getting-started|Setup SDK]] 
 +  - [[https://​doc.photonengine.com/​fusion/​current/​tutorials/​host-mode-basics/​2-setting-up-a-scene|Setup scena networked]]. Aici se prezinta conceptele de baza pentru integrarea Fusion-ului,​ cum se porneste un joc sincronizat in retea, crearea unui prefab pentru player, citirea si aplicarea de input  
 +  - [[https://​doc.photonengine.com/​fusion/​current/​tutorials/​host-mode-basics/​5-property-changes|Variabile sincronizate]]. Acestea sunt variabile marcate cu tag-ul ''​[Networked]'',​ pe care host-ul sau server-ul le poate seta si sunt in mod automat replicate catre toti clientii conectati in sesiunea curenta. Ganditi-va la scorul fiecarui player, acesta s-ar putea defini in acest mod 
 +    - Gasiti [[https://​doc.photonengine.com/​fusion/​current/​manual/​data-transfer/​networked-properties|aici]] informatii mai detaliate despre aceste proprietati sincronizate 
 +  - [[https://​doc.photonengine.com/​fusion/​current/​tutorials/​host-mode-basics/​6-remote-procedure-calls|RPC-uri (remote procedure call)]]. Metode care permit comunicarea client<​->​server. Ca exemplu, clientul poate trimite un RPC catre server atunci cand colecteaza un obiect a.i. server-ul sa poata face despawn acelui obiect (intrucat server-ul este cel cu autoritate) 
 +    - Gasisti [[https://​doc.photonengine.com/​fusion/​current/​manual/​data-transfer/​rpcs|aici]] informatii mai detaliate despre RPC-uri
  
-Pentru testarea jocurilor multiplayer pe local, direct din editor, fara build, un utilitar foarte folositor pentru ​rulare ​in pararel a mai multor ​sesiune ​gasiti aici: [[https://​github.com/​VeriorPies/​ParrelSync]]+Pentru testarea jocurilor multiplayer pe local, direct din editor, fara build, un utilitar foarte folositor pentru ​rularea ​in pararel a mai multor ​sesiuni il puteti ​gasiti aici: [[https://​github.com/​VeriorPies/​ParrelSync|ParrelSync (GitHub)]] 
 + 
 +**Important**:​ Evenimentele ''​OnTriggerEnter''​ (si similare) nu sunt reliable pe clienti intr-un context sincronizat. Implementati logica pentru acestea pe host/server sau folositi-va de [[https://​doc-api.photonengine.com/​en/​fusion/​current/​class_fusion_1_1_hitbox_manager.html|overlap-uri]] (''​OverlapSphere'',​ ''​OverlapBox'',​ etc.) 
 +  * Potential [[https://​forum.photonengine.com/​discussion/​20514/​fusion-and-collisions-ontriggerenter-and-ontriggerexit-questions?​utm_source=chatgpt.com|thread]] de interes care descrie problema mai in detaliu. TL;DR, folositi overlaps (links mai sus), ''​OnTriggerStay'',​ faceti calculele necesare pe server/host
pjv/laboratoare/2024/a05.1733135184.txt.gz · Last modified: 2024/12/02 12:26 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