Differences

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

Link to this comparison view

pjv:laboratoare:2025:a01 [2025/10/06 12:12]
andrei.lapusteanu
pjv:laboratoare:2025:a01 [2025/10/06 13:54] (current)
alexandru.gradinaru [Concept general – „Replay / Ghost Car”]
Line 24: Line 24:
 </​hidden>​ </​hidden>​
  
-=== 🎮 Cerință : Joc Split-Screen Time Trial ===+=== Cerință : Joc Split-Screen Time Trial ===
  
   * Fiecare jucător concurează pe o pistă proprie (split-screen orizontal/​vertical).   * Fiecare jucător concurează pe o pistă proprie (split-screen orizontal/​vertical).
Line 30: Line 30:
   * Se afișează în UI timpul curent și cel mai bun timp.   * Se afișează în UI timpul curent și cel mai bun timp.
  
-=== ⚙️ ​Cerințe minime ===+=== Cerințe minime ===
   - Două camere active simultan (split-screen orizontal sau vertical).   - Două camere active simultan (split-screen orizontal sau vertical).
   - Două entități controlabile independent (ex: mașini, personaje).   - Două entități controlabile independent (ex: mașini, personaje).
Line 40: Line 40:
 ---- ----
  
-=== 🚀 Cerințe opționale (bonus) ===+=== Cerințe opționale (bonus) ===
   * Adăugarea unui **Player Manager** care detectează automat dispozitivele conectate și alocă controlul.   * Adăugarea unui **Player Manager** care detectează automat dispozitivele conectate și alocă controlul.
   * Introducerea unui **AIPlayer** controlat de un `Strategy` diferit (folosind strategy pattern).   * Introducerea unui **AIPlayer** controlat de un `Strategy` diferit (folosind strategy pattern).
Line 49: Line 49:
 ---- ----
  
-=== 🎯 Scopul laboratorului ===+=== Scopul laboratorului ===
 În acest laborator, studenții vor recapitula noțiuni esențiale de dezvoltare a jocurilor multiplayer locale (split-screen),​ cu accent pe gestionarea camerelor, viewport-urilor și sistemelor de input independente.  ​ În acest laborator, studenții vor recapitula noțiuni esențiale de dezvoltare a jocurilor multiplayer locale (split-screen),​ cu accent pe gestionarea camerelor, viewport-urilor și sistemelor de input independente.  ​
 De asemenea, se va introduce conceptul de **arhitectură extensibilă** prin utilizarea unor **design patterns** fundamentale în dezvoltarea jocurilor video. De asemenea, se va introduce conceptul de **arhitectură extensibilă** prin utilizarea unor **design patterns** fundamentale în dezvoltarea jocurilor video.
Line 55: Line 55:
 ---- ----
  
-=== 🧩 Obiective ===+=== Obiective ===
   * Înțelegerea conceptului de **split-screen** și a modului de configurare a camerelor multiple.   * Înțelegerea conceptului de **split-screen** și a modului de configurare a camerelor multiple.
   * Crearea unui **sistem de input modular** pentru controlul a doi jucători independenți.   * Crearea unui **sistem de input modular** pentru controlul a doi jucători independenți.
Line 64: Line 64:
 ---- ----
  
-=== 🧠 Noțiuni teoretice ===+=== Noțiuni teoretice ===
  
 Exista mai multe metode de a face un joc controlabil de mai multi jucatori in acelasi timp: Exista mai multe metode de a face un joc controlabil de mai multi jucatori in acelasi timp:
Line 232: Line 232:
  
  
-=== 🧩 Exemple de design pattern-uri ===+=== Exemple de design pattern-uri ===
  
-==== 🔸 Command Pattern (pentru input) ====+==== Command Pattern (pentru input) ====
 <code csharp> <code csharp>
 public interface ICommand { public interface ICommand {
Line 253: Line 253:
 </​code>​ </​code>​
  
-==== 🔸 Observer Pattern (pentru UI) ====+==== Observer Pattern (pentru UI) ====
 <code csharp> <code csharp>
 public class Car : MonoBehaviour { public class Car : MonoBehaviour {
Line 273: Line 273:
 ---- ----
  
-==== 🎬 Concept general – „Replay / Ghost Car” ====+==== Concept general – „Replay / Ghost Car” ====
  
 În timpul cursei, fiecare acțiune de control (accelerare,​ frânare, viraj) este înregistrată ca un Command cu un timestamp. În timpul cursei, fiecare acțiune de control (accelerare,​ frânare, viraj) este înregistrată ca un Command cu un timestamp.
Line 365: Line 365:
     void Start() => startTime = Time.time;     void Start() => startTime = Time.time;
  
-    void Update()+    void FixedUpdate()
     {     {
         if (currentIndex >= replayCommands.Count) return;         if (currentIndex >= replayCommands.Count) return;
Line 397: Line 397:
  
  
-==== 🧩 Integrare în scenă ====+==== Integrare în scenă ====
  
 Creezi două mașini: Creezi două mașini:
Line 426: Line 426:
    
    
-=== 📚 Resurse recomandate ===+=== Resurse recomandate ===
   * Unity Manual – [[https://​docs.unity3d.com/​Manual/​MultipleCameras.html|Multiple Cameras and Split Screen]]   * Unity Manual – [[https://​docs.unity3d.com/​Manual/​MultipleCameras.html|Multiple Cameras and Split Screen]]
   * Unity Learn – [[https://​learn.unity.com/​project/​input-system|New Input System Fundamentals]]   * Unity Learn – [[https://​learn.unity.com/​project/​input-system|New Input System Fundamentals]]
pjv/laboratoare/2025/a01.1759741978.txt.gz · Last modified: 2025/10/06 12:12 by andrei.lapusteanu
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