- Added Impact Object Rigidbody (Cheap) component that can be used instead of the normal Impact Object Rigidbody. This version does not use FixedUpdate at the cost of slightly less accurate interactions, particularly when sliding and rolling.
- Added Pool Fallback Mode property to interaction template objects. This specifies how the object pool should handle cases when all objects are in use.
- Refactored internal pooling system to accomodate for Pool Fallback Mode option.
- The Audio Source Template property of Audio Interactions has been changed. See below changes for details.
- Changed Impact Audio Pool implementation. Each audio source template now has it's own pool, similarly to the Particle and Decal interaction pools.
- Audio Interactions now require a component that inherits ImpactAudioSourceBase to be on the Audio Source Template prefab.
- Added Pool Size property to Impact Audio Source.
- Removed Default Audio Pool Size property from the Impact Manager.
- Improved handling and logging of missing dependencies on Impact components.
- Impact Object Single Material now does a null-check on the Material on Awake.
Upgrading to 1.5.0
Version 1.5.0 changes the way the built-in Audio Interactions use their Audio Source Template prefab (Click here to learn more). These prefabs now require an Impact Audio Source component, which unfortunately will break the references on your Audio Interactions. A tool has been included in the 1.5.0 release that will attempt to automatically fix all broken references and add the Impact Audio Source component to your audio source templates. Go to to run this tool, but make sure you have a backup!
Also, if you have pre-made Impact Audio Pool object in your scenes, make sure you delete them, or you will see errors when it they are destroyed on scene load or play mode exit.
- Built-in trigger base classes no longer specify IImpactCollisionWrapper and IImpactContactPoint types for ImpactTriggerBase, allowing you to inherit from them and specify your own types.
- Fixed Particle and Velocity triggers calculating interaction velocity backwards.
- Added new Velocity Collision Trigger. This trigger works similarly to the normal Collision Trigger, however it takes into account the actual change in velocity experienced by the rigidbody. This can produce better results when objects of significantly different masses collide. The object with a higher mass will have less velocity change and so will produce a less intense collision, the object with a lower mass will produce a more intense collision.
- Added Rotation Mode property to Impact Decals.
- Added Axis property to Impact Decals.
- Added Version.txt for showing the currently installed version.
- Removed Interaction Result Pool Size from Impact Manager. These pools are now dynamically sized as needed.
- Removed GetKey function from IInteractionData interface.
- Updated how interaction result keys are generated to reduce likelyhood of collisions.
- ImpactTriggerBase now has IImpactCollisionWrapper and IImpactContactPoint type constraints at the class level, rather than on the individual methods.
- Fixed Impact Material returning prematurely in some cases, meaning not all interaction results would be returned.
- Fixed Impact Audio Source not copying spatialize and spatializePostEffects properties from the template.
- Fixed Impact Manager using Physic Material map instead of Physics Material 2D map when initializing material mapping.
- Fixed Impact Materials not being marked as dirty when modifying interactions, causing changes to sometimes not be saved.
- Created custom dropdown for Tag selection, which includes search capability.
- Added OnTriggered event to ImpactTriggerBase and its implementations, which can be used to receive events when a trigger is triggered.
- Interaction result objects are now pooled by the Impact Manager. The size of the pools is controlled by the Interaction Result Pool Size property.
- ImpactManager.HasReachedPhysicsInteractionsLimit no longer increments the physics interactions counter. Added separate IncrementPhysicsInteractionsLimit method to do this instead.
- Removed null check from ImpactManagerInstance.GetInstance and replaced with boolean to improve performance.
- IInteractionResult interface no longer requires OriginalData property.
- IContinuousInteractionResult.KeepAlive now takes an IInteractionResult object as a parameter instead of IInteractionData.
- Key property for IContinuousInteractionResult is now a long instead of an int.
- Improved Particle Collision Trigger to respect material mapping and have more accurate collision velocity.
- Removed Contact Mode property from Particle Collision Trigger inspector since it is not used.
- Built-in interactions now check intensity before creating an Interaction Result, saving wasted processing time.
- Built-in interactions now check if the active continuous interactions limit has been reached before processing, saving wasted processing time.
- Modified IImpactCollisionWrapper interface to be generic, now requiring an IImpactContactPoint implementation to be specified.
- Modified methods of ImpactTriggerBase that take IImpactCollisionWrapper and IImpactContactPoint parameters to be generic, which prevents GC allocation of structs that implement an interface.
- Changed InteractionData to struct.
- All methods that took an IInteractionData parameter are now generic, which prevents GC allocation of structs that implement an interface.
- Various improvements to utility functions to clean up redundant code and improve performance.
- Fixed issues with tag selection when tags are not defined in a continuous sequence (i.e. numbers are skipped).
- Range.Normalize now will return 1 if the Min, Max, and input values are all equal.
- Impact Manager now disposes of any active continuous interactions when it is destroyed.
- Fixed Speculative Collision Trigger error caused by using the wrong value for contacts index.
- Added Set As Active Instance property to Impact Manager.
- Added Enabled property to all physics triggers.
- Added Multiple contact mode.
- Added Contact Point Comparison property to Impact Speculative Collision Trigger.
- Added Contact Point Lifetime property to Impact Speculative Collision Trigger.
- Improved ImpactManager instance handling.
- Created instance members in ImpactManager to mirror the static members.
- Moved all static members previously on ImpactManager to new ImpactManagerInstance static class.
- Added SetInstance and GetInstance methods to ImpactManagerInstance for setting and getting the currently active ImpactManager instance.
- Changed how the Impact Speculative Collision Trigger compares contacts from rounding to comparing sqrMagnitude.
- Impact Speculative Collision Trigger now also uses OnCollisionEnter message so that collision messages are handled more consistently.
- Changed SpeculativeCollisionContact class to a struct.
- Fixed Single Average contact mode not copying Physics Material IDs from the original contact points needed for Material Mapping.
- Removed the Contact Mode property from the Impact Speculative Collision Trigger inspector since it is not actually used.
- Impact Terrain now better handles Material Composition:
- Results are now returned sorted from highest to lowest Composition Value.
- Terrain layers with the same Impact Material are now combined into a single result.
- When the number of terrain layers is greater than the Material Composition Buffer Size, the most prevalent materials will be returned, and the sum of their Composition Values will be (close to) 1.
- Fixed various issues with Impact Raycast Trigger methods.
- Made active continuous interactions array no longer static.
- Improved handling of multiple Impact Manager instances. A warning will be logged to the console and duplicate Impact Managers will be disabled.
- Fixed continuous interactions being processed when the active continuous interactions array is full, which would cause them to never be updated or disposed of. Continuous interactions will no longer be processed if the active continuous interactions array is full.
- Added Impact Manager script.
- Added Default Audio Pool Size property.
- Added Physics Interactions Limit property.
- Added Interaction Result Buffer Size property.
- Added Max Active Continuous Interactions property.
- Added Material Composition Buffer Size property.
- Added ability to map Unity's physics materials (both 3D and 2D) to Impact Materials.
- The built-in physics triggers now check Physics Interactions Limit when a collision message is recieved. If the limit has been reached further processing will be aborted.
- Added High Priority property to ImpactTriggerBase for overrding Physics Interactions Limit.
- Added Contacts Mode property to ImpactTriggerBase with Single and Single Averaged options.
- Added ImpactObjectRigidbodyChild component that can be used for rigidbodies with multiple materials and has less overhead than ImpactObjectRigidbody.
- Added more ImpactRaycastTrigger methods (including methods for 2D raycasting).
- Changed string InteractionKeywords property to int InteractionType on IInteractionData interface to increase performance.
- Changed GetKey function on IInteractionData interface to return an int to eliminate string concatenation and increase performance.
- Added useMaterialComposition parameter to existing ImpactRaycastTrigger methods.
- Removed ImpactTriggerInteractionData class and renamed buildAndSendInteractionData to buildInteractionData on ImpactTriggerBase. buildInteractionData now takes all parameters separately instead of as a class to reduce GC allocation.
- Removed continuous interaction handling and FixedUpdate from ImpactObjectBase. This is now part of ImpactManager.
- Removed ProcessInteraction and ProccessContinuousInteraction from IImpactObject interface. These methods are now a part of ImpactManager.
- Removed interaction result buffer array from ImpactObjectBase. This is now a shared static array on ImpactManager.
- Removed material composition result buffer array from ImpactTriggerBase. This is now a shared static array on ImpactManager.
- Refactored ImpactRigidbodyWrapper to include center of mass, velocity, and angular velocity code that was previously in ImpactObjectRigidbody.
- Fixed cached material composition not being updated on ImpactObjectSingleMaterial when the Material property is changed at runtime.
- Fixed IndexOutOfRange exception when assigning a tag library with no tags to a material.