Skip to content
kiril-bugaPublic

About

Augmented Reality App for Language Learning in a new way ๐ŸŒ

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

ย 

History

58 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Lingua AR

Augmented Reality Language Learning Application

Lingua AR is an immersive AR mobile application that helps users learn new languages by detecting real-world objects and providing instant translations, example sentences, and audio pronunciation. Built with Unity and powered by Niantic Lightship ARDK.

โ–ถ๏ธ Demo

Screen_Recording_20251214_130116_Lingua.AR.mp4

๐Ÿ“ฑ Overview

Lingua AR enables bilingual language learning where users can:

  • Learn a target language (e.g., Italian) while speaking their source language (e.g., French)
  • Point their camera at real-world objects to get instant translations
  • Save vocabulary words for later review
  • Listen to native pronunciation
  • View contextual example sentences

Supported Languages: English, French, German, Italian

Platforms: iOS (ARKit), Android (ARCore), VR (OpenXR), Unity Editor (XR Simulation)


๐ŸŽฏ Key Features

1. Real-Time Object Detection

  • Uses Niantic Lightship AR for advanced object recognition
  • Detects 80+ common object categories (furniture, animals, vehicles, etc.)
  • Confidence-based filtering (0.6 threshold)
  • Visual bounding boxes with color-coded labels

2. Bilingual Translation System

  • Source Language: Language you already speak
  • Target Language: Language you want to learn
  • Offline translation database with 4 languages
  • Displays: "Source โ†’ Target" format (e.g., "la chaise โ†’ la sedia")

3. Vocabulary Management

  • Manual save: Tap objects to add to vocabulary
  • Persistent storage via JSON
  • Delete unwanted words
  • Track detection count and last seen time
  • Word count badge indicator

4. Example Sentences

  • Context-rich example sentences for each word
  • Bilingual display (source โ†’ target)
  • Database of pre-written sentences

5. Audio Pronunciation

  • Text-to-speech for target language
  • Native platform integration (iOS/Android)
  • Instant playback on demand

๐Ÿ—๏ธ System Architecture

High-Level Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                         LINGUA AR                                โ”‚
โ”‚                    (Unity 6000.2.10f1)                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚                     โ”‚                     โ”‚
   โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”          โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”          โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”
   โ”‚   AR    โ”‚          โ”‚   UI    โ”‚          โ”‚  Data   โ”‚
   โ”‚ Systems โ”‚          โ”‚ Layer   โ”‚          โ”‚ Layer   โ”‚
   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
        โ”‚                     โ”‚                     โ”‚
        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚                   โ”‚
              โ”Œโ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”       โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”
              โ”‚  Niantic  โ”‚       โ”‚Platform โ”‚
              โ”‚ Lightship โ”‚       โ”‚ Servicesโ”‚
              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Detailed Component Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                          AR DETECTION LAYER                            โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                        โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”‚
โ”‚  โ”‚          ARObjectDetectionManager (Niantic Lightship)        โ”‚    โ”‚
โ”‚  โ”‚                    - Hardware camera input                    โ”‚    โ”‚
โ”‚  โ”‚                    - ML object recognition                    โ”‚    โ”‚
โ”‚  โ”‚                    - 80+ object categories                    โ”‚    โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ”‚
โ”‚                         โ”‚                                             โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”      โ”‚
โ”‚  โ”‚          ObjectDetectionSample.cs (Controller)              โ”‚      โ”‚
โ”‚  โ”‚  - Filters by confidence (0.6 threshold)                   โ”‚      โ”‚
โ”‚  โ”‚  - Fetches translations (source + target)                  โ”‚      โ”‚
โ”‚  โ”‚  - Emits OnFoundItemAtPosition event                       โ”‚      โ”‚
โ”‚  โ”‚  - Can pause/resume detection                              โ”‚      โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜      โ”‚
โ”‚            โ”‚                                                           โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
             โ”‚
             โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
             โ”‚                              โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  UI VISUALIZATION     โ”‚    โ”‚  TRANSLATION        โ”‚
