Well-designed package with useful scripting tools for Unity development.
// 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);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
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.
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.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.
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.
Direction- Direction given by vector.FloatRange- Range given by two floats.IntRange- Range given by two ints.
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.
-
System types:
T[]byte[]charIComparableIDictionaryIEnumerablestring
-
Unity types:
AnimatorColorGraphicLayerMaskMonoBehaviourObjectQuaternionRectRectTransformRendererTexture2DToggleGroupTransformUnityWebRequestVector
- Perfect Foundation - The shared foundation of Perfect Core packages. Install it separately, see Install. It also brings NaughtyAttributes.
- UnityInterfaceSupport - Bundled with Evolunity.
Evolunity may receive breaking changes, so be sure to make a backup before updating the package.
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
-
Unity 2022.3+
-
Perfect Foundation 1.0.0+
-
Git (Must be added to the PATH environment variable)
-
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!