SwissArmyLib¶
About¶
SwissArmyLib is an attempt to create a collection of useful utilities with a focus on being performant. It is primarily intended for Unity projects, but feel free to rip parts out and use them for whatever you want.
A very important part in the design decisions of this library was to keep the garbage generation low. This means you will probably frown a little upon the use of interfaces for callbacks, instead of just using delicious delegates. It also means using the trusty oldfor loops for iterating through collections where possible.
There’s a lot of libraries with some of the same features, but they’re often walled off behind a restrictive or ambiguous license.This project is under the very permissive MIT license and we honestly do not care what you use it for.
Features¶
- Events
- Supports both interface and delegate listeners
- Can be prioritized to control call order
- Check outGlobalEvents if you need.. well.. global events.
- Timers
- Supports both scaled and unscaled time
- Optional arbitrary args to pass in
- Also uses interfaces for callbacks to avoid garbage
- Coroutines
- More performant alternative to Unity’s coroutines with a very similar API.
- Automata
- Pooling
- Support for both arbitrary classes and GameObjects
- IPoolable interface for callbacks
- PoolableGroup component in case multiple IPoolable components needs to be notified
- Timed despawns
- Service Locator
- An implementation of the Service Locator pattern
- Aware of MonoBehaviours and how to work with them
- Supports scene-specific resolvers
- Supports both singletons and short-lived objects
- Singletons can be lazy loaded
- Managed Update Loop
- An update loop maintained in managed space to avoid theoverhead of Native C++ –> Managed C#
- Useful for non-MonoBehaviours that needs to be part of the update loop
- OptionalManagedUpdateBehaviour class for easy usage
- Spatial Partitioning
- GC-friendly implementations of common space-partitioning systems
- Resource Pool
- Generic and flexible resource pool (health, mana, energy etc.)
- Gravity
- Flexible gravitational system
- Useful for planet gravity, black holes, magnets and all that sort of stuff.
- Misc
- BetterTime
- A wrapper for Unity’s static Time class that caches the values per frame to avoid the marshal overhead.
- About 4x faster than using the Time class directly, but we’re talking miniscule differences here.
- Shake
- Useful for creating proper screen shake
- Some collection types
- Some useful attributes
- ExecutionOrder
- Sets a default (or forces) an execution order for a MonoBehaviour
- ReadOnly
- Makes fields uninteractable in the inspector
- ExecutionOrder
- A few other tiny utilities
- BetterTime
Download¶
Binaries for the bleeding edge can be foundhere.Alternatively you can eitherbuild it yourself (very easily) or simplycopy the source code into your Unity project and call it a day.
Contributing¶
Pull requests are very welcome!
I might deny new features if they’re too niche though, but it’s still very much appreciated!