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