Skip to content

Repository files navigation

Island Explorer

A playable 3D island exploration game for macOS, built with Unity 6 and Unity MCP CLI.

This project also contains Sky Strike, an arcade flight-combat game (Ace Combat-style) set on the same island — see the Sky Strike section below.

Features

  • Procedural Island Terrain - Irregular hills generated with layered Perlin noise and ridged features, surrounded by ocean
  • Projected-Grid Ocean - Infinite screen-space ocean (no plane edge): Gerstner waves, world-space micro-normals, depth shore foam, horizon melt
  • Poly Haven CC0 Assets - Trees, rocks, and cliffs from Poly Haven (CC0 licensed), automatically placed and grounded on the terrain
  • FPS Walking - First-person controller with WASD movement, mouse look, sprint, head bob, and terrain following
  • Dynamic Performance Scaling - Monitors FPS and drops render resolution to 50% when the scene gets heavy, restores when performance recovers
  • HUD - Shows FPS, render scale state, and controls

Controls

Key Action
WASD Move
Mouse Look around
Shift Sprint
Esc Toggle cursor

How to Run

Pre-built (macOS)

Open Builds/IslandExplorer.app directly.

From Unity Editor

  1. Open the project in Unity Hub (requires Unity 6000.3.x)
  2. Run menu: Island Explorer > 1. Import Poly Haven Models (creates prefabs from FBX assets)
  3. Run menu: Island Explorer > 2. Setup Scene (configures URP and scene)
  4. Press Play

Build from CLI

# Install Unity MCP CLI
npm install -g unity-mcp-cli

# Build macOS player
/Applications/Unity/Hub/Editor/6000.3.11f1/Unity.app/Contents/MacOS/Unity \
  -projectPath /path/to/IslandExplorer \
  -batchmode -quit \
  -executeMethod "IslandExplorerSetup.BuildMacOS"

Project Structure

Assets/
  Scripts/
    GameManager.cs        - Scene orchestrator (auto-creates at startup)
    IslandTerrain.cs      - Procedural terrain with Perlin noise hills
    FPSController.cs      - First-person walking controller
    OceanRenderer.cs      - FFT-style ocean mesh and material setup
    PropPlacer.cs         - Scatter and ground props on terrain
    PerformanceScaler.cs  - Dynamic half-resolution scaling
    HUDController.cs      - FPS and status overlay
  Editor/
    IslandExplorerSetup.cs - URP setup, scene config, macOS build
    ModelImporter.cs       - Poly Haven FBX to prefab pipeline
  Materials/
    Ocean.shader           - Custom URP ocean shader with shore foam
  Models/                  - Poly Haven CC0 assets (trees, rocks, cliffs)
  Resources/Prefabs/       - Runtime-loadable prefabs from FBX models
  Scenes/
    IslandExplorer.unity   - Main scene

Asset Credits

All 3D models and textures from Poly Haven (CC0 license):

  • Trees: island_tree_01, island_tree_02
  • Rocks: boulder_01, rock_07, rock_09, rock_moss_set_01
  • Cliffs: coastal_cliff_01, coastal_cliff_02, rock_face_01

Sky Strike

An arcade flight-combat MVP (Ace Combat-style gameplay, original code and procedural models) set above the same island. Wave-based dogfighting with missile lock-on, gun tracers, evasive bandit AI, and an AC-style HUD.

