This shows you the differences between two versions of the page.
pjv:laboratoare:2024:a05 [2024/12/02 13:09] andrei.lapusteanu |
pjv:laboratoare:2024:a05 [2024/12/03 20:52] (current) andrei.lapusteanu Added extra info |
||
---|---|---|---|
Line 33: | Line 33: | ||
**Bonus**: Click-and-move folosind cursorul | **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). | + | **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 39: | 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 | ||
Concepte de interes pentru acest laborator (acestea vor fi parcurse pe scurt in laborator dar voi va trebui apoi sa le implementati): | Concepte de interes pentru acest laborator (acestea vor fi parcurse pe scurt in laborator dar voi va trebui apoi sa le implementati): | ||
Line 45: | Line 51: | ||
- [[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/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 | - [[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 prorietati sincronizate | + | - 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) | - [[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 | - 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 sesiuni il puteti gasiti aici: [[https://github.com/VeriorPies/ParrelSync|ParrelSync (GitHub)]] | + | 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 realiable 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.) | + | **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 |