ChangeLog

The full changelog.md from the package

Changelog

All notable changes to this package will be documented in this file.

The format is based on Keep a Changelogarrow-up-right and this project adheres to Semantic Versioningarrow-up-right.

[1.6.0] – 2025-12-19

Added

Unified Multiplayer Logging & Diagnostics

  • Unified logging system across:

    • Photon PUN

    • Photon Fusion

    • Local (offline) spawner drivers

  • Centralized runtime logging flags to prevent editor spam while still enabling deep diagnostics when needed.

  • Runtime snapshot support added to inspectors:

    • View live spawner state (population counts, active entries, trigger state).

    • Helps debug region, wave, and local area spawners in Play Mode.

  • New Fusion Spawner Diagnostics window - comprehensive logging of spawner activity

  • Extensive Fusion diagnostics tools - Network Behaviour mismatch tools, prefab table dump tools and much more

Expanded Sample Content

  • Updated Fusion sample scene:

    • Now includes Wave Spawners and Region Spawners.

  • Updated PUN sample scene:

    • Demonstrates Local Area Spawners and Wave Triggers together.

  • Samples now reflect real-world multiplayer setups rather than isolated test cases.

External Trigger & Multiplayer Hardening

  • Added external trigger support for:

    • Wave Triggers

    • Local Area Spawners

    • Region-based flows

  • Enables clean integration with:

    • Mission systems

    • Objective systems

    • Networked game-state controllers

Fusion Pooling Improvements

  • Added IFusionPooled interface to explicitly mark objects that should use the Fusion Object Pool.

  • Optional FusionPooledMarker component for non-code workflows.

  • Objects not marked now cleanly fall back to Fusion’s default lifecycle.

  • Pool expansion now supports per-frame spawn budgeting to avoid spikes when growing the pool.

New Runtime APIs

  • Purge API:

    • Remove spawned objects by spawn source (global, region, wave, etc.).

    • Fully exposed in inspectors for designer workflows.

  • Spawn entries can now opt out of NavMeshAgent modification, allowing:

    • Static props

    • Non-agent actors

    • Custom movement controllers


Changed

Inspector & Editor Cleanup

  • Major inspector refactor across:

    • Runtime Spawner

    • Local Area Spawner

    • Wave Spawner

    • PUN & Fusion drivers

  • Removed duplicate and legacy inspector fields.

  • Shared inspector header moved into a common assembly, allowing reuse across integrations.

  • Improved gizmo UI and clarity for region / wave visualization.

Initialization & Pooling Flow

  • Runtime Spawner initialization now:

    • Skips creating object pools for disabled spawner types.

    • Reduces memory overhead and startup cost.

  • Pool prewarm now passes absolute object counts, not deltas, improving accuracy and stability.

Networking Integration Structure

  • Standardized PUN adapter namespaces and folder layout.

  • Reorganized Fusion integration for clarity and maintainability.

  • Hardened Fusion pooling handler against edge cases during spawn/despawn.


Fixed

  • Fixed multiple domain reload issues in inspectors and runtime drivers.

  • Hardened inspector behavior during:

    • Assembly reloads

    • Play Mode transitions

  • Fixed Fusion pooling edge cases that could cause:

    • Incorrect despawn paths

    • Pool mismatches under load

  • Offline Triggers w/ Multiplayer integrations

    • Added new Trigger execution system and network trigger drivers to prevent triggers from executing out of sequence for multiplayer scenarios

  • Improved safety guards for runtime exceptions during initialization and teardown.


Notes

  • This release represents a major internal hardening pass across:

    • Multiplayer (Fusion + PUN)

    • Pooling

    • Inspectors

    • Runtime diagnostics

  • Strongly recommended for:

    • Multiplayer projects

    • Large maps with mixed spawner types

    • Teams relying on runtime debugging and designer-driven workflows

  • Fully backward-compatible with 1.5.x configurations.****

[1.5.1] - 2025-11-15

