- Nama Project: EcoGuardian VR
- Engine: Unity (versi terinstall lokal)
- Platform Target: Oculus Quest 2 (Android XR, standalone)
- Genre: VR Educational Game — tema lingkungan hidup & pelestarian alam
- Tujuan: Game edukasi untuk UJIKOM (Uji Kompetensi), dimainkan dengan headset Quest 2
- Render Pipeline: URP (Universal Render Pipeline)
- Input System: Unity New Input System (
UnityEngine.InputSystem) — WAJIB dipakai, jangan pakaiInput.GetKeylama
Game berjalan secara linear scene ke scene:
| Scene | Nama File | Deskripsi |
|---|---|---|
| 0 | MainMenu.unity |
Main menu dengan fade transition ke game |
| 1 | Scene1Tutorial.unity |
Tutorial dasar gameplay, diakhiri naik kendaraan |
| 2 | Scene2Desa.unity |
Desa awal, pilah sampah organik/anorganik/B3 |
| 3 | Scene3Pasar.unity |
Pasar, interaksi dialogue dengan NPC |
| 4 | Scene4Rehabilitasi.unity |
Gameplay rehabilitasi: tebang pohon + menanam |
| 5 | Scene5DesaKembali.unity |
Scene ending/final score (file name historis, role saat ini = ending) |
| 6 | cutscene.unity |
Cutscene/prolog yang dipakai sebelum masuk gameplay utama |
Transisi scene menggunakan VehicleEnterTrigger.cs (player masuk kendaraan → pindah scene) dengan fade via FadeScreenController.cs.
Assets/
├── Scenes/ # Semua scene Unity
├── scripts/
│ ├── inti/ # Core system (GameManager, ScoreManager, SceneScoreTracker)
│ ├── quest/ # Quest system (QuestFlowManager, QuestHUDManager, dll)
│ ├── ui/ # UI controllers (SceneResultUI, FadeScreenController, dll)
│ ├── navigasi/ # Navigasi & scene transition (VehicleEnterTrigger, ArrowGuide)
│ ├── sampah/ # Trash system (TongSampahLogic, TrashSpawnerSafe)
│ ├── pohon/ # Tree system (ChoppableTree, WoodLogCollector)
│ ├── tanam/ # Planting system (PlantingSpot, FertilizerTilt)
│ ├── narasi/ # Dialogue & narasi (NarasiTrigger, DialoguePasarManager)
│ ├── burung/ # Bird system
│ ├── Stage5_Quiz/ # Quiz system
│ └── Editor/ # Editor tools & setup scripts
├── prefabs/ # Prefab game objects
├── database/ # ScriptableObject databases (QuestSceneData)
├── assetbuatan/ # Custom art assets
└── material/ # Materials
GameManager.cs— Singleton. Menyimpan state game:currentPhase(enum: PilahSampah, NebangPohon, NanemPohon, Quiz, Selesai) danisGameActive. Logic phase transition ada di QuestFlowManager. Method:MulaiGameplay(),MulaiQuiz(),PindahKeSceneBerikutnya()ScoreManager.cs— Auto-creating Singleton. Skor global (score) disimpan kePlayerPrefs["TotalScore"]. Skor per scene (sceneScore) di-reset tiap scene dan di-commit ke SceneScoreTracker. Methods:TambahPoin(nilai, isBenar),TambahPohonDitebang(poin),TambahPoinNanem(poin),PoinBaru(amount),GetSceneScore()SceneScoreTracker.cs— Tracks skor per scene untuk ditampilkan di SceneResultUI
QuestFlowManager.cs— Otak utama alur quest (file paling besar, ~37KB). Mengatur step-by-step quest, trigger UI, phase updateQuestHUDManager.cs— HUD quest di smartwatch VR playerQuestSceneData.cs— ScriptableObject, berisi data quest per sceneQuestStep.cs— Definisi satu langkah questTujuanQuest.cs— Tampilan tujuan quest di HUDArrowQuestManager.cs— Arrow guide penunjuk arah quest
SceneResultUI.cs— UI hasil akhir scene (~25KB). Menampilkan skor, bintang rating, progress bar. Dipanggil viaQuestFlowManagersaat quest selesaiFadeScreenController.cs— Fade transisi layar. Dipakai di semua scene transition dan main menuVRSmartwatchUI.cs— Smartwatch UI di tangan kiri player (quest info, skor real-time)FinalScoreUI.cs— UI skor final keseluruhan gameMenuController.cs— Controller untuk menu pause/mainStartMenuController.cs— Controller untuk main menu sceneStationUIController.cs— UI station interaksi spesifikLazyFollowUI.cs— UI yang mengikuti posisi player head (world-space canvas)SceneFader.cs— Helper fade untuk transisi
VehicleEnterTrigger.cs— Trigger scene transition saat player masuk kendaraan. Memanggil FadeScreenController, lalu load scene dari QuestSceneData (~28KB, core untuk scene transition)ArrowGuide.cs— Arrow 3D yang menunjuk ke tujuan questGroundWayfinder.cs— Wayfinding di lantai/groundGroundMarkerTrigger.cs— Trigger marker di ground
- Sampah (
scripts/sampah/):TongSampahLogic.cs(logika tong sampah),TrashSpawnerSafe.cs(spawn sampah dengan safe checks),TrashOutlineHint.cs(visual hint grab) - Pohon (
scripts/pohon/):ChoppableTree.cs(logika tebang pohon, award +poin via ScoreManager),WoodLogCollector.cs(kumpul kayu log) - Tanam (
scripts/tanam/):PlantingSpot.cs(spot menanam, award +poin via ScoreManager),FertilizerTilt.cs(mekanisme pupuk/tilting) - Narasi (
scripts/narasi/):NarasiTrigger.cs(trigger narasi/dialog),DialoguePasarManager.cs(dialog NPC Pasar),NarasiScene4Trigger.cs(narasi scene 4)
- Inheritance: seluruh gameplay component mewarisi
MonoBehaviour, sementara data config sepertiQuestSceneData,QuizDatabase, danQuizQuestionmewarisiScriptableObject. - Encapsulation: state penting seperti skor, timer, progress quest, dan status interaksi banyak disimpan di field private, lalu diakses lewat method khusus seperti
TambahPoin(),GetSceneScore(),IsQuestSelesai(), dan property read-only diQuizManager. - Abstraction:
QuestFlowManagermenyembunyikan kerumitan alur quest,ScoreManagermenyembunyikan detail penyimpanan skor, danXRRuntimeUtilmenyembunyikan detail deteksi runtime XR/UI. - Polymorphism: saat ini paling kuat di level arsitektur Unity component system. Untuk presentasi UJIKOM, aman dijelaskan sebagai "project sudah memakai OOP foundation", tetapi polymorphism domain-gameplay masih bisa diperkuat lagi jika nanti ingin menambah base class/interface khusus interaksi.
- Quest-driven architecture: mayoritas gameplay tidak berdiri sendiri, tetapi melapor ke
QuestFlowManagersehingga urutan objektif, HUD, subtitle, dan scene result tetap sinkron. - Data-driven scene routing: perpindahan scene memakai
QuestSceneDataagar nama scene tidak hardcode di banyak tempat. - Persistent score flow:
ScoreManager+SceneScoreTrackermemisahkan skor scene aktif vs skor akumulasi lintas scene. - VR-specific UX: ada
LazyFollowUI,VRSmartwatchUI,FadeScreenController, serta trigger kendaraan untuk menjaga UI tetap terbaca di XR.
- Build Settings saat ini mengikuti urutan aktual project, dan file scene ending yang dipakai sekarang adalah
Scene5DesaKembali.unity. - Dokumentasi lama yang menyebut Scene 4/5 sempat tertukar sudah tidak relevan lagi; pakai urutan Build Settings sebagai sumber kebenaran.
| Aksi | Poin | Method |
|---|---|---|
| Sampah masuk tong BENAR | +10 | ScoreManager.TambahPoin(10, true) |
| Sampah masuk tong SALAH | -5 | ScoreManager.TambahPoin(-5, false) |
| Tebang pohon | +10 per pohon | ScoreManager.TambahPohonDitebang(10) |
| Menanam pohon | +10 per tanam | ScoreManager.TambahPoinNanem(10) |
| Quiz benar | +poin variable | ScoreManager.PoinBaru(amount) |
| Tutorial step | +poin via QuestFlowManager | Dipanggil di step callback |
Skor global disimpan di PlayerPrefs["TotalScore"]. Skor per-scene di SceneScoreTracker.
Semua Manager pakai Singleton. Cara akses:
GameManager.instance.MulaiGameplay();
ScoreManager.instance.TambahPoin(10, true);
QuestHUDManager._instance.UpdateSkorHUD(score);ScoreManager adalah auto-creating singleton — kalau tidak ada di scene, otomatis dibuat.
- Bahasa komentar: Bahasa Indonesia (campur English ok)
- Naming: PascalCase untuk class/method, camelCase untuk variabel,
_camelCaseuntuk private field - Null checks WAJIB di semua MonoBehaviour (terutama sebelum akses singleton)
- Input System: Pakai
UnityEngine.InputSystem, JANGANInput.GetKeyatauInput.GetButtonDown(legacy) - UI Text: Pakai
TextMeshPro(TMP_Text), bukan legacyText - Debug: Pakai
Debug.Log("[NamaClass] message")untuk tracing
- Platform: Oculus Quest 2, Android, standalone (tidak butuh PC saat main)
- XR Toolkit: XR Interaction Toolkit (Unity)
- Interaksi: Grab interaction untuk sampah, trigger untuk masuk kendaraan dan area
- Movement: Locomotion system via XRI
- Smartwatch UI: Canvas di tangan kiri player (
VRSmartwatchUI.cs) - World-space canvas: Untuk dialog dan narasi yang mengikuti player (
LazyFollowUI.cs) - Performance target: Max 72fps untuk Quest 2