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 Changelog and this project adheres to Semantic Versioning.
[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
IFusionPooledinterface to explicitly mark objects that should use the Fusion Object Pool.Optional
FusionPooledMarkercomponent 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:
FusionPoolProviderPassed directly intoStartGameArgs.ObjectProviderfrom a custom bootstrap.Behaviour Provider:
FusionPoolObjectProviderBehaviourMonoBehaviour variant attached to the same GameObject asNetworkRunner.
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
IPoolAdapterwhen despawnedDeactivated 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/maxGlobalObjectCountPer-entry
maxPopulationOverall
maxObjectCountcap
Ensures no global or regional flow can exceed configured limits.
Per-Entry Population Tracking
SpawnEntry.currentPopulationnow 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
minSpawnRangeor 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
SpawnEntryasset.
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:
FusionFactoryAssetandPUNFactoryAssetimplementIObjectFactoryfor 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:
SpawnDirectornow supportsPause(),Resume(), andEnd()methods for runtime control and clean teardown.SpecialEncounterManageradds 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
RuntimeSpawnerto gracefully coordinate with network factories and their lifecycle (Begin/Endparity).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
SpawnExecutorupdated to support deterministic seed flow across spawners.RegionPopulationControllerinspector 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
SpecialEncounterManagerwhen 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
RuntimeSpawnerfor Require policy (with exponential backoff).Spawn Hints system:
EnemySpawnHintPointcomponents act as authored spawn anchors with per-hint rules:minPlayerDist,maxPlayerDist,denyLineOfSight,requireNavMesh,overrideAreaMask,tags.SpawnHintSettingsasset 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.AnchorTagsflow through to spawns so waves can target hints with matching tags first.
Changed
SpawnExecutornow honorsNavMeshPlacementPolicy:Uses
NavMeshUtil.TryProjectfor Require; enqueues deferred jobs on failure.Adds/uses
NavMeshReadyEnablerfor Prefer to enable agents when NavMesh is ready.SpawnLocatorintegrates 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
debugLogsis 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
MinSpawnRangeexceeds hintMaxPlayerDistance(unlessignoreGlobalMinDistanceis 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 inSpawnHintSettings.
[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