NumberKick is a 3D physics game built with SceneKit. Nine numbered panels (1–9) are arranged in a randomized 3×3 grid inside a goal. Swipe up to shoot — the trajectory changes based on where and how you swipe. Hit a panel and it breaks free from its ball-socket joint, tumbling to the ground with realistic physics. Reset and do it again.
The ball's forward force comes from the vertical component of the swipe. The starting position of the swipe controls the lift — starting near the bottom of the screen sends the ball high, starting near the top produces a low, hard shot. Horizontal swipe adds a sideways curve. Every kick feels different depending on where and how you swipe.
Each panel is anchored to the goal frame using an SCNPhysicsBallSocketJoint. A ball hit removes the joint and the panel becomes a fully dynamic rigid body governed by SceneKit's physics engine — it falls, bounces, and tumbles naturally. Panels near the ground fade out and disappear after a short delay.
The numbers 1 through 9 are shuffled and placed in a 3×3 grid inside the goal at the start of each round. The arrangement is different every time you reset, so the shooting challenge changes with each play.
Tap the reset button in the lower-left corner to restore the goal, panels, and ball to their starting state. The panels shuffle to a new random arrangement so the next round feels fresh. The ball fades out and reappears at its kick position.
The DragGesture reads both the translation (direction and distance of the swipe) and the starting Y position within the view. A normalized position value determines the lift factor — a low start on screen (near the bottom) adds upward force to the kick, a high start (near the top) reduces it. The horizontal translation adds a sideways force component. Together these three inputs produce a wide range of shot trajectories from a single swipe gesture.
Each of the nine PanelNode instances is connected to a static anchor node at the same world position using SCNPhysicsBallSocketJoint. When the ball's contact delegate fires, the joint for the hit panel is removed from the physics world and the panel's dynamic body takes over — falling, sliding, and colliding with the ground and other panels naturally. Once a panel's Y position drops below a threshold, it waits three seconds and then fades out via SCNAction.
The grass ground plane uses two GKPerlinNoise maps to produce a diffuse color texture with stripe shading and dry patches, plus a normal map for surface detail. Clouds are generated from perlin noise into transparent plane nodes with SCNBillboardConstraint so they always face the camera. The soccer ball pattern is derived mathematically from a truncated icosahedron — the classic black-and-white pentagon/hexagon geometry — computed per pixel in UV space.
The camera has wantsDepthOfField enabled with a focus distance set toward the goal, producing a natural bokeh effect in the foreground where the ball starts. The directional light casts deferred shadows with a soft radius so the ball and panels cast realistic shadows onto the grass. Both effects work together to make the flat-screen view read as genuinely three-dimensional.
Swipe upward on the screen to kick the ball toward the goal. The starting position of your swipe (low on screen = high shot, high on screen = low shot) and the horizontal direction (left/right = curve) both affect the trajectory. Short swipes below the threshold do nothing — make it a solid swipe.
After three seconds the ball resets to its starting position automatically. Tap the reset button in the lower-left corner any time to restore all panels to the goal in a new random arrangement and start fresh.
The panel arrangement reshuffles every time you reset, so no two rounds are ever the same. Try different swipe angles and start positions to knock down all nine panels as cleanly as you can.
"Didn't realize the swipe starting position affected the ball height until I accidentally shot one really high. Once I figured that out the game became much more interesting — you can actually aim for specific panels. Watching them tumble with physics is satisfying every time."
"The graphics are much better than I expected for a casual game. The grass texture, the clouds, the shadows — even the ball pattern looks right. Shooting the panels and watching them fly is a great stress reliever for a few minutes."
"Found out you can curve the ball left and right by adjusting the horizontal swipe. Now I specifically try to knock the corner panels with a curved shot. Simple premise but there's more depth to it than it looks. Good pick-up-and-play game."
Find answers to common questions below.