Releases
Latest - v1.1.38 (7th October 2026)
Changes
- Added “Raycast Transform” to aimer modules to help firearms hit exactly on reticule if desired
- Added tool to First Person Body behaviour to transition components and proxy objects over to a different body
Bug Fixes
- Fixed EntityID warnings in Unity 6.3
- Added alpha clipping to VFX particles for URP
- Removed motion blur causing issues with holographic sights in demo facility URP
- Fixed the semi auto trigger still firing after switching away and back with trigger held
- Rebuilt demo facility lighting for 2022.3 BIRP
- Fixed incorrect key types on binary serializer reference writers
Previous Releases
Major Changes
Rewrote serializable save / load methods to remove BinaryFormatter (non-compatible between systems)
Fixed all script errors and warnings from Unity 6.7
Raised minimum version to 2022.3 due to asset store upload restrictions
Changes
Added “No Action” option for buttons in gamepad profile editor
Added “Scale To Inventory” setting to FPS arms
Exposed wieldable root scale value on FpsInventoryBase
Added Unity 6.5+ static variable attributes to save system
Added onSelected and onDeselected C# events to MultiInputWidget base class
Rewrote hand bone offsets gizmo rendering to allow hands with less than 4 fingers
Tweaked HudAmmoCounter for better readout of passthrough reloader
Added a “Recharge Delay” setting to RechargingAmmo firearm module
Modified ModularFirearmModeSwitcher to allow calling SwitchModes method when it hasn’t been auto-attached to the firearm#
Added “Queue Audio” setting to QueuedTrigger firearm module
Exposed current panel, popup and nav controls properties on BaseMenu UI class
Added “Pause on Gamepad Disconnect” setting to in-game menu for Steam Deck certification
Tweaked MultiInputWidgetList to allow directional connections to other widgets, not just lists
Added backup item as a starting slot option for the inventory
Added example empty backup item
Added an option for the target tracking ammo effect to require a damage handler on a target to track it
Bug Fixes
Fixed gamepad profile not updating without a restart when editing in manager
Reset gamepad on entering play mode (prevents disconnected popup on start if gamepad disconnected during edit mode)
Switched [AlwaysExecute] runtime Awake functionality to OnEnable to prevent issues with domain reload disabled
Modified render texture scope texture size calculations to support non-fullscreen better
Fixed error from loading screen script events with domain reload disabled
Fixed incorrect parameters on string key reference serialization methods in binary serializer
Blocked character interaction handler from detecting interactions on the frame it’s enabled
Fixed pose handler not resetting correctly after save game load while sprinting
Major Changes
- When imported into Unity 6 or above, the NeoFPS demos now use URP rendering and the newer input system instead of the previous built-in render pipeline and legacy input manager
Changes
- Added a tick rate setting to DamageZone and GenericDamageTriggerZone
- Added an incoming damage filter to ArmouredDamageHandler (and shielded version) to allow certain damage types to bypass armour
Bug Fixes
- Updated hub settings page to detect HDRP particle shaders after Unity moved them
- Removed debug log from sprint handler
- Prevented object instantiation error when save system disabled
- Added OnDisable to water zones to clear tracked colliders
Additions
- Added a new weapon name HUD element which checks for a DisplayName behaviour and shows it on the HUD
Changes
- Raised minimum unity version to 2021.3
- Added extra stat getters to aimer, reloader, recoil handler and shooter modules which can be overridden for rpg mechanics
- Added reload speed animation parameters to reloader modules
- Added a “start includes reload” setting to incremental reloaders for start animations that include loading a shell
- Added setting to HUD interaction progress bar to disable matching colour to crosshair
- Exposed crosshair colour options for in-game menu in inspector
- Updated the URP and HDRP extension packages for better coverage of materials and prefabs
- Changed PhysicsBulletCasing to use ray casting before switching to rigidbody for better interpolation
- Added “Spring Return” settings to BetterSpringRecoilHandler to allow recoil which doesn’t spring back to original location
- Added “duplicateBehaviour” property to IInventory to fix a bug with auto-switching on replacing weapon
- Added “DropItem(IQuickSlotItem item)” method to IQuickSlots to allow swapping items that share a quick slot
- Added InputChraracterFlashlight.cs for flashlights in character hierarchy instead of weapon (eg helmet)
- Added FireGlobalHitEvent settings to damage handlers
Bug Fixes
- Added pragma to disable hub settings page warnings
- Fixed texture import warning on newer unity versions
- Updated demo facility geometry lightmap UVs due to issues baking with HDRP
- Replaced unity default materials with custom matte grey due to issues with SRP material converter
- Added lightmap UVs to jetpack demo scene geo
- Made climbing out of water in the swimming demo slightly easier
- Modified pickup wizard to set correct layer for view model to prevent colliding with player on drop
- Fixed the keybinding menu instantiating entries with the wrong parent in some situations
- Fixed steep slide transitions in full body demo animator controllers
- Modified weapon creation wizards to remove camera & audio listener from view model
- Changed scene pool handler to use NSGOs even if prefab isn’t registered (prevents errors)
- Trimmed artifacts from the end of the UI click and move audio files
- Updated material settings for particles causing issues with SRP converters
- Fixed menu default starting entry not visibly selecting if closed and re-opened without changing
- Fixed UI move audio not playing
- Improved behaviour of inventories when picking up an item that has a quick slot already in use
- Tweaked HudAdvancedCrosshair to not show hit marker for damage against self
- Fixed issues with ScenePoolHandler for prefabs not registered with the save system
- Fixed PhysicsBulletCasing causing warning about setting velocity on kinematic rigidbody
- Fixed menu widgets getting parent audio player too soon (sometimes instantiated outside of hierarchy)
Additions
- Added the ability to set blockers for character interaction
- New motion graph behaviour and wieldable tool action to block character interaction
Changes
- Added input system checks to unity settings page to highlight when project is not set up correctly
- Unity 6.1 makes input system only default for new projects
- Made save game path methods virtual in SaveGameManager
- Added pre/post file read/write events to SaveGameManager
- Increased collider limit for pooled explosions
- Improved timings and post-heal delay before deselection / destroy for wieldable tools
- Added separate collision vs interaction layers for CharacterInteractionHandler
- Added support to FpsSoloGameBase for moving player and character to DoNotDestroy scene between scene changes
- Added pooling support to ExplosiveObject
- Improved turret targeting with full 360 horizontal range
- Made damage splitting (compound damage handlers) and visiblity checks on explosions optional
- Set firearm shooter modules to use null for ignore root if no wielder present
Bug Fixes
- Fixed keyring starting keys not initialising properly
- Added second interactable check to interactive objects
- Fixed broken docs links for wieldable tool modules
- Fixed quick use and instant use items selecting on scroll wheel / select next or previous
- Prevented selecting empty slots with scroll wheel when inventory set to “Empty as Backup”
- Modified procedural body lean to add better speed/deceleration tolerance when switching from stand to crouch
- Fixed rare issue with HudDamageMarkers not completely disappearing
- Fixed missing “Animator Location” property on wieldable tool (inspector bug)
- Improved thumbnail setting checks in save game manager
- Fixed bug in BinarySerializer/Deserializer with arrays of serializables
- Added InputManagerCheck to prevent StandaloneInputModule errors if project isn’t set up correctly
- Fixed AlwaysAnimate only being set on main weapon animator instead of multiple
Additions
- Added a new aim target transform behaviour that can be triggered via script or event to force player to aim at the object
- Added versioning to save system (prevent loading incompatible save version files)
Changes
- Modified the AudioTimeScalePitchBend to also support pausing and unpausing
- Reordered inventory events to be more intuitive (add object, assign slot, select)
- Added firearm null checks to shooter modules to allow them to be used in isolation
- Enabled saving scriptable objects registered with the save manager automatically
- Can use for game flow managers or persistent data
- Added “Interrupt” property to wieldable tool animator trigger action to interrupt when complete
Bug Fixes
- Fixed multi-scene save demo spawning balls in the wrong location / scene offset
- Fixed sliding door initialising in the wrong position on load from save when open
- Fixed save bugs with locked and pickable doors and objects
- Modified the AimController to only validate when not in play mode due to editor errors
- Reset the character movent input when disabled on the character component to remove input “momentum”
- Prevented serialized scene and object setup checks from still firing when save system disabled
- Fixed broken serialization keys on padlocked door prefab instance in doors demo (needed deleting and re-placing)
- Fixed NeoSceneManager not adjusting indices based on disabled scenes in build settings
- Changed broken wieldable tool hold vs sequenced action end times to be more intuitive
- Fixed heal tool not waiting for end of other actions to perform end heal
- Fixed scroll wheel prev/next quickslot triggering selection even when current is blocking
- Fixed wieldable tools without a deselect animation not waiting to unblock before deselecting
- Fixed heal tool action returning not valid if set to heal wielder since no health manager pre-assigned
Additions
- Added a HudHealthMeter for player health bar instead of counter
Changes
- Back-ported the refactored save system from the 1.2 upgrade dev repo
- Much more robust handling of changing object hierarchies with NeoSerializedGameObjects attached
- Can now use standard unity Transfor.SetParent() methods to re-parent NSGOs
- Added the concept of “local scene” to multi-scene save system so prefabs can be instantiated in the correct scene (eg weapon drops instantiating in the correct level chunk)
- Replaced the InstantiatePrefab methods on the NSGO and serialized scene with simplified static factory methods
- Added a Unity 6 version of the Cinemachine extension package
- Made check damage methods in health manager and shield manager protected virtual
- Made methods in SharedPoolAmmo protected virtual
Bug Fixes
- Fixed error on picking up dropped weapon after save (invalid quaternion in WeaponAimAmplifier)
- Fixed save bugs with locked doors / objects
- Modified inventory item script to call OnZeroQuantity when not inside an inventory
- Added inventory null checks to wieldable etc OnZeroQuantity
- Fixed issue with empty inventory object not destroying when outside inventory (eg pickup append)
- Fixed motion graph editor error with deleted graph
- Fixed keybindings not auto-saving on switch to default
- Fixed issue preventing firearms getting correct pose handler if requested before Awake called
- Obstacle handlers weren’t correctly ending obstructed pose if weapon disabled while obstructed
- Deferred sprint handler grabbing wielder to start instead of awake to prevent execution order error
- Better pose handler reset in OnDisable
- Fixed index out of range error with key rebinding UI if last FpsInputButton rebinding disabled
- Fixed pose handler creating duplicate poses on load from save (since motion graph would get in there first)
- Added null checks to character arms
- Added timer reset to bullet casings
- Fixed error with binary deserializing arrays of serializable classes/structs
- Fixed firearm wizard placing camera anchor at wrong point in hierarchy for weapons with an animated view-model root
- Fixed locked door tooltip not setting to correct string if starting unlocked
- SetAnimatorInt motion graph behaviour was calling float methods by accident
- Corrected scale issue on parkour scene boost pads due to new asset submission rules for prefabs
Additions
- Added keyframe animated and procedural obstacle handlers for wieldables
- AnimatedWieldableObstacleHandler and ProceduralWieldableObstacleHandler
- Applies to all wieldables instead of previous firearm only version
- Added a new worldspace camera constraints that acts similar to the cutscene camera but with blend in/out
- Works with the FirstPersonCameraTransformConstraints behaviour for full body characters
Changes
- Added randomised spread setting for StandardShellEject firearm empty shell ejector
- Changed the timing setup on ParticleToRigidbodyShellEject to be more intuitive
- Added weapon lower delay type to firearms, and WeaponLowered event for FirearmAnimEventsHandler
- Added an option to block aiming while sprinting on firearm sprint handlers
- Increased grenade damage for grenade launchers
- Moved respawning with items into a public method on FpsSoloGameMinimal
- Exposed attachmentSystem property from socket
- Modified StandardModularFirearmAttachment to track required inventory item and detach from socket if item is dropped
- Changed the inspector properties for the FirstPersonCameraTransformConstraints based on intended usage
- Removed the position vs rotation settings since only position is desired with default target
- Renamed damping to position damping since that’s where it applies
Bug Fixes
- Prevented frag grenade lever from hovering in the air when thrown
- Fixed reload blocking aiming, even with the “aim while reloading” setting true
- Fixed issue with rigidbody interpolation on NeoCharacterController when teleporting long distances
- Improved domain reloading on NeoSceneManager
- Fixed incorrect gamepad analog sensitivity limits in settings
- Melee and thrown weapons weren’t correctly updating poses
Additions
- Added a DotProductObjectTracker targeting system to track the object most directly in front of the projectile
Changes
- Exposed transform matcher weight property for realtime modifications
- Added OnUsed unity event to PickupTriggerZone
- Added option to only dry fire once when empty to ModularFirearm
- Added animation trigger to SemiAutoTrigger
- Added ability to block aiming when sprinting to input handler
- Modified damage trigger zones to allow changing damage type and value in inherited scripts
- Removed “required” condition on popup UI for customisable game mode
- Added air-time test for going grounded to airborne when sliding (demo facility motion graph)
- Modified firearm to include reload in isBlocking
Bug Fixes
- Added better firearm null checking in aimer modules for attachment system
- Fixed CharacterTriggerZone and CharacterTriggerZonePersistant not firing exit event when deactivated with characters inside
- Fixed issue with default inputs appearing blank when using NEOFPS_LOAD_ON_DEMAND
- Fixed missing help URL on InputCarryObject, LockSelectionOnDeath, BreathingEffect
- Fixed missing inspector properties in chambered reloader
- Prevented audio effects system forcing audio listener on cinemachine character
- Prevented animated wieldable flashlight interrupting reload, etc
- Fixed Falling motion graph state cancelling out horizontal external forces when no input
- (d) Fixed incorrect gamepad analog sensitivity limits in settings
- (d) Fixed EventDamageHandler not passing damage source to health manager
Additions
- New DisableDamageBehaviour for motion graph to make character invincible during specific motions
- Added an example instant heal consumable item prefab
- Added a new system for playing a one-shot inspection animation when picking up a weapon for the first time
- Created a version of the wieldable flashlight that has toggle on/off animations
- Added a PostProcessVolumeFix behaviour, similar to the layer fix that applies the volume behaviour at runtime
Changes
- Trimmed C# using directives in som scripts
- Modified CameraShakeBehaviour and CameraShakeOneShotBehaviour to reference shake handler base class instead of camera specific
- Added extra bomb-proofing for health manager isAlive
- Added picked up / dropped events to carryables
- Added ability to assign damage handlers to take damage for the 3 impact types (fall/foot, body, head) instead of default health manager
- Removed settings for inheriting platform velocity from NeoCharacterController as only one version makes sense with motion controller
- Added extra moving platform information to motion controller debugger
- Reorganised properties in RootMotionState to make them more intuitive
- Added IMonoBehaviour interface inheritance to moving platforms
- Extended pickable doors and locks to allow multiple pick IDs
- Added conditional compilation for Unity 6 and above due to API changes
- Switched FirstPersonCameraTransformConstraints to fall back on own transform instead of throwing error when none set in inspector
- Added method to change character’s full standing height to MotionController
- Changed manual save text field popup to add date/time to save name and default to confirm button (defaulting to edit text was failing full controller support on steam)
- Switch demo post processing volumes to use new PostProcessVolumeFix behaviour to prevent missing script errors breaking prefabs with SRPs
- Modified weapon inspection to prevent it from interrupting actions like reloading, and to add better save game support
- Added randomisation settings to ProceduralSprintAnimationHandler base class to make weapon bob when sprinting look less robotic
Bug Fixes
- Conditional compilation to prevent console warning due to change in prefab api
- Added missing docs links on behaviours
- Removed test inputs from shockwave and glow effects
- Fixed console error when placing NeoFpsTimeScale in scene
- Fixed issue where unlocking inventory selection from nothing when previous selection was backup item (hands)
- Made sure recoil springs are properly reset on switching weapons
- Fixed error when loading from save with a melee weapon selected
- Fixed input error with melee weapon selected on save
- Prevented resetting weapon inspect toggle when input handler goes out of focus as it was messing with the attachments UI (with a higher priority input context)
- Fixed attachment offsets not taking scale into account
- Fixed issue with internal scenes list breaking intermittently when switching between editor and play mode with SceneSaveInfo showing in inspector
- Prevented depenetration using ignored rigidbodies in NeoCharacterController (could ride some carryables)
- Fixed pooled missiles not playing audio when recycled if visible distance set to 0
Additions
- Added dual wielding
- InputDualWield is used to send input to 2 weapons (firearm, wieldable tool, melee or thrown weapon)
- Each firearm should be a child of the weapon root with the wieldable and input handler components
- An example swappable weapon prefab has been added for dual machines guns
- An example with a single machine gun and a secondary grapple tool has been added
- For more information, check the weapons section of the docs
- You can now create firearms with a secondary fire mode
- Secondary can use any of the weapon types (firearm, wieldable tool, melee or thrown weapon)
- The same view model is used in both cases instead of a separate weapon
- Components have been tweaked to allow a non-child view model and additive transform system
- When either the primary or secondary is blocked (eg reloading) it will block the other
- Example swappable weapon prefabs that demonstrate use
- Assault rifle with grenade launcher secondary
- Assault rifle with blink tool secondary
- Assault rifle with guided bullets and a secondary that tags targets
- CompoundCrosshairDriver tracks the worst accuracy of all child weapons for proper dual wield behaviour
- Added a new audio effects system
- FpsCharacterAudioEffects sits on the player character and manages the audio effects
- AudioEffectsPreset is an asset that details a specific audio effect
- Blend between settings for low-pass, high-pass, reverb and distortion
- Added presets for underwater and injured (not currently used)
- Added new sound effects
- Water (large splash, swim stroke, exit water, ambience)
- New motion graph elements
- AnimCurveDirectionalDash state dashes in a specific direction (vector parameter)
- VectorType condition checks for specific vectors (empty, unit, wall, floor)
- SetAudioEffectStrength behaviour is used to apply audio effects while in a state / sub-graph
- SwimStrokeAudio behaviour plays audio files while swimming
- New “ability” button input handlers for melee and wieldable tools
- Added a KinematicHingeDoubleDoor for interacting with double doors as one
- Example fly-cam character (minimal setup with custom motion graph)
Changes
- Updated the input system extension with new handlers for dual wield, primary/secondary and ability based weapons
- Added docs links to all input system input handlers
- Modified carry system to add moving object backwards and forwards using the mouse scroll wheel
- Carryables can now specify a default orientation offset
- Added trigger query options to filtered casts
- Tweaked doors to use character transform to decide open direction (for AI)
- Moved AdvancedParticleMuzzleEffect initialisation into public method to allow calling from outside
- Added “Bypass Damage Handler” setting to InstantDamageZone to apply direct to health manager
- Exposed item identifier property for InteractivePickup and InventoryItemPickup
- Modified parkour motion graph to add an upwards dash for vertical wall runs
- Exposed wall angle getter for INeoCharacterController
- Added water sounds to swimming and demo facility motion graphs
- Added a “Disable Neo Object Browsers” setting to the unity settings page in the hub
- Disables the NeoFPS hierarchy and project prefab browsers and uses Unity default instead (for low spec PCs)
- Exposed onSelect and onDeselect events on FpsInventoryWieldableSwappable
- Double clicking an empty area in the motion graph now goes to the parent sub-graph
- NeoFpsTimeScale now has onPauseTime and onResumeTime C# events
- PooledObject tweaks
- Can now select what to do when the pool is empty (grow, recycle oldest, return null)
- Added a version of the ReturnToPool() method with a delay parameter
- Added a max distance property to projectiles
- Animator parameter key attributes no longer show an error if no animator is found (eg attachments)
- Object / component in hierarchy no longer forces null for values outside the hierarchy
- Highlights in orange instead
- Prevents excessive errors in attachments and primary/secondary firearm inspectors
- Firearm inspector improvements
- Less memory allocations
- Can now specify an animator controller from quick setup if the view model is not a child object
- Prevents listing / checking modules that are in another firearm’s hierarchy (eg primary/secondary firearms)
- Trimmed some excess using directives
Bug Fixes
- Prevent CharacterInteractionHandler from working when disabled
- Fixed carry system not grabbing health manager and therefore not dropping on damage
- Fixed HUD damage markers not showing for damage without a source transform
- Fixed unneeded ExecuteAlways on wieldable tools causing error when inspected
- Inventories were ignoring “auto switch slot” runtime gameplay setting
- Prototype pooled audio source for 2D/UI now bypasses reverb and effects
- Ladded demo motion graph was using the wrong ladder parameters for the climbing audio
- Extra bomb-proofing in SurfaceFootstepAudioSystem
- Fixed AnimatorTriggerToolAction for wieldable tools not resetting correctly if interrupted
- Extra null checks for wieldable tool HealToolAction
- Removed invalid using directive from ModularFirearmEditor
Additions
- Completely reworked the hand matching system for full body FPS characters
- FirstPersonCharacterArms component on body now needs its own HandBoneOffsets asset, and you can edit hand alignment in prefab view
- New NeoMainMenuSceneSwitcher is a scene switcher variant that goes to the main menu listed in the neofps scene manager
- Added SubSceneOperation behaviour which can be used with events (eg interactive object) to trigger sub-scene saves / loads
- Added new ThrownProjectileShooter which allows firing hand grenades or similar rigidbody projectiles from firearms
Changes
- Added pooling support to health and shield pickups
- Added caching of pooled object to pickups
- Improved inspector value clamping for health and magazine count
- Added main menu scene setting to neofps scene manager
- Added OnUsedWhenLocked event to locked interactive objects and locked doors
- Added OnOpen, OnClosed, and OnTryOpenLocked events to doors
- Made SetHealth method public in health manager
- Added animator controller and demo prefabs for prototype weapon
- Added busy property to BaseWieldableItem, and changed deselection to wait for busy to complete before starting animation and timer
- Added duration to AnimatorTriggerToolAction and set tool to busy while playing
- Switched NeoFpsInputManager inspector to use a new list style for buttons that doesn’t destroy editor performance while open
- Added options to replace or combine loadout with starting items in FpsSoloGameMinimal
- Reworded inspector warning in game settings editor base class
- Added system to prevent playing the same surface audio multiple times in one frame (eg shotgun)
- Added setting to auto resume aim on obstacle handler
- Added rigidbody movement support to BaseBallisticProjectile, and moved casting into a virtual method
- Moved Demo Facility pre-spawn UI tab list down next to spawn button to make it more obvious
- Added ability to change holdBreathDuration on DrowningMotionGraphWatcher at runtime
- Changed initial controller check on BaseCharacter to use controller changed method. Same end result, but more control for inherited classes
- Changed max speed to max step rate for motion controller / footstep tracking
- Added ability to interrupt and reverse direction on waypoints moving platform
- Added GoToStart, GoToEnd and GoToOppositeEnd methods to waypoints moving platform
- Added optional root motion speed multiplier parameters to the RootMotionState
- New input system package that uses correct body lean base class (lean wasn’t working in full body)
- Better interpolation on optics attachments
- Boosted speed and improved responsiveness, plus more jetpack fuel in jetpacks and missiles demo
- Made it easier to mantle out of water in swimming demo
- Added new replacement holo sight glass for basic demo assault rifle and replaced in prefab (makes switching render pipeline easier)
- Added new HasKey() method and virtual used success vs locked methods to LockedInteractiveObject
Bug Fixes
- Fixed broken reload on assault rifle polymer magazine attachment
- Fixed surface audio data editor not correctly initialising array length when first created
- Added extra null checks to ModularFirearmAmmoPickup, ProceduralSprintAnimationHandler and BodyTiltBehaviour
- Fixed old link on hub front page (trello -> codecks)
- Fixed NeoSerializedGameObject status info not detecting if prefab is registered in a collection
- Added missing docs links on sub-scene behaviours
- Improved door open while closing (prevent opening away from player)
- Forced removal of shadows from laser pointer line renderer
- Fixed broken body lean (splitting into base class for full body had broken the logic)
- Fixed bug where carry system wouldn’t notice if the carried object was destroyed outside its control
- Removed duplicate NSGOs on platforms in moving platforms demo
- Modified ScenePoolHandler to add better error checks and resizing if no pooled objects found
- Various save system fixes
- Swappable inventory wasn’t loading selection properly when non default
- Fixed pooled objects not properly saving due to timing of getting NSGO on start
- Fixed target tracking projectile losing target on load
- Fixed player tracking missiles not resetting target on load from save
- Fixed guided projectile tracking when loading from save mid flight
- Added NeoSerializedGameObject components to demo missile prefabs
- Carry system wasn’t saving carried object state properly (broke gravity setting for rigidbody on load)
- Extra bomb proofing and changed evaluation order for OriginShift to prevent resetting position after load
- Fixed firearm attachments not properly loading if firearm object has never been activated before save
- Fixed aim offsets with save games (new attachments setup wasn’t loading correctly for the selected weapon)
- Added save games support to hitscan bullet trails
- Fixed issue with BinaryDeserializer incorrectly reading saved collections of vectors to lists
- Fixed weapon procedural animations on loading from save (AdditiveJiggle and WeaponAimAmplifier)
- Set NSGOs in character aim hierarchy to save local rotations
- Prevented pose handlers from zeroing out weapon position on load from save. Was moving all turrets in the jetpacks demo to origin
Additions
- New GenericDamageTriggerZone applies damage to any overlapping collider with an IDamageHandler attached
Changes
- Switched some interfaces that expose MonoBehaviour methods to inherit from IMonoBehaviour instead
- Added “Import Post Processing” button to render pipelines setup to speed up project setup
- Modified StandardCarrySystem to add an option to allow carrying all rigidbodies instead of just carryables
- Added new input system extension v9 package (fixes below) and cleaned up old packages
- Expanded firearm drops/pickups to add custom payload settings (starting ammo count and attachments)
- Added properties for additional (optional) items for pickups (these don’t affect when the pickup is destroyed / returned to pool)
- Added CharacterEventKickTrigger to moddable demo facility weapons to improve their physicality on landing and impacts
- Reverted “damageSourceTransform” to return weapon transform not character (same as in 1.1.24)
- Added extension methods to IDamageSource for GetSourceCharacter() and GetOriginalSourceTransform()
- Changed headTransformHandler and bodyTransformHandler on ICharacter to use IAdditiveTransformHandler instead of concrete type
- Removed redundant checks from input handlers to improve performance
- Moved procedural input behind a scripting define since it adds overhead for very limited uses
- Optimised deferred pool growth
Bug Fixes
- Added damage handler enabled checks to damage dealers where missing
- Implemented correct scale handling on water zones
- Fixed incremental reloader not correctly unlocking wieldable (eg allowing melee) after reload when using events instead of fixed duration
- Changed conditions in swimming motion graph to prevent cyclic dependency when swimming out of the side of a water zone
- Added null check to NeoFpsEditorPrefs to catch possible issues with hub open during a domain reload
- Fixed SpreadHitscanShooter not calling hit effect correctly
- Updated NeoFPS input settings to add in URP debug input axes (bypasses URP not checking axes exist and throwing errors)
- Fixed sample UI menus handling escape key multiple times in a frame in input system extension
A version “b” hotfix update was released on the 22nd May. Hotfix changes prefixed with (b) below
Additions
- Modular firearm attachment system
- Add sockets to your weapons and specify attachments for them
- Sockets can be nested inside attachments (eg muzzle socket on barrel attachment)
- Demo attachments can optionally require an inventory item to use
- Demo attachment UI that ties into firearm inspect system
- Can randomise attachments for pickups
- Dropping a weapon will store its attachments to recreate when picked up
- Alternate demo facility weapons provided with attachments set up
- Pick up and carry physics objects
- RigidbodyCarrySystem can pick up any dynamic rigidbody under the mass limit
- StandardCarrySystem requires objects to have a Carryable component to be picked up
- Manipulate, drop and throw carried objects
- The Carryable component has events for picked up and dropped (eg fold up / deploy a turret)
- HUD popup to show carry state / prompts
- FirstPersonCameraTracker behaviour can be added to any object for inspector events
- OrientGravityToolModule to change gravity direction based on the surface you’re aiming at
- GravityModifier behaviour can be used with unity events (eg trigger zone or interactive object)
- Added basic prototype weapon model with simple animations
- Swap out the model with your own for simple placeholder animations before adding custom ones
- New demo first person body package set up for MoCap Online’s Rifle BASIC pack (required)
Changes
- New v8 input system extension package adds carry system input handler
- Modified inventory HUD to add “show on start” setting
- Added momentum conservation and separate deceleration settings for motion graph falling state
- Renamed kinematic door audio properties and added door movement sound
- Added layer mask option to spawners
- Added SetHeathSilent() and SetNormalisedHealthSilent() to health manager to bypass events
- Added max range to hit FX
- Expanded ModularFirearmModeSwitcher
- Added “Register On Start” setting (defaults to yes to match previous behaviour)
- Added optional animation trigger on switch
- Added optional animation int parameter to track current mode index in animator
- Added new filtered casts to PhysicsExtensions (ignores specific rigidbodies)
- NeoCharacterController can now filter collisions and depenetration for rigidbodies
- Prevents colliding with carried object for example
- Modified weapon inspect component to use wieldable animation handler instead of animator directly
- Added “GetModifiedValue” virtual functions to various weapon elements to make extending easier:
- damage for ammo effects
- spread for shooters
- speed multiplier for reloaders
- damage for melee weapons and thrown weapon projectiles
- throw distance for thrown weapons
- New IAimable interface added to firearms to make aim offsets more reliable
- Offsets are relative to gun bone instead of root so animations won’t affect them
- Added setting to ModularFirearm to transfer magazine count when swapping reloaders
- Excess will be returned to the pool if swapping to a smaller magazine
- Reworked firearm drops to use new payload system
- Used to store attachments info
- Can be expanded to store more data and perform setup on firearm when activated
- Added “onPickedUp” event to InteractivePickup
- Added indent to multi-input widgets and UI style assets (requires setting up in inspector)
- LaserPointerAimerSwitch completely reworked for better attachments handling
- Now grabs aimer when switched on, and tracks aimer changes
- (b) Added ignore option to firearm module activation mode
- Changes connect timing and disconnect behaviour for objects that are activated/deactivated externally
- (b) Tweaked recoil and laser aim interpolation on demo facility moddable weapons
Bug Fixes
- Fixed missing origin shift on hitscan bullet trails
- Fixed horizontal to vertical FoV setting for graphics settings in hub
- Pooled objects now reset scale to 1,1,1 when grabbed if no scale specified
- Fixed Origin Shift demo name
- (b) Fixed firearm modules in socket filled/empty objects not reconnecting when toggled multiple times
- (b) Prevented delayed firearm eject from causing errors if firearm is destroyed before eject
- (b) Prevented intermittent error in shooter modules if gunshot destroys gun (eg shooting an explosive barrel, therefore killing self and dropping gun)
Additions
- New instant use inventory item consumables such as heals (modular actions)
- Heal
- Recharge shields
- Play audio
- Unity event
- Consume inventory item
- Quick melee, throw, shoot and tool wieldables
- Switch from current weapon, perform action and then switch back
- Disable equipped weapon functionality and then perform action before re-enabling
- Quick-action wieldable can signal animator on equipped weapon (eg to lower left hand)
- New InputFirearmWithMelee (and InputSystemFirearmWithMelee) component allows adding a melee weapon behaviour to a firearm for melee attacks (eg pistol whip)
- New CriticalHitAudioPlayer to add some extra feedback (eg CoD)
Changes
- Disabled button filtering for gamepad profiles to allow things like reload and interact on one
- Added position marker option for virtual analog sticks
- New v7 input system extension package to match new input changes
- Added onCategoryFull event to swappable inventory
- Added item ID conditions to HUD ammo counters to allow unique counters per gun
- InputInventory (and InputSystemInventory) now allow you to specify quick slot inputs to allow better quick use items
- Eg Keys 1-4 for weapons, and “Quick Melee” button to select the quick-melee weapon slot
- HudInventoryStandardPC now lets you specify which quick slots are displayed
- Exposed onAimUp and onAimDown C# events on BaseAimerBehaviour
Bug Fixes
- Laser pointer flare now set to correct layer on creation
- Prevented dropping backup item if it has a drop item set
- Prevented instant weapon switch and deselect when swapping weapons
- Fixed incorrect clamp values for mouse sensitivity setting
- Changed demo hit FX particles transparency type to prevent visible box
- Unity settings page in hub now correctly refreshes notification state when manually applying settings
- Fixed teleporters breaking if stepping outside zone after triggering
- Fixed broken aim offset calculations in firearm wizard
- Fixed error when applying offsets to HeadMoveAimer in firearm wizard
- Prevented manual save still occuring on cancel
- Fixed error when rebinding keys at the end of the list when rebinding is disabled on multiple above
- Improved error handling during save (now correctly aborts instead of leaving save system waiting for write)
- Prevented CheckpointTrigger from triggering a save, etc immediately on loading
- Fixed incorrect Follow Curve behaviour for projectiles
Additions
- Added new touch screen controls system
- Custom touch screen buttons, virtual analog (movement) and virtual track ball (aim)
- Replacement HUD and menu prefab with full demo setup
- Unity input manager and Unity input system versions
Changes
- Added virtual input systems to both input managers (emulates input buttons / actions)
- Renamed “Floating Origin” feature to “Origin Shift” due to trademark issue
- Added new on-consume options to inventory item pickups (“DisableOnPartial”, “RespawnOnPartial”, “Infinite”)
- Improved error log messages for NeoSceneManager and SurfaceManager
- Added new extended gizmo options for drawing 2D arrows
- FirstPersonCharacterArms now disables arms when selecting nothing or a weapon without kinematics if not part of a full body
- Added new “RespawnWithItems” option to FpsSoloGameMinimal which respawns you with your inventory when you died
- Added new “Custom” save path option to SaveGameManager, along with “Enable Save Games” toggle that can disable the whole system
- Can now specify a save name for autosaves in the CheckpointTrigger behaviour (uses scene display name if blank)
- Switched NeoFpsTimeScale from static class to Monobehaviour to allow saving value with save system
- Added impact clip playback to empty shotgun shells
- Added dynamic update system for motion graph behaviours and states (eg better smoothing for animator parameters)
- Modified inventories to check for items under item root on start
- Can now specify which object to disable in HudHider component
- Added new input toggles to character base class (allowMoveInput, allowLookInput, allowWeaponInput)
- Modified input handlers to check against this
Bug Fixes
- Modified input handlers to block input if context gains focus this frame (prevents shooting if context switch is due to mouse click for example)
- Prevented inventories from modifying prefab item quantity on appending to an existing inventory item using AddItemFromPrefab
- Fixed broked arm IK and position matching if spawning with no weapons and then picking one up
- Fixed real time between fixed updates increasing with NeoFpsTimeScale change
- Replaced broken ammo crate in quickswitch inventory demo
- Fixed load-on-demand and json bugs for FpsGamepadSettings when using input system
- Startup checks used wrong conditional compilation version for Unity API change causing error on 2021.1
Additions
- New demo scenes for camera shake and floating origin
- ContactDamageSend and InstantDamageZone components for damaging player via collider and trigger collisions
- Added CameraShakeOneShot behaviour for placing on scene objects and triggering via API or events
- New OverlaySceneCamera for rendering scene in an area over the first person view
- Used in floating origin, multi-scene save and first person body demos
Changes
- Added scene camera to multi-scene saves demo with text log for scene load events
- Renamed “Level Select” to “Feature Demos” in main menu and moved to top of single player list
- Can now set quickswitch max inventory size down to 1
- Can now set swappable inventory per-category sizes down to 0
- Added warning to floating origin particle systems when applied to local space particle systems
- Added error to inventories when trying to add wrong wieldable type (swappable vs non-swappable)
- New onSceneLoadRequested C# event added to NeoSceneManager
- Added OnEmptyChanged unity and C# event to incremental reloader
- Modified SurfaceManager to make key functions virtual and add a basic hit FX method
- Modified FirearmAnimEventsHandler to make functions virtual and expose firearm property
Bug Fixes
- Fixed error when dropping wieldable tool
- Various floating origin fixes
- Trail renderer glitches solved
- Fixed moving platform interpolation
- Removed floating origin from bullet hit particles systems when not needed
- Fixed broken projectiles
- Fixed crosshair pop on origin shift when physics auto-sync transforms disabled
- Fixed prototype player controller not attaching
- Fixed broken prefab override in moving platforms demo
- Added jump transition to first person body animators to prevent lag on raising feet
Additions
- Scriptable render pipeline support
- Shader graph versions of all NeoFPS shaders
- Modified demo materials for SRPs as part of extension packages
- Example materials and prefabs
- New MonoBehaviours for SRP holographic sights and render texture scopes
- Installer built into Unity Settings page of NeoFPS Hub
- Floating origin system for large scale worlds
- Repositions the player character and the world once they pass a certain threshold
- Works with all the following:
- Standard transform
- World space particle systems
- Trail renderers
- Projectiles
- Moving platforms
- NeoCharacterControllers
- New PickableLockedInteractiveObject can be used for interactive items like locked containers
- InventorySelectionAnimator sets an animator parameter based on currently selected quick-slot
Changes
- Streamlined package checks on install for better SRP handling
- Modified demo materials to switch legacy shaders for modern to aid upgrading to SRPs
- Added auto-switch setting to inventories (none, always or starting order)
- Added “Fire Event On Start” setting to firearm mode switcher
Bug Fixes
- Fixed melee weapon using its own animator instead of the abstracct animation handler (prenvented full character animation)
- Blocked wizards from creating prefabs during playmode due to broken domain reload
- Added stricter null and initialisation checks for pose handler on thrown weapons
- Fixed out of bounds error when rebinding inputs at bottom of the list in menu when entries are disabled
Additions
- Multi-scene save system to allow splitting levels into multiple scenes
- SubSceneManager provides and API for loading/unloading sub-scenes
- SubSceneLoadTrigger and SubSceneUnloadTrigger provide trigger zones for loading/unloading subscenes
- On unloading a sub-scene, the save system will save its contents to a buffer to recreate later
- Loading a sub-scene checks for existing save data to recreate the contents
- Sub-scene save data is included in quick, manual and auto saves
- Multi-Scene Save demo scene with 3 rooms, each using separate sub-scenes
- New AdditiveSceneSaveInfo component to track sub-scene contents and data
- InventoryInteractionHandler controls weapon selection when interacting with objects
- New weapon inspect system that sets animator parameters and blocks weapon use while inspecting
Changes
- Set animator parameter motion graph behaviours now have options to use motion graph parameter values
- Added shell collision audio clips to ParticleSystemShellEject firearm module
- Automated animator and skinned mesh culling options for first person body
- Automated animator culling options for weapons
- Updated Kubold demo package with animator controller fix
- Updated input system package with weapon inspect trigger
Bug Fixes
- Fixed sprint to crouch slide blend when using hold to sprint (full body character animator)
- Wieldable tool wasn’t correctly setting crosshair on selection
- Added 1 frame delay to info popup in FP body demo to prevent out of order issues
- Waypoint moving platform was overwriting save data on start
Additions
- Added stub animations and override controller for first person body
- New FpsInventoryMultiDrop can be used to drop multiple items at once
- Added new backpack drop to demo characters on death
- Added one-shot local camera shakes + motion graph behaviour to trigger them
- ContinuousTrigger adds support for weapons like beams or flamers
- New FirstPersonBodyRotationTracker sends steering direction changes to animator controller
- New MapCaptureCamera helper to capture top down views of a scene
- New enemy health bar and world space hit damage counters (example in firing range demo)
- New pre-spawn UI popup system and game modes
- Spawn point selection
- Character selection
- Loadout selection
- Loadout builder (pick individual weapons)
- Created new game mode for the Demo Facility using spawn point selection and loadout builder
- Added pooled object and save game prefab collection assets that can be shared between scenes
Changes
- Pooling system now allocates pools over time for new items requested after level load
- Replaced mouse smoothing algorithm with proper damping
- Removed unused head recoil handler from BetterSpringRecoilHandler
- Sample UI multi-select widgets can now be set to looping
- Added unityCamera property to FirstPersonCameraBase class (for cinemachine)
- Switched to new DamageEvents static events class instead of hit handler on character
- Modified crosshair to use new events
- Added healthManager property to IDamageHandler
- Improved world space HUD markers system for better flexibility
- Allowed resuming trigger press after reload, etc
- Wrapped all input manager code in #if ENABLE_LEGACY_INPUT_MANAGER
- Tweaked NeoCharacterController depenetration algorithm to prioritise ground
- Disabled old PhysX sphere/capsule cast workaround in NeoCharacterController that’s no longer required (huge speed boost)
- Reduced memory allocations (baseline is now just an intermittent gamepad connectivity check with no alternative)
- Added “Mark All As Up To Date” option to unity settings page in the hub
- Improved finger matching in FirstPersonCharacterArms
- Removed duplicate heading behaviours and constraints from FP body motion graph
- Added prefab recognition to ObjectInHierarchy editor (better prefab stage handling)
- Added warning to any components that change an object’s layer on start
- Split singleplayer game mode into base class
- Added option to popups to prevent back button / escape / clicking off
- Added progress events to NeoSceneManager and demo LoadingScreen class
- Separate out onUsed event on interactive objects to C# event + unity event to allow character parameter
- Added DropAllWieldables method to inventories
- Extended LockSelectionOnDeath to add dropping items
- Added error to RootMotion motion graph state if no body animator found
- Updated Cinemachine and Input System extension packages
- Added damping to AnimatorVelocityBehaviour
- Added highlighted colour for selected connections in the motion graph editor
- Added spawn point add/remove events to SpawnManager
Bug Fixes
- Replaced drop objects on first person body firearms with correct pickups
- Fixed problem with wielder change not correctly activating IK
- Forced pool transform positions to world origin
- Prevented repeat event calls on character controller change
- Added in-game check to first person body game mode when popup disabled
- Added initialisation checks to inventories to prevent adding things before initialised
- Fixed wrong additive transform handler and object tags in character wizard
- Prevented auto-switch weapons for disabled inventories
- Fixed incorrect FoV readout in in-game settings
- FpsSoloGameMinimal now correctly resets inGame property after exiting level
- Changed game settings json save path on mac and uwp (access denied)
- Fixed reload trigger lock not resetting on weapon switch
- Removed crouch jump popping from character controller gizmo in motion debugger view
- Prevent “RequiredString” property from deselecting when validity check result changes
- Fixed lock/unlock inventory selection multiple times on consecutive frames causing failure to unlock
- Added vertical velocity reset to mantle state to prevent momentum causing it to fail
- Set correct stencil indices on scope rings
- Prevented non-prefabs showing “register with save manager” in NSGO inspector
- Fixed character arm IK not disabling when switching to a weapon without the required component
- Prevented error in PackageDependencyChecker due to invalid version code
- Fixed game mode not applying loadout on respawn
- Fixed broken using directive error due to Unity feature leaving experimental
- Switched AssetDatabase.Find calls to use fully qualified type name to prevent fail if duplicate names exist
- Improved prefab ID check on duplicated variant prefabs
- Set correct ammo count on 40mm grenade x 2 pickup
- Set correct audio mixers and clips on pickup prefabs
- Fixed time scale 0 causing “Not A Number” errors on NeoCharacterController and AimController
- Fixed incorrect visual state on dead cameras and turrets after loading from save
- Added pose handler init checks to prevent save system setting pose before initialised
Additions
- AnimatedFirearmObstacleHandler and ProceduralFirearmObstacleHandler classes for moving weapon if obstructed
- New ProceduralSpineLean replaces BodyLean additive effect for full body characters
Changes
- Switched wieldable pose system to use a referenced priority queue for better stacking of poses
- Added intro popup to FirstPersonBody demo with third party asset info
- Improved error message for invalid package names in package dependency checker
- Added root motion position and rotation multipliers and damping to motion graph
- Split BodyLean into base class for sharing
- Added lean settings to ProceduralSpineAimMatcher
- Improved character and fp camera handling of disabling/enabling player character
- Modified WieldableItemKinematics to work on child objects (to allow switching between multiple)
- Updated input system extension package for parity with current input handlers
Bug Fixes
- Fixed error on quantity = 0 for inventory wieldables
- Fixed jump state using physics gravity instead of character gravity
- Fixed issue with guns and hand IK desync on scroll wheel
- Switched foot IK rotation blending to start on character up not world up
- Replaced platform rotation algorithm in NeoCharacterController for better handling of slow rotations
- Fixed input bindings failing to recognise changes to toggle v hold
- Fixed firearm getting stuck in aim if switching from hold to toggle while ADS
Additions
- New first person body features for full character body and separate arms vs weapon
- FirstPersonBody component handles foot IK, aim direction animations and
- FirstPersonBodyRootMotion captures root motion from Animator and passes to the NeoFPS motion controller
- FirstPersonCharacterAnimationProfile allows you to specify (and name) which animations are exposed for overriding
- FirstPersonCharacterArms handles IK matching character hands and fingers to weapon
- HandBoneOffsets scriptable object stores character/weapon rotation offsets for reuse and runtime editing
- WieldableItemKinematics works with the character arms to specify handle weapon switching
- WieldableItemBodyAnimOverrides applies animation overrides to the character on switching weapons
- ProceduralSpineAimMatcher uses additive rotation to bend the spine when aiming up/down or left/right
- FirstPersonCameraTransformConstraints constraints camera position to one or more objects (eg animated head bone)
- The firearm CameraConstraintsAimer aimer module uses camera constraints to align the camera when ADS
- New placeholder input handlers
- InputVehicle disables character controls while keeping cursor locked as basis for vehicle controls
- UiInputToggle adds an escape handler that toggles cursor lock and character controls
- HudWorldSpacePositionTracker and HudWorldSpaceTarget combine to align a HUD object with an object in the world
- New LockSelectionOnDeath component forces the character to lower their weapon (optionally drop it) on death
- New motion graph behaviours
- AlignWithVelocity aligns the character body with the movement velocity vector (eg wall running)
- ConstrainCharacterHeading aligns the character body to a vector (eg climbing ladder)
- FootIkBehaviour sets the character foot IK strength while in the state/sub-graph
- SetRootMotionStrength blends between the current state’s move vector and animated root motion
- SpineAim enables or disables the ProceduralSpineAimMatcher
- AnimatorGroundSlopeBehaviour sends ground slope and direction values to the character animator
- New motion graph conditions
- InventoryItemCondition checks if the character has an object with a certain ID in their inventory
- WieldableSelectedCondition checks if the character has the object with the specified ID selected
- New RootMotion motion graph state sends input to the character animator and moves based on root motion
- DeathAnimation component triggers an animation when the player character dies
Changes
- Modified NeoCharacterController, MotionController and AimController classes to enable first person body features
- Added root motion support to motion controller
- Added animator property to motion controller (instead of old system that set it as a motion graph parameter)
- Extended aim controller constraints to add heading constraints (for aliging body to certain movements)
- Motion controller has new properties for head bone and head root, plus character height animation parameter. If motion controller has a valid animator and “Height Anim Float”, then character height will be animation driven
- Switched all private Unity message handlers (awake, start, etc) to protected
- Added 2D sound effect pooling to audio manager
- Added custom inputs to InputCharacterMotion component (drive motion graph parameters with input buttons)
- Added “Scroll Select” setting to inventory input handlers
- Added “Show Mouse Cursor” setting to InputMenu handler
- All wieldable types have new “Animator Location” setting to specify one or more animators on weapon or character
- Wieldables that hit 0 quanitity now deselect before destroying
AddForce motion graph behaviour now had “Space” setting so you can apply in local space - AnimatorInputVector motion graph behaviour has new directional multiplier and damping settings
- Added “Slope Effect” setting to enhanced cast motion graph conditions. Adapts cast to ground slope
- Enabled opening motion graphs in the editor by double clicking the asset
- Added “Minimum Distance” settings to all impulse motion graph states. Prevents issues with extreme tick rates
- Added “ignoreTilt” parameter to NeoCharacterController teleport method in case using rotation from an object
- Added “Default” layer to interactable mask since it has to block casts
- Moved shared logic for firearm aimer modules to shared base class
- All firearm modules now support multiple animators
Added “Shell Scale” setting to StandardShellEject and ParticleToRigidbodyShellEject - Added onSwitchModes C# event to IModularFirearmModeSwitcher
- ConstrainCameraPitch and ConstrainCameraYaw motion graph behaviours have added ground slope and transform based options
- Extended HealToolAction for wieldable tools
- Has separate heal settings for different tool phases
- Handles inventory consume internally due to timings
- New “Auto Hold” settings for wieldable tools that act like the trigger is held after clicking until complete
Added “New Game” button to main menu that loads a specific scene
Bug Fixes
- Added missing help URLs to tool modules
- Fixed broken gamepad recognition
- “Empty as Backup” now works with locking selections and switching between empty slots
- Reloading immediately on switching weapons now prevents shooting until reload finishes
- FpsInventorySwappable now checks category count on awake instead of just OnValidate
- Fixed motion graph editor not updating at runtime for some people
- Prevented motion graph MovementState never hitting zero speed due to smooth damp
- Fixed automatic trigger not resuming after reload while pressed
- Switched AddInventoryItemToolAction to use correct item class
- Fixed continue and load game buttons in main menu not initialising properly
- Prevented character controller getting stuck on slightly sloped walls
Additions
- Input system extension package
- New AnimatorBoolToolAction that sets an animator parameter while the trigger is held
Changes
- Changed underlying input architecture to allow for input system extension
- Rewrote package dependency checker due to upcoming changes to Unity API
- Added “Empty As Backup” option to inventories to switch to backup item if selecting an empty slot
- IQuickSlots interface now has additional slot int parameter in onSelectionChanged event
- Added origin point matcher tool from firearms to melee, thrown weapons and wieldable tools
- Added “Quality Preset” switcher to in-game graphics settings
Bug Fixes
- Added missing help URLs to tool modules
- Fixed broken weapon pickup with multiple of the same weapon
- Submerging when swimming is now aware of surface level to prevent issues with moving water
Additions
- Cinemachine extension package
- New CinemachineFirstPersonCamera component for first person characters
- New SurfaceFootstepAudioSystem moves footstep handling to character component and exposes onStep C# event
- SurfaceFootstepAudiobehaviour motion graph behaviour interacts with new footstep system
- MatchTransformState motion graph state for syncing character motion to animated transforms
- MoveToPointState motion graph state interpolates to a fixed point in space
- BlinkToolModule adds an Arkane style blink ability in tool form
- Added SwimSubmergeState motion graph state and switched swimming graphs over for better surface height awareness
- New IMeleeHitExtension interface that can be used to extend melee weapon behaviour with new components
- New AddInventoryItemToolAction for behaviours like adding armour
- ParticleSystemPlayOnEnable utility component for easier use of pooled particle systems for hit reactions
Changes
- Added root NeoFPS assembly definition
- Added “Query Trigger Colliders” and “Layer Mask” settings to melee weapons
- Split melee weapons into base class
- Changed melee weapons to use virtual primary and secondary fires instead of attack and block
- Modified melee sprint handlers and stance manager to adapt to above change
- Added “Query Trigger Colliders” setting to explosions
- Added “Grapple Tags” setting to grapple tool
- Changed script execution orders project wide to align with Cinemachine’s fixed order
- Split FirstPersonCamera into new base class (for cinemachine extension)
- Improved capsule and arrow scene gizmos
- Added colour coding to spawn point gizmos to show when obstructed
- Improved SetLoadout method on inventories to work after initialisation
- Added static “CreateLoadout()” methods for FpsInventoryLoadout class
- Added “Min Load Time” setting to NeoSceneManager
- Better warnings for player character HUD components if a watcher isn’t found in the parent hierarchy
- Added onLanded C# event to base character
- Improved project hierarchy browser to show “Searching…” on open instead of freezing
- Added AddPositionOffset() and AddYawOffset() to NeoCharacterController
- Added Interrupt() virtual method and IsValid checks for base tool modules
- Switched modular firearm camera offset helper to use child object browser
- Created common base class for input handlers to separate input contexts from button press checks
- Set firearm aimer module “Aim Transform” settings to use child object pickers
- Limited inventory item max quantity to prevent rollover to negative at int max value
- Added scale matching to ParticleToRigibodyShellEject when matching pooled object size and velocity
- Added rigidbody support to WaterZoneMover for better interpolation matching with character movement
- Changed locks to allow multiple lock IDs (eg skeleton key + specific key)
- Added start delay and easing options to SimpleMovingPlatform and SimpleRotatingPlatform
- Added multiple objects of same type support to swappable inventory (new “Duplicate Behaviour” setting – “Allow”)
- Added “Holster Action” setting to inventories to allow holstering to nothing instead of backup item
- Split NeoFpsInputManager to base class
Bug Fixes
- Prefab browser was ignoring “None” selection
- Fixed spawn point overlap tests offset
- Prevented motion graph editor viewport from repainting without input
- Moved FpsPrototypePlayerController init to Start method to prevent out of order errors
- Fixed projectiles showing early for near hits
- Added NeoSerializedGameObject components to swimming demo water zones to prevent issues when saving
- Fixed error when locking selection in stacked inventory
- Fixed broken PS4 controller mapping on OSX
- Fixed error in stacked inventory setup section of player character wizard
- Fixed error in spread ballistic shooter setup in firearm wizard
- Switched to correct inventory key types for ArmouredDamageHandlers and HudInventoryItemTracker
- Fixed HudInventoryItemTracker failing to get inventory if character spawned but not initialised
- Fixed settings pages in hub not saving changes
- Improved stance reset on changing wieldable item selection
- Fixed MotionGraphDataOverrideAsset inspector not saving changes properly
- Body impacts now cause the camera to bounce in the correct direction
- Load and Continue single player menu buttons now initialise before selection
- Fixed broken save/load for SimpleMovingPlatform and SimpleRotatingPlatform
Additions
- Added TimedExplosive component
Changes
- Added filtering to save game thumbnails
- Added location options to FirearmTransformMatchSetter (head, upper body, aim transform)
- Added “Pose Transform” setting to firearms to prevent pose system moving root in some situations
- Applied custom object browsers to object properties on ricochet and penetrating ammo effects
- Added valid target tag setting and onTargetLost event to target tracking ammo
- Added damage source interface to sticky projectiles to allow passing of damage info
- Max distance for hitscan trails
- Enabled dynamic batching for demo materials
- Added button to highlight child objects to module lists in ModularFirearm inspector
- Added “Register With Database” button to inventory database tables
- Reworked explosion protected virtual methods to allow more flexibility
- New “Auto Reload” gameplay setting
- Wieldable tool modules no longer auto-end if there’s no continuous actions
- Added “Query Trigger Colliders” settings to shooter modules and projectiles
- Improved coverage of known gamepad names
Bug Fixes
- Character impact handler switched to impulse forces to prevent insane values being required
- Corrected quaternion order on transform matcher
- Removed depth of field from default demo post processing profile (was messing with RT scopes)
- Tweaked script execution order for HUD target lock markers
- Removed post processing from player character wizard if not installed
- Fixed missing property in guided projectile editor script
- Prevented aim contollers taking input when disabled
- Fixed broken particle system connection for muzzle effects in firearm wizard
- Reordered prototype spawnerless character hierarchy to prevent broken spring effects
- Removed depth fade from laser pointer dot as it stopped working properly
- Fixed vertical recoil with 0 wander in BetterSpringRecoilHandler
- Pickup wizard now centers trigger collider on render geo
- Fixed broken stacked inventory settings for wieldables in wizards
- Aim toggle is cancelled when rebinding keys, preventing getting stuck aiming
- Fixed verticalFoV script error in graphics settings on Android
- Added initial update to accuracy when entering/exiting aim to ensure accuracy caps are handled properly
- Fixed BetterSpringRecoilHandler error when no aimer attached to weapon
Additions
- New wieldable tools system (code only – no demo art included currently)
- New wieldable type alongside firearms, thrown and melee weapons
- Primary and secondary fire modules
- Start, continuous (hold) and end actions
- Animator trigger actions
- Hold to charge action
- Consume inventory item actions
- Flashlight tool module (toggle action)
- Grapple tool module
- Heal actions (wielder or target)
- Play audio actions
- Shield booster actions
- Unity event actions
- Procedural and keyframed sprint handlers
- Stance system
- Grapple-swing motion graph state
- Add force and record velocity motion graph behaviours
- New HeadBobV2 head bob system with crosshair centering and bob strength sliders in game options
- Character velocity based weapon sway
- ParticleToRigidbodyShellEjector uses particle system while in view, swapping particles for rigidbodies after
Changes
- Added FoV settings to graphics menus
- Vastly improved explosion damage handling (won’t stack damage on multiple colliders / damage handlers for a single character)
- Reworked KeyBindingContext system to allow for easier addition of inputs that can share keys
- Added support for multiple inputs on each gamepad button (eg ADS + secondary fire)
- Improved KinematicHingeDoor 1-way behaviour (you can now add a hinge transform to either the positive or negative)
- Added “Tilt Towards” setting to BodyTilt motion graph behaviour
- Can now specify new pool size prior to adding new pools to scene pool info or pool manager
- Added max speed multiplier to ricochets and penetration in SurfaceBulletPhysicsInfo
- Improved bullet trail cleaner for projectiles that aren’t removed on hit
- Added OnTagged unity event to TargetTrackingAmmoEffect to make switching ammo effects easier on tagging a target
- Made it easier to extend TargetTrackingAmmoEffect and add conditions to tagging objects
- Added template descriptions to item creation wizards
- Checked and re-exported all item templates
- Switched prefab references in neo inspectors to use new project browser system (eg projectiles, explosions, hitscan trail)
- Split thrown weapons into base class to remove inventory dependency from core functionality
- Demo sticky projectile is now set up as an interactive ammo pickup (using shotgun ammo to demonstrate)
- Item pickups now support pooling (destroy on consume now changed to “return to pool or destroy” on consume)
- Removed inventory key from generated constants (you should now add new items via the database)
- Removed FpsInputAxis from generated constants settings and made it harder to accidentally generate all
- Improved lookahead on StandardShellEject to compensate for character position interpolation
- Added new shell casing physics material for better bounce
- More intuitive velocity and slope handling in AnimCurveDashState
- Better interpolation handling in PhysicsBulletCasing
- Added ADS multiplier for RotationBob on weapons
- Made hitboxes on cameras and turrets slightly bigger
- Nicer water surface texture
- Demo characters now lower weapons when swimming or climbing ladders
- Better exception handling when loading from save
Bug Fixes
- Fixed camera seeker angle ranges clamping in OnValidate before input is finished
- Prevented hammering different weapon slots from blocking ADS when ending on the original selection
- Fixed registering NSGO save game prefabs with save system from within prefab-stage
- Prevented gamepad settings from creating NeoFPS manager objects on run when NEOFPS_LOAD_ON_DEMAND is used
- Prevented animator parameters resetting on disable/enable for chambered and incremental reloaders
- Fixed broken player character wizard (incorrect stamina system setup)
- Restored correct inventory IDs on armour prefabs
- Dimmed the stylised projectile trail to prevent blinding people
- Teleporting NeoCharacterController now resets interpolation properly to prevent crazy skipping effect
- Fixed potential out of range bug on pattern editor for pattern shooters
- Fixed gizmo error with character prefab open in prefab stage while in play mode
- Fixed aimer gizmo not matching aim offset transform
- Fixed LaserPointerAimerSwitch causing error on load from save when not on active weapon
- Fixed ModularFirearmModeSwitcher not connecting after load from save if weapon was never selected
Additions
- New water shaders in swimming demo
Changes
- Added version number to hub front page
Bug Fixes
- Fixed duplicate script error on upgrading from 1.1.09
Additions
- Locked doors
- Inventory based keyring
- Locked interactive objects and trigger zones
- Destructible lock example
- Lockpicks and lockpicking mini-game
- Keypad based passcode locks
- Guided projectiles
- Simple steering and drunken steering examples
- Player tracking
- Nearest object with tag and layer tracking
- Laser pointer targeting system (HL2 style)
- Target lock firearm trigger (hold to lock, release to fire)
- Multi-target lock firearm trigger (hold to add targets, release to fire once per target)
- Raycast targeting (homes on initial aim point)
- Target tracking ammo effect (tag a target with a bullet to get missiles to home on)
- Sticky projectiles
- Contact thrown weapons
- Recharging ammo firearm module
- Audio-only muzzle effect firearm module
- Queued trigger module (hold to queue shots, release to fire)
- Ability based firearms (eg shoulder mounted launchers)
- Tribes inspired demo scene for jetpacks and guided missiles
- New motion graph states
- Adaptive jetpack (allows for hover effects and max speeds)
- Anim curve dash
- New motion graph behaviours
- Animator parameter setters
- Animator velocity, speed and input behaviours
- Impact damage (temporarily disable/enable)
- Modify character velocity
- Camera kick, jiggle and shake spring effects
- Camera FoV pulses
- Constrain camera pitch
- Steering rate
- Info popup trigger (add to interactive objects to show text popups)
- Checkpoint trigger (enable/disable spawnpoints, and auto-save)
- World to screen position HUD markers (currently used for target locks)
- Prefab UI popups system to allow showing arbitrary UI popups from prefabs (eg door keypads)
- New inventory loadout assets
- Added HUD Toggle component (press a key to hide/show the HUD for screenshots)
Changes
- FpsInventoryKey constants replaced with full inventory database system (easier to work with and expand to your needs)
- Added set and reset velocity methods to NeoCharacterController
- Added locked animation curve for door handles
- Improved object fields and browsers in wizards
- FirstPersonCamera now has methods for FoV pulses
- Added volume settings to firearm
- Firearm movement accuracy now exposed in ModularFirearm component settings
- Firearm modules switched to a common base class and given lifecycle settings
- Smoother blend in and out of position bob
- Added sprint hold and ability button to character motion input component
- New settings for motion graph states: boost pad, jump, fall
- Improved audio falloff for default audio manager audio sources
- Motion graph data override API has been changed to allow stacking of overrides
- Stamina system now uses multipliers for motion when tired instead of absolute values
- Projectiles can now be teleported
- Charged trigger now has options for different animation setups (parameter, layer blend, events)
- Door trigger zones have added “characters only” setting
- Body lean has new settings to counter rotate camera and weapon
- Added demo example for multi-waypoint moving platforms (select a destination)
- Passthrough reloader now has magazine size settings for modules that want to check it
- Added trigger cancellation using reload button for certain trigger types (and settings)
- Added onTooltipChanged event to interactive objects (eg Unlock vs Open)
- IInventory now has AddItemFromPrefab method
- Added settings for which hit ammo effect to use when penetrating ammo effects fail to penetrate
- Switched ballistic projectiles to common base class
- New onShootContinuous event on trigger modules
- Added deceleration setting to basic motion state (no input)
- Airborne only setting for recoil pushback component
- Added inventory loadouts to game mode / spawner
- Can no longer set character height directly from motion controller property. Must use methods instead
- Added steering properties to IAimController
- Added enabled checks to INeoCharacterControllerHitHandler
- Added reload current setting to NeoSceneSwitcher
- Added onValueChanged event to motion graph transform parameters
- New “Decal Layers” setting on surface manager allows you to specify which layers accept decals
- Character spawns now have a setting to reorient gravity to their tilt on spawn
- Added filter to modular firearm mode switcher to make it easier to select modules
- Added ground contact lookahead settings to NeoCharacterController (detect slopes vs steps)
- Stacked inventory wieldables are now fixed at the maximum stack size of 10 (other options were causing confusion)
Bug Fixes
- Fixed incorrect force calculations on NeoCharacterController
- Fixed improper naming of trigger events on character trigger zones
- Animator parameter key checks now work for animator override controllers
- Stacking bullet effects can now longer select themselves
- Fixed persistent stacked inventory HUD (now selection dropdowns fade out)
- Fixed automatic and burst trigger spacing if shot causes error
- Driven moving platform gets correct values from rigidbodies if used
- Fixed tilted spawn points causing character up vs gravity mismatch
- Fixed FpsInput base class allowing input without focus
Additions
- New firearm optics
- Holographic & red dot sights with reticules projected in front of the weapon
- Render texture based scopes
- Stencil based scopes
- Built-in (standard) render pipeline shaders
- Weapon flashlights
- Laser pointers
- New weapon attachments geometry (system not yet implemented)
- New in-game quick options menu to bypass full UI if changing volume, mouse sensitivity, vsync, etc
- Added “ability” based slow-mo (press the button to enter slow-mo)
- Added DirectionalDash motion graph state
Changes
- Updated demo facility
- New motion graph for character with swimming, crouch slides and climbing
- Wall running implemented but disabled by default
- Firearms switched to projectile based shooters
- Firearm geometry replaced with new models
- New camo material options for weapons
- Firearm prefabs have a variety of optics and other attachments
- Activate / deactivate in the prefab as required (the attachment system is not yet implemented)
- Re-baked lighting with light and reflection probes
- Added keyboard layouts (Qwerty, Azerty, Qwertz, Dvorak, Colemak)
- In game key bindings now has option to reset to defaults based on layout
- Added key binding filter to options menu to hide specific inputs that might not be used
- Improved NeoCharacterController interpolation for smoother results
- Head move and weapon move aimers can now set separate input sensitivity to FoV multiplier (for RT scopes)
- New minimum accuracy setting for weapons (in script)
- New movement accuracy penalty multiplier for weapons (in script)
- Added strength multipliers to additive spring effects (in script)
- Added HideCrosshair and ShowCrosshair methods to weapons (in script)
- Added “ability”, toggle flashlight, and optics brightness up/down input buttons
- Improved modular firearm wizard to allow non-model prefabs
- Added NEOFPS_LOAD_ON_DEMAND scripting define, to prevent manager load and creation on start
- Redesigned pattern shooter pattern editor interface
Bug Fixes
- Key bindings options menu was showing every input as W
- Better handling of wieldable selection locks from motion graph behaviours
- Fixed motion graph states and connections not showing in inspector in 2020+
- Aimers now use correct rotation easing setting (were using position easing)
- Character played pain grunt when health went up instead of down
- Advanced particle muzzle effect particles were disappearing when switching weapons
- Character step rate now blends in/out to stop popping in spring effects (eg head and weapon bob)
- Fixed aim persisting between weapon switches (ADS, switch, stop aiming, switch back)
- Additive transform handler using FixedAndLerp option wasn’t interpolating properly
- Aim up/down audio was playing at end of transition instead of start
Additions
- New item creation wizards
- Pickups (revamped)
- Melee Weapons
- Thrown Weapons
- Player Character
- Modular Firearm
- Interactive Objects
Changes
- Damage dealers (hitscan and projectile firearms, melee weapons and explosives) no detect multiple damage handlers on an object
- Implemented registration of NeoSerializedGameObject components with the save manager (or scene save info) from the component’s inspector
Bug Fixes
- Fixed motion graph states and connections not showing in inspector in 2020+
- Aimers now use correct rotation easing setting (were using position easing)
Additions
- Regenerating health manager
- Armour (inventory & pickup based)
- Shields (recharging, and staggered with pickups to fill empty bars)
- Healing and damage zones
- Slow-motion system with slow-mo zones and motion graph behaviour
- New HudAdvancedCrosshair with hit and critical hit feedback
- HUD based Interaction tooltips
- New CameraYawConstraint motion graph behaviour (used in the demo curved wall runs)
- CutsceneCamera handles disabling HUD and character input for external camera views
- RecoilPushback behaviour pushes the player character backwards when they shoot a firearm
- Added a “Pickup Wizard” to the NeoFPS hub to simplify creating item pickups and powerups
- New example contact based and interactive pickups (inventory items, health and armour)
- HUD based meters and counters for inventory items, and other systems
- JumpDirectionV2 motion graph state replaces old directional jump and handles analogue input correctly
Changes
- Camera constraints are now damped near the limits
- Character controller height change speed is now set along with target height
- Added separate body lean settings for crouching vs standing
- Added frame rate cap options to graphics settings when V-Sync is disabled
- New IShooterCameraAim interface added to relevant shooters to make it easier to swap shared property at runtime
Bug Fixes
- Better save system thread handling for IL2CPP
- Fixed incorred disable on InfiniteAmmo firearm module
- The character controller is now much better at handling head collisions (doesn’t get stuck on overhang corners now)
- Swappable inventory sytem now gets the correct slot index from save games
- Improved spawn order handling by adding an OrderedSpawnPointGroup component
- Removed assumption from inventory system that starting items would have a save system component (NeoSerializedGameObject)
- Switched sample scene thumbnails to enable read/write as it was causing an error in save games
Additions
- TeleportZone1Way allows simple teleportation
- TargetVelocity condition for motion graph (velocity before collision response)
- MaintainVelocity motion graph state
Changes
- Improved pose handler reset
- Added motion graph parameter reading for head duck spring effect
- Added FixedUpdate + interpolation in Update or LateUpdate for spring effects (more consistent at low framerates)
- Added BreathingEffect to all demo weapons
Bug Fixes
- Fixed firearm quick-setup using wrong transform for spring animation (blocks new stance system from working)
- Blocked sprint handlers from catching events while not selected
- Fixed jump charge sometimes resetting before actual jump
- Fixed broken screenshots in save games
- Fixed trigger state being saved with save games (would shoot on load)
- More consistent behaviour when swapping aimer and trigger modules while in use
- Prevented rapid unlock/lock inventory selection from causing weapon to pop up
Additions
- New wieldable stance managers that can be used for weapon stances/poses
- FirearmWieldableStanceManager, MeleeWieldableStanceManager, ThrownWieldableStanceManager
- SetWieldableStance motion graph behaviour to control stance from motion graph (eg crouching or falling)
- Procedural and keyframed sprint animation handlers for weapons
- ProceduralFirearmSprintHandler, ProceduralMeleeSprintHandler, ProceduralThrownSprintHandler
- AnimatedFirearmSprintHandler, AnimatedMeleeSprintHandler, AnimatedThrownSprintHandler
- Options to pause sprint animation or break out of sprinting motion state on shooting, reload, melee attack and throwing
- New BetterSpringRecoilHandler firearm module replaces the old spring recoil module and is much more intuitive and powerful
- New breathing system provides a consistent way to count breaths for procedural animation (new BreathingEffect additive transform component), as well as firing unity events on breath for things like particle systems
- StaminaSystem tracks the player character’s stamina and can modify movement speed and breathing rate based on fatigue
- DrainStamina and ModifyStamina motion graph behaviours let you affect stamina based on movement
- FirearmAimFatigue behaviour can be added to a modular firearm to drain stamina while aiming down sights
- Exhaustion lets you block sprinting and others until stamina has recovered to a set threshold
- New stamina bar HUD item
- CameraShake additive effect for use with continuous shakes such as earthquakes, and one-off shakes such as explosions
- Example shake zones can be placed in the scene and activated via events: BoxShakeZone, BoxShakeZone2D, CircleShakeZone, SphereShakeZone
- Shake has been added to pooled explosions for grenades and exploding barrels
- New step tracking system added to MotionController and motion graph
- TrackSteps motion graph behaviour can be added to relevant states and sub-graphs to set stride length
- Used to sync head and weapon bob, along with procedural sprint animations
- Can switch on “Use Dumb Stepping” on MotionController instead of using motion graph behaviours for a simple implementation
- New PositionBob and RotationBob spring effects replace deprecated (but still functional) HeadBob and WeaponBob
- Better syncing allows gameplay settings to blend head bob out to weapon bob for people that get motion sickness
- LockInventorySelection and UnlockInventorySelection motion graph behaviours let you set the character inventory to a specific item, hands (backup item) or nothing when entering and exiting motion states
- AdditiveJiggle adds a Z-axis rotation spring effect
- Added quickstart to hub for firearm overheat
Changes
- Added new DemoFacility character and weapons to show off new features. These will be updated much more frequently than the other demo characters and weapons
- Updated demo weapons with new bob effects and better spring recoil
- Weapon deselect can now use a lower animation instead of just being instant (demo weapon animators have been updated to add this, but the weapon prefabs are set to instant as before)
- WeaponMoveAimer and ScopedAimer switched to use new pose handlers for seamless blends to other stances / poses
- CharacterTriggerZone and CharacterTriggerZone OnTrigger* methods renamed to OnCharacter* due to Unity errors using method names that match message names
- Added preset accuracy kick settings to all recoil modules
- OnWielderChanged event on IWieldable (affects firearms, melee and thrown)
- Aimer modules have replaced onAimUp and onAimDown events with onAimStateChanged event that includes transitions
- IAdditiveTransform interface now includes properties for bypassing position and rotation scaling
- IThrownWeapon interface has new properties for throw durations and events for throwing
- IMeleeWeapon interface has events for attacking and entering/exiting block state
- ITrigger interface gained an onStateChanged event
- Added Floor and Ceiling options to ModifyFloatParameter motion graph behaviour
- Moved damage handling before applying force in bullet effects for better ragdoll force handling on death
- Moved jetpack example to new “SmallFeatureExamples” folder in samples
- Added “Lead In” option to AdditiveKicker to allow smoother entry
- Switched demo assault rifles to use base ModularFirearm behaviour and ModularFirearmModeSwitcher instead of pointless ModularAssaultRifle behaviour
Bug Fixes
- Fixed head bob speed on ladders
- Fixed AdvancedParticleSystemMuzzleEffect breaking on guns that aren’t in inventory on start
- Fixed issue with rearranging prefab hierarchies using NeoSerializedGameObjects breaking object’s save hierarchy
- Prevented spawn points registered with spawn system persisting outside play mode
- AdditiveTransformHandler was stacking transforms incorrectly, leading to the pivot point getting out of sync
- Removed ModularFirearm error checks in play mode (were being triggered by mode switching)
Additions
- New pooled object surface hit FX
- Added new demo realistic particle system effects for weapon muzzle flashes
- New demo bullet trails and projectiles
- Overheat system for firearms including barrel glow, heat-haze and HUD heat bar
- New standard shaders for firearm VFX and interactive object highlighting
- Added transition settings for weapon move aimer, using different easing functions
Changes
- Improved timing on entering aim mode from reload
- Moved recoil to end of frame to prevent bullet trails from using recoil position
- Split ParticleSystemMuzzleEffect to Simple and Advanced versions
- Added distortion shockwave to explosions
- Added more options to wall running state for entry speed and target speed
Bug Fixes
- Prevented decals persisting across scene loads
- Fixed standalone build error
- Fixed interactive object detection and highlighting
- Fixed broken inspector for SurfaceBulletPhysicsInfo scriptable object
- Improved head bob speed on ladders
Additions
- Added new ricochet ammo effects (ballistic and hitscan) which stack with normal bullet effects
- Added new penetration ammo effects (ballistic and hitscan) which stack with normal bullet effects
- Added new pooled hitscan bullet trails
Changes
- Moved ammo effect modules into own folder
- Hitscan shooters no longer use a bullet trail on the weapon, but a pooled trail object instead
- Added speed parameter for bullet effects
- Added speed based bullet damage falloff to advanced bullet ammo effect
Bug Fixes
- Fixed script errors when upgrading from 1.1.01 or earlier due to deprecated scripts not being deleted automatically
- Fixed issue with asset store pulling in 2018 package manager UI as a dependency when importing into 2019+
- Interactive object markers now work properly with objects of negative scale
- Post-process Layer Fix behaviour now does nothing if a PPL component already exists on the camera
Additions
- NeoFPS Hub replaces the welcome popup and settings wizard with a page based editor UI
- Quick start readmes
- Update notes tracks the installed version and shows required changes when updating the asset
- Demo scenes list and readmes for each demo scene
- Improved game settings (player controlled options)
- Improved game managers (NeoFPS and unity systems options)
- Custom script creation wizard
- Integrations page linking to asset store and GitHub integration repos
- Standalone tools page describing non-hub tools and providing shortcuts to open them
- Pattern shooters (hitscan and ballistic) shoot in a specific pattern
- Spread ballistic shooter allows random spread (shotgun style) with ballistic projectiles
- Advanced bullet ammo effect adds randomised damage and damage falloff over range to modular firearm bullets
- Ballistic projectile with simple drag adds a basic drag system to the standard projectiles for more interesting trajectories
- Anim only aimer adds a simple aimer module to firearms that triggers an aim animation (useful for AI)
- Accuracy only recoil handler adds a recoil handler that modifies a firearms accuracy each shot, but nothing else
- New passthrough reloader shoots directly from a firearm’s ammo module instead of a magazine
- NeoFpsInputManager asset now moves default key bindings and generated constants to one place for easier editing
- NeoFpsAudioManager moves mixer properties and audio source pooling out of settings for easier editing
Changes
- MAJOR CHANGE updated samples to Unity 2018.4 and new prefab system
- New variant prefabs for characters and weapons to reduce maintenance errors
- Nested prefabs for scenes for easier changes (eg updating lights for HDRP conversion)
- Old prefabs moved to new Samples/Legacy folder
- Renamed prefabs and assets for more consistent naming conventions
- Added toggle lean option to character input
- Added climb height output to motion graph climbable condition fr synching animation
- Added health changed and alive changed events to health manager
- Can now allow reloading while ADS
- Infinite ammo module has been split out so that the reloader component is now the passthrough reloader
- New options for what happens when a weapon is deselected
- Split variable gravity out of INeoCharacterController interface for optimised mobile version
- New absolute input options in motion graph input vector condition
- New GetItems() methods on inventories (including non-allocating versions)
- Added optional steering system to aim controllers (detaches character heading and aim direction)
- In-game menu now has an option to pause the game when active
- Added IWieldable interface to items and exposed as a property in the inventory behaviours for better event handling
- Bullet trail cleaner now has an optional delay before starting trail
- Added distance parameter to firearm ammo effects
- Added readme objects to all demo scenes with breakdown of contents and links to in-scene items, documentation, etc
- Ballistic shooters now use an IProjectile interface instead of referencing the ballistic projectile directly
- NeoSceneManager is now a scriptable object and exposes unity events to handle scene load success/failure
- New default loading screen options in scene switcher (default is specified in NeoSceneManager)
- All managers are now scriptable objects, reducing scene setup complexity
- Gamepad input now auto-detects the attached gamepad and uses gamepad-agnostic profiles
- Asset now automatically adds a NEOFPS scripting define to the player settings
- Game settings now only contain options the player should access (eg no audio mixer variable names)
- Mouse cursor capture is now on demand instead of default. Prevents issues using NeoFPS alongside other assets
Bug Fixes
- Swappable inventory was incorrectly setting category sizes to 0 when first placed, causing errors
- Post process layer fix was setting the wrong layer for post processing profiles
- Pooled objects with an NSGO attached that aren’t registered with the save system no longer cause an error
- Inventory items quick slots are now clamped to the available range
- Motion graph bob interval was being detected, but not correctly used
- Removed infinite loop in descending order inventory starting slot selection
Additions
- New ModularFirearmModeSwitcher and API to simplify using the firearm mode switch to swap firearm modules and more
- Added an AnimationEventAudioPlayer component which can be attached to animated objects for flexible system to play audio clips using animation events
Changes
- Added absolute rotation option to NeoCharacterController.Teleport
- Improved blend in and out for head and weapon bob
- Improved repeat timing for burst fire trigger
- Added Color32 to save games serializers
- Graphics settings now retrieves first run settings at runtime and hides options in editor
- Added discord link to welcome popup
- Changed gamepad settings to default to off
- Added NSGO parameters to serialization formatters for saving object references
- Changed damage and health methods to virtual
- Added “onItemDropped” event to inventories
Bug Fixes
- Fixed missing sounds on turrets
- Removed PostProcessLayer components that were spamming errors and added a component that rebuilds them at runtime
- Fixed sync issues with incremental reloader
- Prevented infinite loop in inventory reverse starting selection order
- Delayed start on projectile trails to prevent spike to origin in 2018.4+
- HUD scopes now hide other HUD elements when raised
- Fixed NeoSerializedGameObject prefabs failing to create serialization key for some child objects
- Removed debug logging from pitch condition and swimming motion graph
- Fixed null texture data bug in savegame metadata load when not using screenshots
- Extra bomb proofing for MG condition groups to prevent circular references
- Fixed multiple audio listener issues with async loading screen
Additions
- New save game system
- Quick save/load using F5/F9 (by default) on standalone
- Quick, auto (checkpoint) and manual saves
- Save browser in main menu
- Continue button in main menu resumes from latest save
- Optional screenshots or thumbnails for quick and auto saves
- Persistence (save character health and inventory on scene change)
- NeoSerializable interface for components and scriptable objects
- Formatters for adding save/load to complex third party components
- File read/write on separate thread to prevent freezes on save
- Loading screen system for async scene loading
- In-game saving notification
- Custom binary serializer/deserializer
- Custom serializer for restricted platforms (eg WebGL)
- Save file inspector
- Parkour motion graph elements and demo
- New motion graph states for wall running, dashing, mantling, skiing (crouch slide), pushing off walls, jump pads
- New conditions for climbing, air time, collision flags, time comparisons, lookahead casts (velocity, direction, etc), enhanced casts that output results to parameters, direction and velocity tests, aim tests
- New behaviours for recording time, applying body tilt effects, clamping parameters
- New jump pad scene elements
- Swimming motion features
- Surface and underwater swimming states, with or without strokes
- Wading state that modifies speed by water depth
- Climbing out of water onto ledges
- New water zone scene elements with flow and surface info
- Drowning system that tracks time underwater
- Jetpack motion state behaviours
- HUD meters and readouts for motion graph parameters
- Motion debugger tool
- Charts character movement stats in detail
- View character controller and motion graph data
- Track motion graph parameter values
- Scrub the graph to inspect specific frames and view movement in the scene
- Body tilt
- Lean left / right, with proximity and speed checks
- Motion graph behaviours to tilt based on wall contacts or movement
- Weapon momentum sway spring effect that moves held items as the camera rotates
- New scene management system for async loads with loading screen (ties into save system)
- Added PS4 controller support
Changes
- Motion graph now supports vector parameters
- Motion graph connections can now use condition groups that allow combos of any/all
- Complete rework of NeoCharacterController slope handling
- Slope speed curves now applied to movement states, not controller
- Moved game settings to scriptable object resources for easier editing
- Scene switcher can now switch based on index or name, and allows persisting character data
- Added “On Death” options to example game mode for loading from saves or returning to menu
- Added object to surface hits to allow more complex effects
- Changed weapon aim amplifier to work with variable up vector, and use more intuitive settings
- Tied head and weapon bob to motion graph for more control over bob amount and rate
- Added “rounds per second” and “rounds per minute” readouts to trigger inspectors
- Added settings to block trigger when transitioning aim mode to prevent interrupting animations
- Simplified ammo effect assignment in ammo firearm modules
- Explosion and impact forces can now push the character
- Improved inspector for level select menu
- Added optional parameter to disable ground snapping when adding a force to the NeoCharacterController
- Removed old explosion system deprecated in 1.0.05
- Added audio handling to health pickup
- Added repeat functionality to charged trigger
- Added match camera position system to firearm editor to simplify setup process
- Added all in one character for drop-in testing (doesn’t require spawner and reloads scene on death)
- Enabled AI turrets in demo facility by default
- Enabled post-processing by default (asset store tools can now save dependencies)
- Can now specify camera FoV as horizontal (based on 16:9 aspect) or vertical, but applied in vertical
Bug Fixes
- Fixed NeoCharacterController throwing errors on non-readable mesh colliders
- Audio settings now correctly modifying mixer
- Fixed OnEnter/OnExit for disabled motion graph behaviours
- Swapped menu dropdown icon on motion graph behaviours to be more visible on light UI
- Fixed surface manager returning incorrect surface from default layers
- Pressing escape no longer locks input, but blocks it correctly
- Removed 1 frame lag on moving platforms
- Contact ladded base handling fixed (doesn’t force detach)
- Fixed death camera height
- Fixed over-amplified weapon sway when looking up / down
Additions
- New NeoCharacterController demo scene with arbitrary up-vector demo
Bug Fixes
- Script errors in FpsGamepadSettings.cs due to refactoring not picked up with platform dependent compilation
- FoV issues on ultra-widescreen monitors and when resizing window
- Fixed HUD elements not unsubscribing from events properly on destroy
Changes
- Tweaked pistol recoil
- Added optional parameter to disable ground snapping when adding a force to the NeoCharacterController
Additions
- New explosion system that uses pooled particle effect objects and a simple PooledExplosion behaviour.
- Added example explosion prefabs.
- New multi-object and particle muzzle flash firearm modules.
- Split ballistic shooter into new simple ballistic shooter that ignores accuracy and camera aim.
- Added explosive barrels (red in demo scenes).
Bug Fixes
- Fixed issues with generated constants editor not refreshing valid state when name clashes are fixed.
- Set proper layers for AI seeker targets on inventory demo characters.
- Set correct audio sources for inventory demo characters.
- Firearm drops now correctly set ammo even without a FirearmAmmoDrop attached.
Changes
- Fixed “Apply Manually” errors in settings wizard (2018.3+).
- The ballistic shooter now correctly handles accuracy based on the spread property.
- All shooters now have options to use the camera aim or gun forward for both hip fire and aimed fire.
- New accuracy caps in aimer modules allow maximum accuracy (0-1) to be set for aimed and hip fire.
- Added layers property to CharacterInteractionHandler to choose layers it interacts with.
- Added multiple inventory types to firearm editor quick-setup.
- Added aim transform property to camera so effects can be layered on top.
- Switched swappable inventories to use new FpsSwappableCategory for neater editor and easier expansion.
- Renamed inventory keys to better describe items.
- Reorganised inventory editors to make more readable.
- The spring recoil module can now bypass spring multipliers for more intuitive settings.
- Added RaycastHit versions of AddDamage on damage handlers for more complex use cases.
- Renamed spring multipliers on aimers.
- Added events to AI Seekers for state changes.
- Thrown grenades now use new explosion system.
- Demo grenade launcher now uses new explosion system.
- Spring recoil handler can now bypass the spring multipliers.
- Added base accuracy level for hip firing and aimed.
- Tweaked demo firearms (recoil, shooters and aimers) for better handling.
Additions
- Added new IRecoilHandler modules to modular firearms
- Added health pickups
- Added new BaseCharacter and BaseController behaviours and switched singleplayer versions to use these
- Added new player character and inventory watchers and switched hud elements to use these
- Added C# events to motion graph parameters
Bug Fixes
- Hitscan and spread shooter were dealing damage twice when set to use camera forward vector
- Set HUD inventories to auto-populate slot property in OnValidate and added start errors if not found
- Enabled collisions between default layer and rough envirnoment geo
- Fixed WebGL build issue with input bindings
- Fixed motion graph connectable build error outside editor
- Hitscan and spread shooters now use correct camera transform for aim (not spring parent)
- Fixed divide by zero in AdditiveKicker if starting play mode from paused
- Fixed start-order bug with character disabling on spawn
- Prevented reload continuing after weapon switch
- Fixed aimers being blocked if aiming during reload, but switching weapons before done
- Fixed hold to aim not working
- Fixed key rebinding not detecting some clashes
- Fixed startup scripts not triggering properly in 2017.4
- Added delay between startup checks to prevent overlap on 2019.2+
Changes
- Moved firearm handling out of modular firearm and into new IRecoilHandler modules
- Moved firearm scripts into NeoFPS.ModularFirearm namespace
- Added firearm module error reporting in ModularFirearm inspector
- Added collision mask option to firearm shooters with that defaults to bullet blockers
- Switched firearm aimer modules to use vectors instead of proxy transforms (can set from a transform)
- Switched HUD elements to use new base classes and be more “multiplayer friendly”
- Removed static onLocalPlayerInventoryChanged event from inventory base and used character change instead
- Switched canvas HUD in demo scenes to use root prefab instead of individual element prefabs
- Reorganised weapon drop heirarchies to be more intuitive
- Replaced crosshair and switched default colour
- New motion graph editor UI elements
Additions
- Added new infinite ammo firearm module
- Added particle system firearm ammo effect
- Modular firearm behaviour inspector now has troubleshooting and “add modules” features
- New ChamberedReloader firearm module that uses different reload (anim & duration) when empty
- New integrations available (https://neofps.com/integrations)
- Emerald AI
- Inventory Pro (in progress)
- New TransformMatcher additive transform for matching animated camera moves
Bug Fixes
- Enabled inventory HUD in DemoFacility scene
- Fixed missing explosion sound effects
- Fixed shadow casting on first person weapons and arms
- Set default values for all variables to prevent import warnings in 2018.3+
- Fixed turret damage, sight checks and rate of fire
- Fixed hard-coded root asset path for auto build settings and startup checks
- Added bullet trail cleaner that resets trail renderer on pooled projectiles
- Fixed key bindings index out of range when changing button count after saving settings
- Fixed occasional start order blocking character input activation bug
- Fixed hard coded animator key for burst trigger hold
- Fixed automatic trigger getting stuck in fire mode on quick switch
- Fixed enabling character object or weapon while menu up bypassing the menu input block
Changes
- Major rework of motion graph editor to make more reactive and respond to undo/redo better
- Graph elements are now edited through the standard Unity inspector
- Added copy/paste to graph viewport
- Added “Move to Sub-Graph” to graph viewport
- Replaced MotionData asset with data entries on motion graph and new MotionGraphDataOverride asset
- Simplified API for creating new graph elements (states, conditions and behaviours)
- Lowered minimum supported version to 2017.4 (long term support)
- Split health manager out from solo character to allow swapping (Inventory Pro integration)
- Added support for multiple box colliders (eg door and handle) to interactive object corner highlights
- Tweaked layer, tag, and physics settings for Emerald AI integration
- Tweaked FpsInputButton generated constant for Inventory Pro integration and future work
- Added inactive “security” layer to demo facility with turrets and cameras
- Added animator key parameter drawer to check keys exist in animator while inspecting behaviours
Additions
- Added PlatformDependentObject to allow disabling objects based on platform (used for WebGL and console menus)
- Disabled exit and graphics options on WebGL
- Disabled exit, graphics and key bindings for console
Bug Fixes
- Fixed build errors due to OnValidate on ladder motion graph states
- Fixed obsolete GetPrefabObject warning on 2018.3
- Fixed wrong type of hand grenades in inventory demo ammo crates
- Fixed dropping excess swappable grenades from crates on floor
Tweaks
- Tweaked light settings for facility and rebuilt lightmaps
- Switched menu and back key to Tab for WebGL since Escape is reserved
Additions
- Added minimal character setup with only movement and aim features
Bug Fixes
- Fixed script compile errors for non-standalone builds
- Fixed shotgun reload interrupt blocking input
- Prevented welcome popup appearing on run when “Show on start” set
- Improved startup order on first import
- Fixed console errors when deleting a graph connection while inspecting
- Prevented clicking off “Add Entry” dropdown in MotionControllerData inspector causing an error
- Temporarily removed copy/paste and move to subgraph features of motion graph editor pending re-engineering
- Improved ladder aim handling and removed incorrect up-down movement for “AimerHeading” setting on contact ladders
- Can now change interactive ladder aim constraints while in play mode
- Motion graph editor now correctly handles exiting play mode while editing runtime graph instance
Tweaks
- Tweaked timings and recoil on weapons
- Fixed execution order issue with NeoCharacterController height
The initial release on NeoFPS on the asset store