Releases
Latest - v1.1.36 (13th April 2026)
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
- Prevents rounding issues with damage over time on shields and armour
- 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
Previous Releases
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