โ”‚                       โ”‚    โ”‚                     โ”‚
โ”‚  DrawRect.cs          โ”‚    โ”‚  TranslationDB      โ”‚
โ”‚  - Object pooling     โ”‚    โ”‚  - Offline lookup   โ”‚
โ”‚  - Bounding boxes     โ”‚    โ”‚  - 4 languages      โ”‚
โ”‚  - Labels             โ”‚    โ”‚  - 80+ words        โ”‚
โ”‚  - Color coding       โ”‚    โ”‚                     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜


โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                       USER INTERACTION LAYER                           โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                        โ”‚
โ”‚  USER TAPS DETECTED OBJECT                                            โ”‚
โ”‚         โ”‚                                                              โ”‚
โ”‚         โ–ผ                                                              โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”        โ”‚
โ”‚  โ”‚          UIRectObject.cs (Clickable Rectangle)            โ”‚        โ”‚
โ”‚  โ”‚  - Category, Translation, SourceTranslation              โ”‚        โ”‚
โ”‚  โ”‚  - Confidence, ScreenPosition                            โ”‚        โ”‚
โ”‚  โ”‚  - OnPointerClick handler                                โ”‚        โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜        โ”‚
โ”‚                     โ”‚                                                  โ”‚
โ”‚                     โ–ผ                                                  โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”        โ”‚
โ”‚  โ”‚       ObjectSelectionManager.cs (Focus Handler)           โ”‚        โ”‚
โ”‚  โ”‚  - Focuses clicked object                                โ”‚        โ”‚
โ”‚  โ”‚  - Hides other rectangles                                โ”‚        โ”‚
โ”‚  โ”‚  - Fires OnObjectFocused event                           โ”‚        โ”‚
โ”‚  โ”‚  - Creates DetectedObjectData                            โ”‚        โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜        โ”‚
โ”‚                     โ”‚                                                  โ”‚
โ”‚                     โ–ผ                                                  โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”        โ”‚
โ”‚  โ”‚            ActionMenuPanel.cs (Action Menu)               โ”‚        โ”‚
โ”‚  โ”‚                                                           โ”‚        โ”‚
โ”‚  โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚        โ”‚
โ”‚  โ”‚  โ”‚ Pronunciation  โ”‚  โ”‚  Examples    โ”‚  โ”‚ Save Word  โ”‚  โ”‚        โ”‚
โ”‚  โ”‚  โ”‚   Button       โ”‚  โ”‚   Button     โ”‚  โ”‚   Button   โ”‚  โ”‚        โ”‚
โ”‚  โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚        โ”‚
โ”‚  โ”‚           โ”‚                  โ”‚                โ”‚          โ”‚        โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜        โ”‚
โ”‚              โ”‚                  โ”‚                โ”‚                    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
               โ”‚                  โ”‚                โ”‚
               โ–ผ                  โ–ผ                โ–ผ
       โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
       โ”‚  TTS Manager  โ”‚  โ”‚  Examples    โ”‚  โ”‚    Vocabulary    โ”‚
       โ”‚  (Platform)   โ”‚  โ”‚    Panel     โ”‚  โ”‚     Manager      โ”‚
       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜


โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                      VOCABULARY SYSTEM                                 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                        โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”        โ”‚
โ”‚  โ”‚         VocabularyManager.cs (Singleton)                  โ”‚        โ”‚
โ”‚  โ”‚  - SaveWord(category, translation, languages)            โ”‚        โ”‚
โ”‚  โ”‚  - DeleteWord(category)                                  โ”‚        โ”‚
โ”‚  โ”‚  - GetAllWords() โ†’ List<SavedWord>                       โ”‚        โ”‚
โ”‚  โ”‚  - IsWordSaved(category) โ†’ bool                          โ”‚        โ”‚
โ”‚  โ”‚  - Fires OnVocabularyUpdated event                       โ”‚        โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜        โ”‚
โ”‚                     โ”‚                                                  โ”‚
โ”‚         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                                     โ”‚
โ”‚         โ”‚                       โ”‚                                     โ”‚
โ”‚         โ–ผ                       โ–ผ                                     โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                           โ”‚
โ”‚  โ”‚VocabularyDataโ”‚      โ”‚   SavedWord    โ”‚                           โ”‚
โ”‚  โ”‚              โ”‚      โ”‚   - category    โ”‚                           โ”‚
โ”‚  โ”‚- Contains()  โ”‚      โ”‚   - translation โ”‚                           โ”‚
โ”‚  โ”‚- GetWord()   โ”‚      โ”‚   - source/tgt  โ”‚                           โ”‚
โ”‚  โ”‚- AddOrUpdate()โ”‚     โ”‚   - timestamps  โ”‚                           โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜      โ”‚   - timesDetect โ”‚                           โ”‚
โ”‚                        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                             โ”‚
โ”‚         โ”‚                                                              โ”‚
โ”‚         โ–ผ                                                              โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                            โ”‚
โ”‚  โ”‚      JSON Persistence                โ”‚                            โ”‚
โ”‚  โ”‚  Application.persistentDataPath       โ”‚                            โ”‚
โ”‚  โ”‚  /vocabulary.json                     โ”‚                            โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                            โ”‚
โ”‚                                                                        โ”‚
โ”‚  Subscribers to OnVocabularyUpdated:                                  โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                     โ”‚
โ”‚  โ”‚ VocabularyListPanelโ”‚    โ”‚  VocabularyBadge โ”‚                     โ”‚
โ”‚  โ”‚ - Refreshes list   โ”‚    โ”‚  - Updates count โ”‚                     โ”‚
โ”‚  โ”‚ - Object pooling   โ”‚    โ”‚  - Shows/hides   โ”‚                     โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                     โ”‚
โ”‚                                                                        โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜


โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                      LANGUAGE SETTINGS SYSTEM                          โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                        โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”        โ”‚
โ”‚  โ”‚      LanguageSettings.cs (ScriptableObject)               โ”‚        โ”‚
โ”‚  โ”‚                                                           โ”‚        โ”‚
โ”‚  โ”‚  Properties:                                              โ”‚        โ”‚
โ”‚  โ”‚  - CurrentLanguage (Target: e.g., Italian)               โ”‚        โ”‚
โ”‚  โ”‚  - CurrentSourceLanguage (Source: e.g., French)          โ”‚        โ”‚
โ”‚  โ”‚                                                           โ”‚        โ”‚
โ”‚  โ”‚  Events:                                                  โ”‚        โ”‚
โ”‚  โ”‚  - OnLanguageChanged                                     โ”‚        โ”‚
โ”‚  โ”‚  - OnSourceLanguageChanged                               โ”‚        โ”‚
โ”‚  โ”‚                                                           โ”‚        โ”‚
โ”‚  โ”‚  Persistence:                                             โ”‚        โ”‚
โ”‚  โ”‚  - PlayerPrefs: "LinguaAR_TargetLanguage"                โ”‚        โ”‚
โ”‚  โ”‚  - PlayerPrefs: "LinguaAR_SourceLanguage"                โ”‚        โ”‚
โ”‚  โ”‚                                                           โ”‚        โ”‚
โ”‚  โ”‚  Static Helpers:                                          โ”‚        โ”‚
โ”‚  โ”‚  - GetLanguageDisplayName() โ†’ "Franรงais"                 โ”‚        โ”‚
โ”‚  โ”‚  - GetLanguageFlag() โ†’ "๐Ÿ‡ซ๐Ÿ‡ท"                             โ”‚        โ”‚
โ”‚  โ”‚  - GetLanguageCode() โ†’ "fr"                              โ”‚        โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜        โ”‚
โ”‚                     โ”‚                                                  โ”‚
โ”‚         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                                      โ”‚
โ”‚         โ”‚                      โ”‚                                      โ”‚
โ”‚         โ–ผ                      โ–ผ                                      โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                       โ”‚
โ”‚  โ”‚  Main Menu   โ”‚      โ”‚   AR Scene Uses    โ”‚                       โ”‚
โ”‚  โ”‚              โ”‚      โ”‚                    โ”‚                       โ”‚
โ”‚  โ”‚- Target      โ”‚      โ”‚- Object Detection  โ”‚                       โ”‚
โ”‚  โ”‚  Dropdown    โ”‚      โ”‚- Translation       โ”‚                       โ”‚
โ”‚  โ”‚- Source      โ”‚      โ”‚- Examples Panel    โ”‚                       โ”‚
โ”‚  โ”‚  Dropdown    โ”‚      โ”‚- Vocabulary Save   โ”‚                       โ”‚
โ”‚  โ”‚- Validation  โ”‚      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                       โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                                                     โ”‚
โ”‚                                                                        โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ”„ Data Flow Diagrams