Added

  • Improved Fusion Pool Integration

    • Added full support for both Fusion pooling provider modes:

      • Core Provider: FusionPoolProvider Passed directly into StartGameArgs.ObjectProvider from a custom bootstrap.

      • Behaviour Provider: FusionPoolObjectProviderBehaviour MonoBehaviour variant attached to the same GameObject as NetworkRunner.

    • Fusion integration guide updated with examples for both approaches and guidance on when to use each.

    • Added stricter guarantees that pooled objects are always:

      • Returned to Fusion’s IPoolAdapter when despawned

      • Deactivated before return (NavMeshAgents, animators, behaviours, etc.)

    • Improved debug logging and workflow tips in the Fusion Setup Guide.

  • Global + Per-Entry Population Enforcement

    • Global spawner loop now fully respects:

      • minGlobalObjectCount / maxGlobalObjectCount

      • Per-entry maxPopulation

      • Overall maxObjectCount cap

    • Ensures no global or regional flow can exceed configured limits.

  • Per-Entry Population Tracking

    • SpawnEntry.currentPopulation now increments/decrements correctly across global, region, and wave spawns.

    • Population is reset on Init, respecting duplicates across global/region/wave tables.

Changed

  • SpawnExecutor hard guards

    • Added early-exit checks to prevent any spawn request when:

      • Global cap reached

      • Entry cap reached

    • These guards run before placement resolution or pooling.

  • Region spawning placement

    • Region locator now refuses placement cleanly when minSpawnRange or other constraints invalidate sampling—no more falling back to region center.

    • Default demo region spawner settings adjusted to avoid spawn-range conflicts.

  • Spawn locator safety

    • Region/global/wave sampling no longer snaps to fallback center points unless explicitly configured.

    • Improved use of HintOnly logic and NavMesh sampling.

Fixed

  • Global spawner ignoring global caps

    • Global flow no longer overspawns when multiple entries reference the same SpawnEntry asset.

  • Local Area Spawner spawning all objects at region origin

    • Fixed sampling logic that caused region spawns to appear at region center when NavMesh sampling failed.

  • Entry null-check regression in WaveEntry loop

    • if (!wave) corrected to explicit null check to avoid invalid operator issues.

  • Pool prewarm + NavMeshAgent enable timing

    • Ensured prewarmed pooled objects always disable agents safely before spawn.

Notes

  • This patch stabilizes the full population-control pipeline across globals, regions, and waves.

  • Recommended for all 1.5.0 users, especially those using Fusion/PUN integrations or large multi-region maps.

[1.5.0] - 2025-11-04

Added

  • Optional Networking Integrations:

  • Photon Fusion 2.0 and Photon PUN 2 adapters now included:

  • FusionFactoryAsset and PUNFactoryAsset implement IObjectFactory for seamless Runtime Spawner integration.

  • Built-in support for Fusion’s IPoolAdapter bridge via FusionPoolObjectProvider, ensuring pooled network object lifecycle.

  • Fusion Bootstrap sample included for quick setup and testing.

  • PUN Bootstrap sample included for quick setup and testing.

  • Extended lifecycle control:

  • SpawnDirector now supports Pause(), Resume(), and End() methods for runtime control and clean teardown.

  • SpecialEncounterManager adds matching lifecycle APIs (Pause(), Resume(), End()), allowing dynamic session control during network or game state transitions.

  • Full XML documentation added for all new public APIs and integrations.

Changed

  • Updated internal initialization logic in RuntimeSpawner to gracefully coordinate with network factories and their lifecycle (Begin/End parity).

  • Documentation and inspector help tips updated to reflect new lifecycle methods and network setup flow.

  • switched Samples from Built-in Renderer to URP

Fixed

  • Eliminated potential null references in network object factories when used without manual runner assignment.

Notes

  • The new Fusion and PUN integrations allow the spawner to drive networked gameplay out of the box.

  • Lifecycle additions (Pause, Resume, End) improve robustness in cooperative and session-based titles — ideal for multiplayer lobbies, mission transitions, or pause menus.

  • These changes are fully backward-compatible with 1.4.x projects.

[1.4.0] - 2025-09-27

