Skip to content

Fanllylps/ujikom-3d-vr

Repository files navigation

ECOGUARDIAN VR — Gemini CLI Project Context

Project Overview

  • 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 pakai Input.GetKey lama

Scenes (Alur Game)

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.


Folder Structure

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

Key Scripts & System Architecture

Core Systems (scripts/inti/)

  • GameManager.cs — Singleton. Menyimpan state game: currentPhase (enum: PilahSampah, NebangPohon, NanemPohon, Quiz, Selesai) dan isGameActive. Logic phase transition ada di QuestFlowManager. Method: MulaiGameplay(), MulaiQuiz(), PindahKeSceneBerikutnya()
  • ScoreManager.cs — Auto-creating Singleton. Skor global (score) disimpan ke PlayerPrefs["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

Quest System (scripts/quest/)

  • QuestFlowManager.cs — Otak utama alur quest (file paling besar, ~37KB). Mengatur step-by-step quest, trigger UI, phase update
  • QuestHUDManager.cs — HUD quest di smartwatch VR player
  • QuestSceneData.cs — ScriptableObject, berisi data quest per scene
  • QuestStep.cs — Definisi satu langkah quest
  • TujuanQuest.cs — Tampilan tujuan quest di HUD
  • ArrowQuestManager.cs — Arrow guide penunjuk arah quest

UI System (scripts/ui/)

  • SceneResultUI.cs — UI hasil akhir scene (~25KB). Menampilkan skor, bintang rating, progress bar. Dipanggil via QuestFlowManager saat quest selesai
  • FadeScreenController.cs — Fade transisi layar. Dipakai di semua scene transition dan main menu
  • VRSmartwatchUI.cs — Smartwatch UI di tangan kiri player (quest info, skor real-time)
  • FinalScoreUI.cs — UI skor final keseluruhan game
  • MenuController.cs — Controller untuk menu pause/main
  • StartMenuController.cs — Controller untuk main menu scene
  • StationUIController.cs — UI station interaksi spesifik
  • LazyFollowUI.cs — UI yang mengikuti posisi player head (world-space canvas)
  • SceneFader.cs — Helper fade untuk transisi

Navigation (scripts/navigasi/)

  • 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 quest
  • GroundWayfinder.cs — Wayfinding di lantai/ground
  • GroundMarkerTrigger.cs — Trigger marker di ground

Gameplay Systems

  • 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)

Catatan UJIKOM

Mapping OOP yang Sudah Ada

  • Inheritance: seluruh gameplay component mewarisi MonoBehaviour, sementara data config seperti QuestSceneData, QuizDatabase, dan QuizQuestion mewarisi ScriptableObject.
  • 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 di QuizManager.
  • Abstraction: QuestFlowManager menyembunyikan kerumitan alur quest, ScoreManager menyembunyikan detail penyimpanan skor, dan XRRuntimeUtil menyembunyikan 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.

Poin Teknis yang Layak Diangkat Saat Presentasi

  • Quest-driven architecture: mayoritas gameplay tidak berdiri sendiri, tetapi melapor ke QuestFlowManager sehingga urutan objektif, HUD, subtitle, dan scene result tetap sinkron.
  • Data-driven scene routing: perpindahan scene memakai QuestSceneData agar nama scene tidak hardcode di banyak tempat.
  • Persistent score flow: ScoreManager + SceneScoreTracker memisahkan 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.

Catatan Kesiapan

  • 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.

Scoring System

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.


Singleton Pattern

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.


Coding Conventions

  • Bahasa komentar: Bahasa Indonesia (campur English ok)
  • Naming: PascalCase untuk class/method, camelCase untuk variabel, _camelCase untuk private field
  • Null checks WAJIB di semua MonoBehaviour (terutama sebelum akses singleton)
  • Input System: Pakai UnityEngine.InputSystem, JANGAN Input.GetKey atau Input.GetButtonDown (legacy)
  • UI Text: Pakai TextMeshPro (TMP_Text), bukan legacy Text
  • Debug: Pakai Debug.Log("[NamaClass] message") untuk tracing

XR / VR Specifics

  • 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors