This library aims to provide additional tools to client modders which will (hopefully) allow them to write more optimised code and reduce the performance cost and memory allocation of their code even further.
- Download the latest release
- Copy the assemblies from the release zip to where you store your project's assembly references
- Add all the assemblies as assembly references to your project
- Add
[BepInDependency("com.arys.unitytoolkit")]attribute to your plugin class (I recommend you add a minimum version string to the attribute) - You can now use UniTask, Unity.Collections, VContainer, ZLinq and ZString in your mod
- UniTask is a near zero-allocating, performant version of C# Tasks that's suited for Unity than the standard C# implementation
- It doesn't use threads or
SynchronizationContext/ExecutionContextso the result is faster performance and lower allocation while matching Unity threading (single-thread) - It is also possible to replace Unity's Coroutines, which has poor performance and higher memory allocation, with UniTask instead
- Documentation: https://github.com/Cysharp/UniTask
- It doesn't use threads or
- Unity.Collections is included in this library for the additional
NativeContainertypes it providesNativeList,NativeHashMap,NativeMultiHashMap, andNativeQueue: these are useful data types when you are working with Unity's Jobs system as they are thread-safe- Documentation: https://docs.unity3d.com/Packages/com.unity.collections@2.6/manual/collections-overview.html
- VContainer is a fast Dependency Injection container, designed for Unity and works with injecting into both standard C# classes and Unity MonoBehaviours
- Documentation: https://vcontainer.hadashikick.jp
- ZLinq provides high performance, zero-allocation LINQ by utilising
ValueEnumerable, made by the developer of UniTask- Documentation: https://github.com/Cysharp/ZLinq
- ZString is a near zero-allocating string builder, which is also made by the developer of UniTask and ZLinq
- Documentation: https://github.com/Cysharp/ZString
- FixPluginTypesSerialization is a patcher that fixes custom classes/structs with the
[System.Serializable]attribute not being deserialized properly for BepInEx plugins- Thanks to Tarkin for discovering this bug and the fix
Yes, all assemblies are just compiled versions of their original git repo I've also included a VirusTotal scan of all assemblies on the GitHub releases page
- Clone the repository:
git clone https://github.com/Nympfonic/UnityToolkit.git - Place the compiled assemblies for UniTask, Unity.Collections, VContainer, ZLinq and ZString in
project\UnityToolkit\References. - Adjust the reference paths, macros and build events in the .csproj files and the SharedProperties.props file
- Open solution in your preferred C# IDE
- Build solution