1. Object Detection โ†’ Translation Flow

Camera Feed
    โ”‚
    โ–ผ
ARObjectDetectionManager (Lightship)
    โ”‚
    โ”œโ”€โ–บ Detects: "chair" (confidence: 0.85)
    โ”‚
    โ–ผ
ObjectDetectionSample.cs
    โ”‚
    โ”œโ”€โ–บ Filters: confidence >= 0.6? โœ“
    โ”‚
    โ”œโ”€โ–บ Fetches Translation (Source):
    โ”‚       TranslationDatabase.GetTranslation("chair", French)
    โ”‚       โ†’ "la chaise"
    โ”‚
    โ”œโ”€โ–บ Fetches Translation (Target):
    โ”‚       TranslationDatabase.GetTranslation("chair", Italian)
    โ”‚       โ†’ "la sedia"
    โ”‚
    โ–ผ
DrawRect.CreateRect(...)
    โ”‚
    โ”œโ”€โ–บ Creates UIRectObject with:
    โ”‚       - Category: "chair"
    โ”‚       - SourceTranslation: "la chaise"
    โ”‚       - Translation: "la sedia"
    โ”‚       - Confidence: 0.85
    โ”‚
    โ–ผ
Screen displays: "la chaise" label over detected chair

2. User Interaction โ†’ Vocabulary Save Flow

User taps detection rectangle
    โ”‚
    โ–ผ
UIRectObject.OnPointerClick()
    โ”‚
    โ–ผ
ObjectSelectionManager.FocusObject(rect)
    โ”‚
    โ”œโ”€โ–บ Creates DetectedObjectData:
    โ”‚       {
    โ”‚         category: "chair",
    โ”‚         translation: "la sedia",
    โ”‚         sourceTranslation: "la chaise",
    โ”‚         confidence: 0.85
    โ”‚       }
    โ”‚
    โ”œโ”€โ–บ Fires: OnObjectFocused event
    โ”‚
    โ–ผ
ActionMenuPanel.ShowMenu(data)
    โ”‚
    โ”œโ”€โ–บ Displays: "la chaise โ†’ la sedia"
    โ”‚
    โ”œโ”€โ–บ Shows 4 buttons:
    โ”‚       [๐Ÿ”Š Pronunciation] [๐Ÿ“ Examples] [๐Ÿ’พ Save] [โŒ Close]
    โ”‚
    โ–ผ
User clicks "Save Word"
    โ”‚
    โ–ผ
ActionMenuPanel.OnSaveWordClicked()
    โ”‚
    โ–ผ
