Sky Hopper is a 2D vertical arcade game built with Unity, focused on responsive controls, readable obstacle patterns, and performance-aware gameplay systems.
Players tap to propel a bouncing ball upward through moving obstacle combinations. The game rewards timing, rhythm, and quick adaptation as difficulty increases.
This project currently includes 7 fully implemented and playtested levels.
The goal of this build is to deliver a polished gameplay vertical slice and prove production-ready engineering practices, not just maximize level count.
- 7 shipped levels with progressive obstacle combinations and tuned difficulty
- Reusable, data-driven obstacle setup that supports fast level expansion
- Focus on game feel, readability, and consistency across level progression
- Production systems included: save/load, localization.
- End-to-end Unity game development from gameplay prototype to shippable systems
- Clean system design using reusable prefabs, scriptable data, and pooling
- Production-oriented features: saving/loading, localization, ads.
- Tap-based movement using Unity Input System
- Multi-pattern obstacle gameplay (rotating, moving, projectile, boid-style)
- Physics-driven interactions with Rigidbody2D, joints, colliders, and effectors
- Camera feedback using Cinemachine (confiner + impulse shake)
- Visual polish with URP, Shader Graph materials, particles, trails, and bloom
- UI built with both uGUI and UI Toolkit
- Save/load pipeline using SQLite-net, StreamingAssets, and PlayerPrefs
- Localization support for multi-language UI/content
- Monetization integration via Google AdMob
- Engine: Unity (URP)
- Language: C#
- Tooling: Git, Unity Profiler, Gizmos
- Animation/Feedback: Cinemachine, Particle System
- Architecture Patterns: Singleton, Object Pool
Current obstacle set includes rotating lines, crushers, fans, clock hands, flow streams, boid zones, homing threats, trapdoors, and chain-based hazards.
Difficulty progression is authored by combining obstacle behaviors and tuning movement/rotation parameters per stage.
- Designed obstacle logic to be data-driven and reusable across levels
- Used pooling to reduce Instantiate/Destroy overhead during active gameplay
- Combined physics + tweening carefully to keep controls responsive
- SCREEN SHAKE in Unity using Cinemachine, Sasquatch B Studios
- Unity Manual, Unity
- Unity Universal RP Manual, Unity
- Unity Localization Package Manual, Unity
- Unity Shader Graph Manual, Unity
- OBJECT POOLING in Unity, Brackeys
- Get started with UI Toolkit in Unity, Sasquatch B Studios
- Boids, ECE 4760, Spring 2020, Adams/Land
- SQLite-net, Frank A. Krueger
- NativeQuadtree, Marijn Zwemmer
- DOTween Documentation
- Unity Localization: Add support for Multiple Languages, Root Games
- Mobile Ads SDK (Unity), Google AdMob
- Unity MCP, Justin P Barnett
- Audios
- Fonts
- Sprites
For educational or portfolio reference questions, contact: linhkhoiluong@gmail.com