docs.unity3d.com
Search Results for

    Show / Hide Table of Contents

    Systems comparison

    To create a system, you can use either ISystem or SystemBase. ISystem provides access to unmanaged memory, whereas SystemBase is useful for storing managed data. You can use both system types with all of the Entities package and the job system. The following outlines the differences between the two system types

    Differences between systems

    ISystem is compatible with Burst, is faster than SystemBase, and has a value-based representation. In general, you should use ISystem over SystemBase to get better performance benefits. However, SystemBase has convenient features at the compromise of using garbage collection allocations or increased SourceGen compilation time.

    The following table outlines their compatibility:

    Feature ISystem compatibility SystemBase compatibility
    Burst compile OnCreate, OnUpdate, and OnDestroy Yes No
    Unmanaged memory allocated Yes No
    GC allocated No Yes
    Can store managed data directly in system type No Yes
    Idiomatic foreach Yes Yes
    Entities.ForEach No Yes
    Job.WithCode No Yes
    IJobEntity Yes Yes
    IJobChunk Yes Yes
    Supports inheritance No Yes

    Multiple system instances

    You can manually create multiple instances of the same system type in a World at runtime and track the SystemHandle for each instance. However, general APIs such as GetExistingSystem and GetOrCreateSystem don't support multiple system instances.

    You can use the CreateSystem API to create runtime systems.

    Additional resources

    • Using ISystem
    • Using SystemBase
    In This Article
    Back to top
    Copyright © 2024 Unity Technologies — Trademarks and terms of use
    • Legal
    • Privacy Policy
    • Cookie Policy
    • Do Not Sell or Share My Personal Information
    • Your Privacy Choices (Cookie Settings)