Bodix/Evolunity
Bodix/Evolunity has 64 GitHub stars and 4 forks. GitHot measured 0 stars in 24 hours and 0 in 7 days. Last checked 2026-11-14 22:31 UTC. Last push 2026-11-03.
Measured star growth
- in 24h
- 0
- in 7 days
- 0
- in 15 days
- Collecting history
- in 1 month
- Collecting history
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
About
Well-designed package with useful scripting tools for Unity development
ProductivityREADME.md
Original🌿 Evolunity
Well-designed package with useful scripting tools for Unity development.
Cheatsheet
Coroutines
// Calls the function in the next frame.
Delay.ForOneFrame(() => Debug.Log("Hello in the next frame"));
// Calls the function after N seconds.
Delay.ForSeconds(3, () => Debug.Log("Hello after three seconds"));
// Calls the function after N frames.
Delay.ForFrames(300, () => Debug.Log("Hello after three hundred frames"));
// Calls the function every N seconds.
Repeat.EverySeconds(1, () => Debug.Log("Hello every second"));
// Calls the function every N frames.
Repeat.EveryFrames(10, () => Debug.Log("Hello every ten frames"));
// Calls the function every frame.
// Works like "Update", but you can use it outside of MonoBehaviour classes.
Repeat.EveryFrame(() => Debug.Log("Hello every frame"));
// Starts a static coroutine. You can use it outside of MonoBehaviour.
StaticCoroutine.Start(SomeCoroutine());
// You can cache a coroutine and stop it at any time.
Coroutine delayCoroutine = Delay.ForSeconds(60, () => Debug.Log("Delay coroutine"));
Coroutine repeatCoroutine = Repeat.EverySeconds(60, () => Debug.Log("Repeat coroutine"));
Coroutine staticCoroutine = StaticCoroutine.Start(SomeCoroutine());
// To stop a cached coroutine use StaticCoroutine.Stop method.
// See the description of the StaticCoroutine.Stop method for details.
StaticCoroutine.Stop(delayCoroutine);
StaticCoroutine.Stop(repeatCoroutine);
StaticCoroutine.Stop(staticCoroutine);
// You can specify the MonoBehaviour that runs the coroutine.
ExampleBehaviour exampleBehaviour = GetComponent<ExampleBehaviour>();
Coroutine delayCoroutine2 = Delay.ForSeconds(60, () => Debug.Log("Delay coroutine"), exampleBehaviour);
Coroutine repeatCoroutine2 = Repeat.EverySeconds(60, () => Debug.Log("Repeat coroutine"), this);
// In this case, stop the coroutine as usual.
exampleBehaviour.StopCoroutine(delayCoroutine2);
this.StopCoroutine(repeatCoroutine2);
IEnumerable Extensions
GameObject[] objects =
{
new GameObject("Cube"),
new GameObject("Sphere"),
new GameObject("Cone")
};
// Output the array to the console.
// Output: Cube (UnityEngine.GameObject), Sphere (UnityEngine.GameObject), Cone (UnityEngine.GameObject)
Debug.Log(objects.AsString());
// Output the array to the console by specifying the string selector and a separator.
// Output: Cube : Sphere : Cone
Debug.Log(objects.AsString(item => item.name, " : "));
// Get a random object from the array.
GameObject randomObj = objects.Random();
// Shuffle the array.
objects = objects.Shuffle().ToArray();
// Remove duplicates from the array.
objects = objects.RemoveDuplicates().ToArray();
// ForEach as an extension method.
objects.ForEach(Debug.Log);
objects.ForEach((x, index) => Debug.Log(index + " : " + x.name));
// ForEach as extension method with lazy execution. The action runs only when the result is enumerated.
objects.ForEachLazy(Debug.Log);
objects.ForEachLazy((x, index) => Debug.Log(index + " : " + x.name));
Cheatsheet still WIP
Content
Utilities
StaticCoroutine- Static coroutine.Delay- Utility for calling functions with a delay. Based onStaticCoroutine.Screenshot- Utility for quick and easy screenshots.Performance- Utility for measuring functions performance.BinarySerializer- Utility for serializing objects.StringEncryptor- Utility for encrypting strings.Enum- Utility for parsing and working with enums.MathUtility- Math utilities.RegexPattern- Set of default regular expression patterns.Validate- Utility for validating various things.AtomicFile- Writes a file through a temporary file, so a crash never leaves it half-written. Keeps the previous version as a backup.WrappedCoroutine- Coroutine, which contains useful data and functions for the job.ScreenEdge- Places a marker on the screen over a point of the world or, when the point is outside the screen, at the edge of the screen in its direction.DistanceText- Converts distance to text.
Unity components
PeriodicBehaviour- Calls the given function periodically.BaseSpawner- Spawns objects one-time or periodically. Based onPeriodicBehaviour.InputReader- Reads click, drag and zoom (cross-platform).LongPressReader- Reads long press (cross-platform).GifImage- Plays an array of sprites like a gif.FpsCounter- Counts FPS and outputs it to theTextcomponent.UiCompass- Turns a UI image to the world north as the camera sees it, e.g. the card of a compass on a HUD.ScreenMarkers- Base class for markers on the screen over points of the world, one for each target, e.g. quest targets on a HUD. Places the markers withScreenEdge.DevelopmentOnly- Destroys/disable the object if the DEVELOPMENT define is not set in the project settings.PlatformDependent- Destroys/disable the object if the platform specified in it does not match the current one.DontDestroyOnLoad- Makes GameObject persistent.SingletonBehaviour- SingletonMonoBehaviour.
Editor
UnityConstantsGenerator- Tool for generating static classes with tags, layers, scenes, and input axes.ConfigsGenerator- Tool for generating aConfigCatalogclass with a field for everyDataAsset.ConfigsGeneratorSettingssets the output path, namespaces, service class and search folders. By default it searches onlyAssets, so package samples stay out of the catalog. Assets with a label fromExcludeLabelsare skipped too. Use it for configs made by generators: they appear and disappear on every generation, so code should not depend on them by name.CameraScreenshot- Tool for taking screenshot from the main camera.MenuItems- Useful menu items.LayerDrawer- Property drawer forLayerAttributethat shows a popup with layers (not mask).Define- Defines management.EditorConsole- Utility for working with the Editor console.FileExplorer- Utility to open the given path in the file manager.
Structs
Direction- Direction given by vector.FloatRange- Range given by two floats.IntRange- Range given by two ints.
Other
Singleton- POCO singleton.StateMachine- Immutable state machine without using strings, enums or reflections.WeightQueue- Queue filled with elements in which the number of each element is determined by its weight.
Extension methods
System types:
T[]byte[]charIComparableIDictionaryIEnumerablestring
Unity types:
AnimatorColorGraphicLayerMaskMonoBehaviourObjectQuaternionRectRectTransformRendererTexture2DToggleGroupTransformUnityWebRequestVector
Dependencies
- Perfect Foundation - The shared foundation of Perfect Core packages. Install it separately, see Install. It also brings NaughtyAttributes.
- UnityInterfaceSupport - Bundled with Evolunity.
Warning
Evolunity may receive breaking changes, so be sure to make a backup before updating the package.
Install
Evolunity depends on Perfect Foundation. Install Perfect Foundation first, then Evolunity.
Install Perfect Foundation in one of two ways:
- From GitHub: use the following URL in the Package Manager:
https://github.com/Bodix/PerfectFoundation.git - From the Asset Store (coming soon): Window → Package Manager → My Assets → Perfect Foundation → Install.
- From GitHub: use the following URL in the Package Manager:
Install Evolunity: use the following URL in the Package Manager:
https://github.com/Bodix/Evolunity.git
Requirements
Unity 2022.3+
Perfect Foundation 1.0.0+
Git (Must be added to the PATH environment variable)
License
You can use this package in commercial projects.
You can modify or extend this package only for your own use but you can't distribute the modified version.
Note: You can submit a pull request to this repository and if your change is useful, I'll be sure to add it!
You must indicate the author.
Note: You don't need to take any action on this point, because all attributions are written at the head of the scripts!