Visuals (realism pass)

  • F-15-style airframes — modeled in Blender via a headless bpy pipeline (Tools/blender_f15.py, run with blender --background --python): superellipse-lofted fuselage, beveled cropped-delta wing, stabilators, twin canted fins, rectangular intakes, canopy, twin nozzles, scorched tail sleeve, full smart-UV unwrap — exported as Assets/Models/Jets/F15_Blender.fbx. Assets/Editor/BlenderJetBuilder.cs assembles it into gameplay prefabs (auto orientation fix, skin materials per part, decals, hit collider); the older ProBuilder path (JetModelingTool) remains as fallback.
  • High-detail cockpitTools/blender_cockpit.py builds a full IP (canopy bow, HUD combiner, MFDs, scope, switches, gauges, seat/stick) to F15_Cockpit.fbxResources/Prefabs/Jets/PlayerCockpit; runtime falls back to procedural frame if missing. Toggle with V. Player in air-superiority gray, bandits in a dark aggressor scheme.
  • Painted skin textures — procedurally painted at editor time (JetTexturePainter, no source images): irregular panel layout with random access panels, rivet rows, per-panel tint variation, grime/streaks (albedo + tangent normal map + metallic/smoothness mask); scorched bare-metal tail sleeve around the exhausts; wing-top and fin insignia decals (low-visibility star-and-bars for the player, red star for bandits). Meshes carry cylindrical (fuselage) and planar (wings) UVs; variant schemes are tints over the shared skin set.
  • HDRI sky — Poly Haven CC0 pure-sky 2k HDRI (qwantani_noon_puresky, fallbacks: kloppenheim_06_puresky / kloppenheim_02) so the island and ocean read cleanly without a suburban ground plate (download_realism.py fetches them).
  • PBR terrain — real grass/sand/rock textures with normal maps (Poly Haven CC0) instead of solid colors.
  • Ocean (projected grid) — full rewrite: NDC mesh ray-cast onto the sea plane (fills the horizon at any altitude, no finite-plane edge or UV tiles), 8-component Gerstner displacement, world-space micro-normals, depth-based shore foam, sun glint, horizon melt into the sky.
  • Clouds — soft billboard clusters using procedural value-noise puff textures and a custom transparent shader (SkyStrike/CloudSprite).
  • Post-processing — URP HDR + global volume: ACES tonemapping, Bloom, vignette, color grade; SMAA on the chase camera.

Scene content is generated at startup: a 2048m island with a shoreline airbase (auto-sited, terrain-flattened runway, tower, hangars, apron, parked jet) on the ground, and 34 billboard cloud clusters (600-1250m) in the air.

Controls

Key Action
Mouse Pitch / roll (banked turns auto-yaw)
W / S Throttle up / down (brake on ground)
Shift Afterburner
A / D Rudder (ground steering)
Mouse pull Rotate at >230 km/h (takeoff)
G Landing gear up/down
T Auto takeoff (on runway; any stick input aborts)
P Autopilot: altitude + heading hold
O AP waypoint mode: fly to / orbit current target
L Auto land: approach, glide, flare, touchdown, rollout
V Cockpit / chase view (RMB free-look in cockpit)
Space Fire missile (needs lock for homing)
LMB / Left Ctrl Gun
F Flares (deflect incoming missiles)
Tab Cycle target
Esc Toggle cursor
R Restart after mission failed

Gameplay

  • Takeoff from the island airbase (runway spawn); land with gear down, slow and gentle, anywhere flat — belly landing is fatal.
  • Automation: T = auto takeoff (throttle, roll, rotate, climb-out, then AP); P = autopilot altitude/heading hold; O = AP waypoint (intercept and orbit the current target); L = auto land (picks runway direction, 2.5 km approach fix, horizontal-distance glide slope with terrain protection, sink-rate flare, touchdown, rollout, go-around on overshoot). Any stick input aborts and hands back manual control.
  • Bandits patrol, pursue, evade, and fire guns; when tailed they launch homing missiles — watch for the MISSILE warning with bearing arrows and pop flares (F) or outmaneuver.
  • Wave-based scoring: +100 per kill, +250 per wave clear, +8 missiles per wave.
  • Procedural sound: engine (throttle/AB-linked), lock seek/lock tones, missile alert, gun, explosions.

How to Run

Pre-built (macOS)

Open Builds/SkyStrike.app directly.

From Unity Editor

  1. Open the project, then run menu: Sky Strike > 1. Setup Scene (creates Assets/Scenes/SkyStrike.unity; already generated in this repo)
  2. Open the SkyStrike scene and press Play

Dev helpers (Editor only)

Menu Sky Strike > Dev (all off by default, memory-only flags):

