
Dino Run
A three-lane endless runner with eight voxel dinosaurs: a Blender toolchain feeding Unity 6, for Android.
A three-lane endless runner for Android and a personal project from the first sketch to the build. The player is a voxel dinosaur: swipe left and right to change lane, up to jump, down to slide. Everything the game asks resolves to one of those four, and the design holds to that.
The eight species — T-Rex, Triceratops, Brachiosaurus, Velociraptor, Stegosaurus, Ankylosaurus, Parasaurolophus and Spinosaurus — are modelled, rigged and animated in Blender by a Python toolchain, eight clips each, then exported and wired into Unity by editor factories. A change to the rig is a script run, not an afternoon.
Levels are authored as blockouts and validated automatically: every pattern is sampled along the track and rejected if any slice leaves the player no possible answer. Difficulty comes from speed and density, never from an unfair arrangement.
- Year
- 2026 — in development
- Role
- Personal project — design, 3D, code
- Tools
- Unity 6
- Blender
- Python
- C#
League 1
Primeval Valley, eight ways
The first league, recorded from the build with every species in turn: a red-earth trail through a voxel jungle, stone gates, fossil obstacles and the coins between them. Each clip is eighteen seconds of the game playing itself.
League 2
Ancient Wilds
The second league opens with a descent: every course drops a flight of stairs into buried ruins, and the camera leans into it. The same eight runners, the same eighteen seconds.
The roster
Eight species, one toolchain
Each dinosaur is built by the same scripts — a voxel body on a rig of eighteen to twenty bones, eight animation clips, a baked palette atlas — so the roster stays consistent and any of them can be rebuilt in minutes.








The toolchain
A hundred levels as blockouts
Levels are laid out grey first — lanes, obstacles, pickups — generated and previewed in Blender before any art goes on. A validator samples every pattern along the track and refuses one the player could not survive.