VocabularyManager.SaveWord(
    "chair",
    "la sedia",
    Italian,
    "la chaise",
    French
)
    โ”‚
    โ”œโ”€โ–บ Creates/Updates SavedWord:
    โ”‚       {
    โ”‚         category: "chair",
    โ”‚         savedTranslation: "la sedia",
    โ”‚         savedLanguage: Italian,
    โ”‚         sourceTranslation: "la chaise",
    โ”‚         sourceLanguage: French,
    โ”‚         firstDetectedTime: "2025-01-15T10:30:00",
    โ”‚         lastSeenTime: "2025-01-15T10:30:00",
    โ”‚         timesDetected: 1
    โ”‚       }
    โ”‚
    โ”œโ”€โ–บ Writes to: vocabulary.json
    โ”‚
    โ”œโ”€โ–บ Fires: OnVocabularyUpdated event
    โ”‚
    โ–ผ
VocabularyBadge.UpdateBadge()
    โ”‚
    โ””โ”€โ–บ Updates badge count: "1"

3. Language Change Propagation Flow

User changes language in Main Menu
    โ”‚
    โ–ผ
LanguageSelectionUI.OnDropdownValueChanged()
    โ”‚
    โ”œโ”€โ–บ Validation: Source โ‰  Target? โœ“
    โ”‚
    โ–ผ
LanguageSettings.CurrentSourceLanguage = French
    โ”‚
    โ”œโ”€โ–บ Saves to PlayerPrefs
    โ”‚
    โ”œโ”€โ–บ Fires: OnSourceLanguageChanged event
    โ”‚
    โ–ผ
All Subscribers React:
    โ”‚
    โ”œโ”€โ–บ ObjectDetectionSample:
    โ”‚       - Fetches new source translations
    โ”‚       - Updates detection labels
    โ”‚
    โ”œโ”€โ–บ ExampleSentencesPanel:
    โ”‚       - Displays examples in French
    โ”‚
    โ”œโ”€โ–บ ActionMenuPanel:
    โ”‚       - Shows "French โ†’ Italian" format
    โ”‚
    โ””โ”€โ–บ VocabularyManager:
            - Saves words with French source

๐Ÿ› ๏ธ Core Components Reference

AR Detection Components

Component Responsibility Key Methods
ARObjectDetectionManager Hardware camera access, ML inference (Niantic Lightship API)
ObjectDetectionSample Detection controller, filtering, translation OnFrameReceived(), Pause(), Resume()
DrawRect UI visualization, object pooling CreateRect(), ClearRects()
UIRectObject Clickable detection rectangle OnPointerClick(), SetDetectionData()
Depth_ScreenToWorldPosition 2Dโ†’3D coordinate conversion GetWorldPosition()

User Interaction Components

Component Responsibility Key Methods
ObjectSelectionManager Focus management, event emission FocusObject(), UnfocusObject()
ActionMenuPanel Action menu UI, button handlers ShowMenu(), Hide(), OnSaveWordClicked()
ExampleSentencesPanel Example sentences display ShowExamples(), CreateSentenceItem()
TTSManager Text-to-speech (platform-specific) Speak(), Stop()

Vocabulary System Components

Component Responsibility Key Methods
VocabularyManager CRUD operations, event emission SaveWord(), DeleteWord(), GetAllWords()
VocabularyListPanel List UI, object pooling, search RefreshList(), Show(), Hide()
VocabularyWordItem List item UI component Setup(), OnDeleteClicked()
VocabularyBadge Word count indicator UpdateBadge()

Language & Translation Components

Component Responsibility Key Methods
LanguageSettings Global language state, persistence Properties: CurrentLanguage, CurrentSourceLanguage
TranslationDatabaseSO Offline translation lookup GetTranslation(), GetAllWords()
ExampleSentencesDatabaseSO Example sentences storage GetExamples(), GetTranslation()
LanguageSelectionUI Language selection UI, validation SetLanguage(), SetSourceLanguage()

๐ŸŽจ Design Patterns Used

1. Singleton Pattern

Used for global access to managers:

public class VocabularyManager : MonoBehaviour
{
    public static VocabularyManager Instance { get; private set; }
}

Components: VocabularyManager, ExampleSentencesPanel, ObjectSelectionManager, SpawnObjectsAroundObjectDetected

