This shows you the differences between two versions of the page.
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 |