Unity & Engine
- GameObject architecture
- DOTS / ECS
- Jobs + Burst
- Addressables used in: Cargo Simulator chunk streaming
- Profiling
Senior / Lead Unity Engineer — Systems · Multiplayer · VR
I build the systems that make games scale.
drag · scroll · arrow keys — click a card for the case study
No levels, no percentages. Where it matters, a node points at the shipped work that proves it.
Experience, newest first.
[2025–2026]
[2023–2025]
[2021–2023]
[2021]
[2019]
[2017]
Open to: Senior/Lead Unity roles — multiplayer, systems, VR. Remote (based in Ankara, TR) · EN / AR / TR.
An open-world cargo simulation game for PC — founded and built solo under NocturnForge, and released into Early Access on Steam (published by No King Interactive). A grid-based streaming world with procedural roads, where the delivery loop — packages, inventory, vehicles, characters — runs on fully data-driven systems.
Problem. An open world breaks two assumptions Unity makes: that positions are world-space floats (precision degrades with distance from the origin) and that a gameplay entity is a loaded GameObject (streaming means most of the world isn’t loaded at any given moment).
Constraint. Team size: one. There was no budget to fight the engine — every system had to work with Unity’s lifecycle, not against it, and still ship.
Solution. The ID-based entity system separates simulation state from the loaded representation. Entities exist as data whether or not their chunk is resident; GameObjects become disposable views that attach when a chunk streams in via Addressables and detach when it unloads, with precision handled at the chunking layer instead of raw world-space floats.
Result. The game shipped on Steam, built end-to-end by one engineer. The ambient scene on this site — routes, streaming, deliveries — is a toy version of these exact systems.
A class-based multiplayer VR roguelike brawler — play solo or in co-op, fighting through procedurally generated waves and bosses to build your character. It runs on Meta Quest, PC VR, and in the browser via WebGL. I owned physics-driven interaction and combat as Senior Unity Engineer (Jul 2023 – Sep 2025, remote).
Problem. A handheld object in networked VR is contested by three authorities: the local player’s hand, the physics engine, and the networked server state. With latency in the loop, default physics makes held objects visibly jitter — and in VR, jitter on something in your own hand is instantly nauseating and breaks the entire illusion.
Constraint. Critical collision runs server-authoritative to stop cheating, but combat needs held objects to respond crisply and both players to agree on hits — smoothing alone would make combat feel mushy.
Solution. Custom joint and constraint handling resolves the hand-object relationship locally and crisply, while server corrections are absorbed where the player can’t perceive them — keeping the client responsive without breaking server authority.
Result. Latency-induced jitter on handheld objects was eliminated, keeping VR combat physical and believable over the network across Quest, PC VR, and WebGL on a live, shipped title.
A top-down idle fishing simulation with automated fishing, resource collection, and progression. Boats and fishers run as autonomous agents; the economy converts caught resources into upgrades and passive income. Built solo in 2019 as a student project.
Problem. “Idle” means the game keeps playing itself — agents have to fish, path, and fight believably whether or not the player is watching, with no hand-holding.
Solution. Each boat/fisher is modeled as an FSM over NavMesh so behavior is autonomous and composable, and balance is driven from ScriptableObject data so the economy can be tuned without touching code.
Result. A complete idle game with autonomous agents and a tunable economy — the 2019 groundwork for the idle/arcade systems I later built at Hero Games.
A mobile idle mining game. Ant colonies dig through areas, extracting blocks that convert into gold. Gold funds upgrades — more ants, faster movement, and a better block-to-gold conversion rate — with sub-upgrades that stack to raise the gold each mined block yields. Clear an area and it’s replaced with an empty room you can fill with decorations; each decoration generates steady passive income scaled to its level, upgradeable up to a cap. At Hero Games I was the sole programmer, working alongside a game designer and an artist.
As the sole programmer, I built all of the game’s systems:
Problem. An idle economy has to stay rewarding across wildly different time scales — the first minute and the hundredth hour — without stalling early or trivializing later. Two income sources (active mining plus passive decoration income) and compounding upgrade tiers make the numbers grow fast.
Solution. A data-driven economy where mining yield, conversion, and decoration income scale on tuned curves, and offline progression is computed from elapsed time rather than simulated — so returns feel fair whether the player was gone a minute or a day.
Result. A complete, released idle title, with all of its systems coded by one engineer.
An asynchronous multiplayer idle game played entirely inside Telegram, built solo as a hobby while still in high school. It reached 400K+ registered users with 1K+ active players — and, though a hobby, it was a genuinely commercial product.
Problem. 400K+ registered users and 1K+ active players hitting a game that had no game servers in any traditional sense — just PHP, MySQL, cron jobs, and webhooks.
Constraint. One student, a student’s budget, and a stack chosen for being cheap to run rather than easy to scale.
Solution. Lean on the idle genre’s shape: state changes are either explicit player actions (webhooks, cheap to process one at a time) or time-based progression (computed in scheduled batches by cron instead of simulated continuously). The database does the multiplayer; nothing needs a persistent connection.
Result. The game served 400K+ registered users as a solo hobby project built in high school — and taught the systems thinking the rest of this portfolio is built on.
An idle dessert-shop tycoon: build an ice-cream empire, hire and automate staff — chefs, cashiers, waiters, baristas — unlock new products, and keep earning idle gold while you’re offline. Originally built at Hero Games; it’s currently live on the Play Store, relaunched under Leap Games. I worked on it as a gameplay engineer.
As a gameplay engineer on the team, I worked across:
An idle fashion-store tycoon. You run a clothing store: collect fabric, turn it into clothing, sell it, and reinvest — buying more racks to serve more customers and expanding the shop. Hire cashiers and fabric technicians to automate production and sales, and upgrade their speed as you scale. Built at Hero Games.
I built the game’s core fabric-weaving mechanic and its supporting systems:
Problem. The fabric-weaving mechanic had to feel physical and satisfying — fabric visibly rolling into clothing as you move over it — but run on mobile, where rebuilding mesh geometry every frame is exactly the kind of thing that tanks the frame rate.
Solution. Dynamic mesh manipulation that deforms and rolls the fabric mesh in real time as the player moves across it, kept cheap enough to stay smooth on the mobile target.
Result. A tactile signature mechanic — the core of how the game feels — running on phones.
A mobile arcade-idle infiltration game. You feed starter blocks into a machine that converts them into pickaxes, then deliver the pickaxes to a camp. Miners queue up, each grabs a pickaxe and moves to a ready zone; you collect the ready miners and lead them to the target zone. There, fields of unmined blocks sit under the gaze of patrolling guards — you paint each miner the right color so they blend in, mine a path to the gate, and once every block is cleared the miners open it. Past the gate they regroup, charge, and take out the remaining enemies. At Hero Games I was the sole programmer, working alongside a game designer and an artist.
As the sole programmer, I built every gameplay system:
Problem. The game is really a pipeline of dependent stages — convert, deliver, queue, collect, escort, disguise, mine, breach, fight — where each stage feeds the next. If any stage stalls or desyncs (a miner with no pickaxe, a wrong-colored miner spotted), the whole loop jams.
Solution. Miners are modeled as small state machines moving through an explicit queue, with each stage gated on the resource it needs — so throughput scales smoothly as the player upgrades and the pipeline never deadlocks.
Result. A complete arcade-idle title with a deep multi-stage loop, all of it coded by one engineer.
A hypercasual escape game. A vending machine dispenses batteries; you collect them and carry them to power stations, filling each until they’re all powered and the exit gate unlocks — then on to the next level. A killer patrols the level the whole time, but can’t detect you while you’re hiding in a vent. At Hero Games I was the sole programmer, working alongside a game designer and an artist.
As the sole programmer, I built the full game’s code:
Problem. Hypercasual tension lives or dies on the chase — the killer has to feel dangerous without being unfair, and hiding has to feel like a real escape, not a loophole.
Solution. A patrol-and-detect AI with clear, readable states (patrol → alert → chase) and a hard stealth rule — vents fully break detection — so the player always understands why they were caught and how to get away.
Result. A tight, readable hypercasual loop, coded end to end by one engineer.