2. Observer/Event Pattern

Decouples components via events:

public static event Action OnVocabularyUpdated;
public static event Action<TargetLanguage> OnLanguageChanged;

Events:

  • OnVocabularyUpdated โ†’ VocabularyBadge, VocabularyListPanel
  • OnLanguageChanged โ†’ ObjectDetectionSample, UI components
  • OnObjectFocused โ†’ ActionMenuPanel

3. Object Pooling

Reduces GC pressure for frequently created/destroyed objects:

// DrawRect maintains pool of UIRectObject instances
private List<GameObject> rects = new List<GameObject>();

Components: DrawRect, VocabularyListPanel

4. ScriptableObject Configuration

Data-driven design for game data:

[CreateAssetMenu(fileName = "TranslationDB", menuName = "...")]
public class TranslationDatabaseSO : ScriptableObject

Assets: LanguageSettings, TranslationDatabaseSO, ExampleSentencesDatabaseSO, SpawnObjectToObjectClassSO

5. Strategy Pattern

Platform-specific implementations:

#if UNITY_IOS
    private IOSTTSManager _tts;
#elif UNITY_ANDROID
    private AndroidTTSManager _tts;
#endif

Components: TTSManager with iOS/Android variants


๐Ÿš€ Technical Stack

Unity & AR Frameworks

  • Unity: 6000.2.10f1 (Unity 6)
  • Render Pipeline: Universal Render Pipeline (URP)
  • AR Foundation: Cross-platform AR abstraction
  • Niantic Lightship ARDK: Advanced AR features
    • Object detection (80+ categories)
    • Semantic segmentation
    • Depth estimation
    • Persistent anchors

Platform-Specific

  • iOS: ARKit + Lightship ARKit Loader
  • Android: ARCore + Lightship ARCore Loader
  • VR: OpenXR Loader
  • Editor: Lightship Simulation + XR Environment Simulation

APIs & Services

  • Translation: Offline TranslationDatabaseSO
  • TTS: Native iOS/Android speech synthesis
  • Persistence: JSON (JsonUtility) + PlayerPrefs

Third-Party Packages

  • TextMeshPro (UI text rendering)
  • Newtonsoft.Json (JSON serialization)
  • Input System (new input handling)

๐Ÿ“ฆ Installation & Setup

Prerequisites

  • Unity 6000.2.10f1 (exact version required)
  • Unity Hub recommended
  • Platform modules:
    • iOS Build Support (for iOS builds)
    • Android Build Support (for Android builds)
    • OpenXR Plugin (for VR)

Installation Steps

  1. Clone Repository

    git clone <repository-url>
    cd "Lingua AR"
  2. Open in Unity Hub

    • Open Unity Hub
    • Click "Add" โ†’ Select project folder
    • Unity version: 6000.2.10f1
    • Click "Open"
  3. Package Resolution

    • Packages auto-resolve from Packages/manifest.json
    • Wait for compilation to complete
  4. Niantic Lightship Setup

    • Obtain API key from Niantic Lightship
    • Open Assets/Settings/LightshipSettings.asset
    • Paste API key
  5. Test in Editor

    • Open Assets/Scenes/AR Scene.unity
    • Enter Play mode
    • XR Simulation activates automatically

๐ŸŽฎ Usage Guide

Testing in Unity Editor

  1. Load AR Scene

    • Open Assets/Scenes/AR Scene.unity
  2. Select Simulation Environment

    • Window โ†’ XR โ†’ AR Foundation โ†’ XR Environment
    • Choose: Kitchen, Living Room, Office, etc.
  3. Controls

    • Mouse: Look around
    • WASD: Move camera
    • Right-click + drag: Rotate view
  4. Interact

    • Detection rectangles appear on objects
    • Click rectangle to open action menu
    • Test pronunciation, examples, vocabulary save

About

Augmented Reality App for Language Learning in a new way ๐ŸŒ

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages