Differences

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

Link to this comparison view

pjv:laboratoare:2024:a05 [2024/10/07 11:17]
alexandru.gradinaru
pjv:laboratoare:2024:a05 [2024/12/03 20:52] (current)
andrei.lapusteanu Added extra info
Line 1: Line 1:
-===== 5. Multiplayer ​local server =====+===== 5. Multiplayer ​online ​server ​solutions ​===== 
 + 
 + 
 +<​hidden>​ 
 + 
 +de explicat sumar: 
 +  * - cum se utilizeaza un SDK photon - Fusion 
 +  * - getting started host mode [[https://​doc.photonengine.com/​fusion/​current/​tutorials/​host-mode-basics/​1-getting-started]] 
 +  * - de mentionat existenta exemplelor (example projects) 
 +  * cum se foloseste https://​github.com/​VeriorPies/​ParrelSync 
 + 
 +  
 + 
 +</​hidden>​
  
 ==== Cerinte ===== ==== Cerinte =====
  
-Realizarea unui ..+Realizarea unui joc multiplayer de tip whack-a-mole / colectare:​ 
 + 
 +  * Creati o scena care sa genereze random obiecte pe harta, sincronizate in reteaHost-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 
 +  * Fiecare jucator va avea health, afisati acesta in joc printr-un health bar (exworld-space canvas)  
 +  * 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 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 
 +  * 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**: Click-and-move folosind cursorul 
 + 
 +**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 ====== 
 +Gasiti pe MS Teams inregistrat 
 + 
 +===== Documentatie text ====== 
 + 
 +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 
 + 
 +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 rularea in pararel a mai multor sesiuni il puteti gasiti aici: [[https://​github.com/​VeriorPies/​ParrelSync|ParrelSync (GitHub)]]
  
-  ​Creati o scena ... +**Important**:​ Evenimentele ''​OnTriggerEnter''​ (si similare) nu sunt reliable pe clienti intr-un context sincronizatImplementati 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.) 
-  * TBA+  * 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.1728289032.txt.gz · Last modified: 2024/10/07 11:17 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