
Jesper Elmtoft
Engine & Tools programmer student


Roles:
Lead Programmer
Systems Programmer
Duration:
2 Months
Team Size:
4 People
Tools Used








LillySkill VR is an interview training application developed as a two-month internship project. The primary goal was to create an accessible professional development tool that democratizes VR training by removing the barrier of expensive hardware.
-
Problem: Mobile VR Performance & User Comfort
-
Context: Running VR on standard smartphones (Google VR SDK) is hardware-intensive. Early builds suffered from low frame rates (20 FPS), causing motion sickness and a poor user experience.
-
Solution: I implemented a strict Performance Budget. I coordinated with the Art Department to optimize poly-counts and wrote a SetTargetFrameRate script to lock the app at a stable 60 FPS. Additionally, I developed an asynchronous SceneHandler with a custom Coroutine-based "Fade-to-Black" system to prevent visual stuttering during heavy scene transitions.
-
-
Problem: System Scalability Without Supervision
-
Context: As an intern team without a senior programmer, we needed a way to manage 25+ interview categories (e.g., Empati, Ledarskap) without creating a tangled, hard-coded codebase.
-
Solution: I architected a Data-Driven System using Unity ScriptableObjects. By decoupling the content from the logic, I created a "Plug-and-Play" framework where new interview scenarios could be added or edited in the inspector without touching the core C# code.
-
-
-
Lead & Systems Programmer: I served as the technical anchor for a 4-person team, managing the GitHub version control workflow and oversaw tasks for two other programmers to ensure code consistency and optimized performance.
-
Modular Content Engine: Designed the CategoriesData system which utilized Bitwise Flags for efficient answer validation and a Deep-Copying (Clone()) logic to ensure runtime player data never corrupted the original source assets.
-
Dynamic Assessment Logic: Built a tiered scoring engine that evaluated answer quality (Bad, Average, Good) and dynamically calculated the MaxScore based on the active categories selected for that specific training session.
-
Universal VR Accessibility: Chose and integrated the Google VR SDK to ensure the project met the client’s goal of "VR for everyone," allowing the app to run on affordable phone-based headsets rather than expensive proprietary hardware.
-
-
The Importance of Tooling: I learned that as a Systems Programmer, my job isn't just to make the game work, but to make the team work. Building the ScriptableObject editors allowed our team to iterate on interview questions in real-time, significantly speeding up our development cycle.
-
Agile Client Delivery: Working with Hello Lilly in Stockholm taught me how to handle high-pressure deadlines. Constant playtesting with their employees provided immediate feedback, teaching me to prioritize "critical path" features that directly impacted the user’s learning outcomes.
-
Self-Taught Architecture: Having no supervisor forced me to become an expert researcher.
I learned to navigate complex SDK documentation and implement professional patterns (like State Machines and Singleton Managers) independently, which has made me a much more confident and self-reliant developer.
-
Scriptable Objects Data from code



Code will be added later