3D gathering and 2D combat

Exile

Build a Mine by day and its iron can pay for a sword upgrade you’ll use in the 2D night fight. I built the 3D preparation and 2D combat scenes around the same saved progress. Exile was my first real game project, and I built it for Windows and Android.

Role
Solo Programmer and Designer
Context
  • Solo Project
  • university project
Period
2023
Status
  • Windows build
  • Android APK
  • source available
  • Unity 2021 LTS
  • C#
  • ScriptableObjects
  • PlayerPrefs
  • Interfaces
Exile 3D daytime resource and village-building phase in a forest settlement
My 3D preparation phase: gathered resources pay for buildings and upgrades used in the 2D night phase.

Overview

Exile was my first real game project: a solo Unity/C# game released for Windows and Android.

A central GameManager keeps progress across scene changes and saves it with PlayerPrefs.

My contribution

  • Built gathering and placement for five building types, with resource costs and collision checks before a purchase becomes part of the settlement.
  • Implemented sword and armour upgrade paths and the 2D combat phase that uses the player’s daytime preparation.
  • Saved progression through PlayerPrefs and rebuilt purchased buildings on scene entry. Remaining resource counts persist, while their positions are generated again.
  • Used one interaction contract for the mine, two upgrade shops and day-ending bed, keeping harvesting and blueprint placement separate.
  • Diagnosed invalid terrain references that blocked a player build and produced the Windows release and ARM64/IL2CPP Android APK.

From 3D day to 2D night

The assignment called for a 2.5D game. I asked if I could make the day 3D and the night 2D because I wanted to try both. The hard part was making an upgrade bought in one scene work in the other.

01 · 3D day

Gather and upgrade

Exile 3D daytime resource and village-building phase in a forest settlement
My 3D preparation phase: gathered resources pay for buildings and upgrades used in the 2D night phase.

I gave the player a limited day to gather resources and decide what to build. A Mine supplies iron for sword and armour upgrades.

02 · 2D night

Fight with those upgrades

Exile 2D nighttime combat phase showing the knight fighting an enemy near the settlement
The 2D night phase turns daytime preparation into direct defensive combat.

The night scene reads the same stats and upgrades. I added one enemy after each completed night to make the next defence harder.

What carries over I keep resources, stats and upgrades in the GameManager. When the player returns to the village, the game rebuilds the purchased buildings from saved state.

The end of a daytime gathering run, the transition, and the 2D night that follows it.

What to build before dark

I let players choose which of the first four buildings to buy. The Mine pays out iron each day. Walls unlock once the Mine, Forge, Armory and Hospital are built.

I paused the clock while shops were open so players had time to read their choices. Healing at the Hospital still spends time they could use to gather or build.

How I saved progress

I used PlayerPrefs to store stats, resources, difficulty, settings, the remaining resource counts and purchased buildings. When the day scene loads, it restores the buildings and generates fresh positions for the remaining resource nodes.

Interaction System

The player raycast targets one IInteractable contract, letting the mine, upgrade shops, and day-ending bed provide distinct actions without type-specific branches in the interactor.

Diagnosing a blocked build

Invalid terrain references prevented a player build. I traced the build errors back to those references before producing the release builds, including the ARM64/IL2CPP Android APK.

Outcome and evidence

I delivered a Windows game with a complete day/night progression loop and a direct-install Android APK with on-screen controls.

  • The release record covers Windows gathering, purchases, building, night combat and saved progression.
  • The Android APK builds with ARM64/IL2CPP and installs. Physical-device gameplay remains unverified.

What I learned

The transition only works when each scene reads the same progression state. I would next vary enemy composition and positioning instead of adding one enemy per night, and test a harder shop mode where the clock keeps running.