This project started from an existing game template, and the video shows the original template next to the modified version.
I implemented proper tennis rules, improved the ball physics so shots went where the player aimed, and made the hit response much more precise instead of letting the ball fly unpredictably.
I gave the opponent more depth, added a few new animations and VFX, sped up the game loop, fixed various bugs, and added a timing circle to show when the player should swing as the ball gets closest - which also affected shot power.
I reduced the build size from over 30 MB to 8 MB, cutting it by more than 73%. That helped keep the game loading in under 5 seconds.
I also improved runtime performance so the game felt smoother inside the app.
Targets practice mode
I added a targets practice mode where the player shoots at an animated target. The score is based on how precisely the ball hits the target and whether the player timed the shot correctly.
This is also where the config system came in nice, allowing us to choose between this mode and the regular game modes, by modifying a config value. This allowed us to keep the same build, and easily switch between modes.
For all the animations including target movement I used a tweening library.
Gallery