Toggle Effect
Auto Takeoff On Start Engage T 2s after play
Auto Land After Takeoff After climb-out, engage L (T→L loop)
Start On Final Approach Teleport to 2.2 km final + auto land
Log Auto Land 1 Hz [AutoLand] console logs
No Enemies Skip combat waves
Terrain Diagnostics One-shot terrain/sky dump at start
Reset All Dev Flags Clear everything

Build from CLI (official Unity CLI)

# Regenerate scene + ProBuilder jet prefabs (batch run)
unity run /path/to/IslandExplorer --non-interactive -- \
  -executeMethod SkyStrikeSetup.SetupScene \
  -logFile /path/to/IslandExplorer/Builds/skystrike_setup.log

# Build macOS player
unity build /path/to/IslandExplorer --non-interactive \
  --target StandaloneOSX \
  --execute-method SkyStrikeSetup.BuildMacOS

Note: the unity command / eval live-Editor workflow (com.unity.pipeline) currently cannot bind its HTTP server on this machine (Mono HttpListener wildcard-bind failure on ports 7800-7849); Assets/Editor/PipelineServerBootstrap.cs retries the server start automatically when the environment allows it.

Project Structure

Assets/
  Scripts/SkyStrike/
    SkyStrikeGameManager.cs - Orchestrator: world, waves, score, game over
    FlightController.cs     - Flight + ground + auto land (approach/final/flare)
    SkyStrikeDev.cs         - Runtime dev flags (defaults all false)
    ChaseCamera.cs          - Chase cam + cockpit view (V), post FX + SMAA
    WeaponSystem.cs         - Lock-on, missiles, gun, flares
    Missile.cs              - Homing missile (player & enemy variants)
    EnemyAI.cs              - Bandit AI: patrol / pursue / evade / missile shots
    ThreatWarningSystem.cs  - Incoming-missile tracking + flare deflection
    SkyStrikeHUD.cs         - AC-style HUD (lock, warnings, gear, rwy guide)
    SfxManager.cs           - Sound playback (engine/lock/alert/one-shots)
    ProceduralAudio.cs      - Synthesized clips (no audio assets)
    AfterburnerFX.cs        - Throttle-driven additive AB flames
    LandingGearVisual.cs    - Gear extend/retract animation
    JetModelFactory.cs      - Loads Blender FBX prefabs (procedural fallback)
    JetMeshBuilder.cs       - Loft + prism geometry (fallback path)
    AirbaseBuilder.cs       - Ground scene: site pick, terrain flatten, runway
    SkyEnvironment.cs       - Air scene: billboard cloud clusters
    ExplosionFX.cs          - Particle explosions, tracers
  Editor/
    SkyStrikeSetup.cs       - Scene creation + macOS build (CLI entry points)
    SkyStrikeDevMenu.cs     - Editor menu for SkyStrikeDev flags
    JetModelingTool.cs      - ProBuilder jet modeling -> prefab assets
    JetTexturePainter.cs    - Procedural F-15 skin textures (panel/rivet/grime)
    RealismSetup.cs         - HDRI skybox, HDR, post volume, import settings
    PipelineServerBootstrap.cs - Retries com.unity.pipeline server startup
  Resources/Prefabs/Jets/   - PlayerJet / EnemyJet (ProBuilder prefabs)
  Resources/Textures/Jets/  - Painted F-15 skin (albedo/normal/mask)
  Resources/Textures/Terrain/ - Terrain PBR textures (Poly Haven CC0)
  Textures/Sky/             - HDRI sky (Poly Haven CC0)
  Materials/Jets/           - Jet material assets
  Materials/CloudSprite.shader - Transparent cloud billboard shader
  Scenes/
    SkyStrike.unity         - Sky Strike scene

Sky Strike reuses IslandTerrain, OceanRenderer, and PropPlacer from Island Explorer for its 2048m island backdrop. download_realism.py fetches the HDRI sky and terrain textures from Poly Haven (CC0).

About

Island Explorer + Sky Strike: Unity 6 island FPS and Ace Combat-style arcade flight combat MVP

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages