Table of Contents

Unity Scripting Fundamentals

DeepWiki 🇯🇵   🇯🇵

Unity Scripting Fundamentals is designed to be minimal, efficient & dependency-free as possible. Most of scripts are .NET / Plain C# compliant. See using statements in .cs files for details.

Tip

Licensed under the MIT License unless otherwise described.
Supported Unity version: Unity 2021.3+

📦 Installation

Add the following git URL in Unity Package Manager (UPM).

UPM

🏷️ Release version

Use latest stable release.

https://github.com/sator-imaging/Unity-Fundamentals.git#latest

or use specific version (append desired version at the end: #vX.Y.Z).

https://github.com/sator-imaging/Unity-Fundamentals.git#v1.3.1

🦜 Canary/Nightly Build

Important

It's very experimental and may have breaking changes, bug or errors without notice.

https://github.com/sator-imaging/Unity-Fundamentals.git

 

🧱 Plain C# APIs

  • Fibers
    Microthreading Library for .NET / Unity. 📘 or 日本語版

  • FiberScheduler
    Task scheduler with concurrency level control. 📘

  • Non-Alloc String Splitter
    Split string without allocation. 📘 or 日本語版

  • Rx (Reactive Extensions) / Observable
    Transform event Action<T> to IObservable<T>. 📘

  • SpanList<T>
    List implementation of Span<T> especially designed to work with Span<char>. 📘

    • TODO: Add (int, int) GetMinMaxLength()
      • To prevent enumerating repeatedly to get same result.
      • Add bool _isFrozen to determine recalculate is required. Write turns it off when changed.
      • Add bool IsFormattable with more strict token check: {one}{two} (currently accepted but must be rejected).
      • One pass replacement for FormatNonAlloc: search for { then perform .Slice(foundIndex, fromTokenMaxLength), check which one is match.
  • Atom<T>
    Thread safe primitive. 解説

  • RustSharp
    Move semantics for .NET / Unity. 解説

  • NetworkClock
    Believe-worthy, device-independent time provider based on HTTPS connection. 📘 or 解説

  • HalfUlid
    https://github.com/sator-imaging/Half-Ulid   実装の詳細

  • MiniXXHash
    Minimal xxHash32 / xxHash64 implementation. 📘 or 日本語版

    License: BSD 2-Clause

    xxHash Clean C Reference Implementation

    xxHash Library
    Copyright (c) 2012-2020 Yann Collet
    Copyright (c) 2019-2020 Devin Hussey (easyaspi314)
    All rights reserved.
    
    Redistribution and use in source and binary forms, with or without modification,
    are permitted provided that the following conditions are met:
    
    * Redistributions of source code must retain the above copyright notice, this
      list of conditions and the following disclaimer.
    
    * Redistributions in binary form must reproduce the above copyright notice, this
      list of conditions and the following disclaimer in the documentation and/or
      other materials provided with the distribution.
    
    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
    ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
    ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    
  • UString
    Lightning-fast non-alloc string builder faster than DefaultInterpolatedStringHandler. 📘 or 技術的な解説

    NOTE: Depending on StrictEnum TODO: Benchmark

  • Poolable<T>
    Self-contained singly linked list based object pool. 📘 or 日本語版

    TODO: Write tests

  • Sentinel
    Fast & efficient exclusive or concurrent thread/event manager. 📘

  • WhenEachEnumerator
    Task.WhenEach for Unity / .NET Standard 2.1. 📘 or 日本語版

  • Defer
    Providing function for early-finally pattern. 📘

    • TODO: Implement IAsyncDisposable overloads.
      • ex: await using var _ = Defer.New(async () => await ...);
  • StrictEnum
    Unlike other enum utility, this class reuses system cache and also support parsing Flags value. 📘

    See also: FinalEnumGenerator

  • ThreadSafeSingleton
    Thread! safe!! singleton!!! 日本語版

  • NUnit-compatible Framework for Unity Editor
    Crazy stuff. No need to use this anymore as unity asset store now accepts package.json. 📘

 

🎮 Unity Runtime APIs

  • Observable UnityEvent
    Transform UnityEvent to IObservable<T>. 📘

  • Nullable support for UnityEngine.Object
    Reliable nullable (?? ?. ??=) support for UnityEngine.Object. 📘

  • ManagedShell
    Provides functions that avoid creating leaked managed shell. 📘 or 解説その1 その2

  • PoolableBehaviour<T>
    Self-contained singly linked list based MonoBehaviour pool. 📘 or 日本語版

  • UI Toolkit Core Extensions

    • ExecuteAfter extension method

      • unlike builtin ExecuteLater method, this method runs action right after specified number of repaint events.
    • DisableStyleTransitionScope extension method

      • this method temporarily turns off all transitions and turns them back on when leaving the IDisposable scope. useful for immediate style update without transition animation.
    • UI Toolkit Event Subscription
      Use extension method RegisterCallbackAsSubscription to register event as IDisposable interface. It allows easily unregister event later.

    • UI Toolkit Dropdown Helper
      Extension method RegisterCallbackAsEnum allows implement typed callback. And also there is option to delay event to correctly handle dropdown event. (if no delay, dropdown in Unity editor behaves like 'stop-the-world' and some actions are not work as expected)

      NOTE: Depending on StrictEnum

  • ReusableCoroutine
    Non-alloc Unity coroutine implementation. 📘 or 日本語版

 

🖱️ Unity Editor Scripts

  • UPM Package Test Kit
    Generate clean environment and build script for selected UPM package. 📘 or 日本語マニュアル

    TODO: Unit test automation.

  • C# API Documentation for IDE
    Download C# API Documentation from Nuget.org. 📘

    License: Apache License version 2.0

  • UnityEditorMainToolbar
    Provide access to VisualElement in Unity main toolbar. 📘 or 日本語版

  • Leaked Managed Shell Detector
    Not perfect. Just for reference. 📘

  • Assembly Definitions Manager for Project Settings Panel
    TODO: Documentation

  • WIP: sealed-able Type Finder
    As IL2CPP bloats resulting C++ code if C# class is not marked with sealed modifier.

 

🗑️ Obsolete

Files are found in Obsolete/ folder with .txt extension.

  • CancellationToken based Lifecycle Manager
    Obsolete features still exist as .txt files. 📘 or 日本語版

  • Run
    Job runner for Unity providing reliable un-async-ing functions and more.

    Note

    InitializeMainThreadContext may be required to being called on Unity startup. (it called automatically by default)

    TODO: documentation for OnMainThread, InThreadPool, SetExceptionHandler, GetTimerToken, GetElapsedTime, Shutdown, CreateNewScheduler, SetConcurrentThreadCount

  • ObservableAction<T> 📘

 

📝 Devnote

⚙️ DefineConstants

How to set DefineConstants in .csproj file from dotnet command, see Directory.Build.Props and Program.cs for details.

Source: https://github.com/dotnet/sdk/issues/9562#issuecomment-1386955134