Added

  • Deterministic seeding support:

  • RuntimeSpawner.SetGlobalSeed(int seed) enables reproducible spawn layouts.

  • Integrates with custom RNG services for consistent world generation.

  • Runtime diagnostics & tools:

  • Play Mode buttons in inspectors to manually step/test spawns.

  • Improved logging for seed changes, deferred jobs, and placement results.

  • Lightweight NavMesh monitoring:

  • Auto-enabler detects when agents move off NavMesh and disables until valid again.

  • Inspector improvements:

  • Grouped headers for References / Scaling / Diagnostics.

  • Integrated help tips and clearer property layouts.

Changed

  • SpawnExecutor updated to support deterministic seed flow across spawners.

  • RegionPopulationController inspector now has runtime tools for quick play-mode testing.

  • Default spawner setup simplified (auto-assigns hint settings, references when created).

Fixed

  • Missing UI reset on resurrected enemies now handled via new view/controller event hooks.

  • Adjusted help tip sizing in inspectors to correctly fit wrapped lines.

  • Prevented null reference exceptions in SpecialEncounterManager when spawner is not configured.

Notes

  • Deterministic seed support means that the same seed + map setup = the same spawn layout.

  • GPU Instancing integration is recommended for large-scale enemy swarms (external).

[1.3.0] - 2025-09-09

Added

  • NavMesh placement policy on SpawnEntry:

  • Require – spawn only when a valid NavMesh position exists (otherwise defer and retry).

  • Prefer – spawn immediately; agent enables when NavMesh becomes available.

  • Ignore – place without NavMesh restrictions.

  • Deferred placement queue in RuntimeSpawner for Require policy (with exponential backoff).

  • Spawn Hints system:

  • EnemySpawnHintPoint components act as authored spawn anchors with per-hint rules:

  • minPlayerDist, maxPlayerDist, denyLineOfSight, requireNavMesh, overrideAreaMask, tags.

  • SpawnHintSettings asset controls global behavior:

  • hintOnly, cellSize, waveSearchPadding, regionSearchPadding, globalSearchFraction, navSampleMaxDist, losBlockMask, reservationSeconds, preferScopedFirst, maxHintAttempts, ignoreGlobalMinDistance, debugLogs.

  • Spatial registry with soft reservations to avoid piling spawns on one hint.

  • Tag matching: WaveSpawnPoint.AnchorTags flow through to spawns so waves can target hints with matching tags first.

Changed

  • SpawnExecutor now honors NavMeshPlacementPolicy:

  • Uses NavMeshUtil.TryProject for Require; enqueues deferred jobs on failure.

  • Adds/uses NavMeshReadyEnabler for Prefer to enable agents when NavMesh is ready.

  • SpawnLocator integrates Spawn Hints:

  • Tries hints first (and respects hintOnly), then falls back to previous sampling logic.

  • Supports wave/region/global search radii and LOS checks.

  • Emits debug rays/logs when debugLogs is enabled in settings.

Fixed

  • Newly created Spawn Hint Settings assets from the inspector are now auto-assigned to the spawner field (no manual drag required).

  • Added one-time warnings for misconfigured hints:

  • Hint MinPlayerDistance >= MaxPlayerDistance.

  • Global MinSpawnRange exceeds hint MaxPlayerDistance (unless ignoreGlobalMinDistance is enabled).

Notes

  • Enabling Hint Only means no spawn will occur unless a qualifying hint is found (by design).

  • If using global MinSpawnRange, ensure it doesn’t exceed your hints’ MaxPlayerDistance, or enable Ignore Global Min Distance in SpawnHintSettings.

[1.2.6] - 2025-08-24

  • Clean up, adjust runtime spawner defaults when you create a new one in a scene

[1.2.5] - 2025-08-23

  • Massive refactor, improvements

  • New spawn director to control increasing intensity

  • New encounter system for specials ala left 4 dead

  • New diagnostics hud to visualize spawner logic

  • New demo scenes, content and demo controller

[1.1.0] - 2025-04-13

  • Major fix, cache settings, performance boost / fix

  • Bug fixes

[1.0.1] - 2024-04-16

  • Fixes for issues spotted in asset store release (related to object fields)

[1.0] - 2024-02-15

  • Initial project setup, structure

Last updated