Social VR · Unity · UdonSharp
Unity/UdonSharp VR Bible world
A multiplayer VRChat world with a synchronized, multilingual Bible reader designed to work naturally for people sharing the same space.
- Project duration
- About eight months
- Period
- November 2025–July 2026
- Role
- World development, interaction design and multiplayer testing
In-world interface
Reading together in VR
The world presents book, chapter, translation and navigation controls as a readable panel inside the shared environment.
Project outline
A shared interface with clear ownership
Over about eight months I developed the Unity world and its UdonSharp interactions, worked through Linux SDK compatibility issues, and tested the result with multiple local clients. The reader loads separately maintained translation data and lets visitors choose a language, book and chapter without leaving the world.
Custom translation format
The Bible text is delivered in a custom compact text format shaped around Udon's runtime constraints. I wrote the in-world parser that downloads the data, separates translations, books, chapters and verses, and builds the nested data used to populate the language, book and chapter controls.
Synchronized state
The selected language, book, chapter, scroll position and lock status are synchronized between players. Before changing shared state, an interacting client takes network ownership and requests serialization; other clients then apply the updated values when they receive them. This keeps the reader on the same passage for everyone in the instance.
Per-user locking
When the controls are unlocked, any visitor can navigate. A player can lock the reader to their individual player ID, after which only that player can change the shared controls or release the lock. Input from other users is rejected and their interface is restored from the synchronized state, preventing competing interactions from leaving clients out of step.
World development and testing
The work covered the broader world as well as the reader: laying out an interface that remains legible in VR, connecting controls to networked behaviour, diagnosing SDK differences on Linux, and verifying synchronization and ownership across multiple clients.