docs.unity3d.com
Search Results for

    Show / Hide Table of Contents

    Ways to access data

    How you access data in a system depends on whether you’ve used a managed SystemBase system, or an unmanaged ISystem system. The following are ways of accessing the data in a system:

    • SystemState: Use the properties and methods in SystemState to access raw entity state data in ISystem systems. SystemBase and SystemAPI natively use the data in SystemState.
    • SystemBase: Contains the same methods as SystemState, but you can call them from a SystemBase system.
    • SystemAPI: Calls the data you can get from SystemState, but caches and updates the data for you, meaning that you can use SystemAPI methods directly in an Update loop. Because you can directly use these methods in Update, there's no runtime cost to using SystemAPI, so use SystemAPI to access data, wherever possible.

    SystemState

    You can use SystemState to get data in the following ways:

    • Find out information about worlds
    • Query a system to get information about it
    • Get data which to add as a dependency of the system. This is similar to the way you get data with EntityManager, but with added dependencies.

    World information

    To find out information about worlds, you can use the following properties:

    • state.World
    • state.WorldUnmanaged
    • state.WorldUpdateAllocator
    • state.GlobalSystemVersion
    • state.EntityManager

    System information

    There are several ways in which you can query the status of systems:

    API Description
    state.Dependency
    state.CompleteDependency
    Get or complete dependencies of the system.
    RequireForUpdate
    RequireAnyForUpdate
    ShouldRunSystem
    Enabled
    Determine when a system needs to run.
    state.SystemHandle Get a system’s handle.
    state.LastSystemVersion Get a system’s version number.
    state.DebugName Get a system’s debug name.

    Dependency data

    To get methods which you can add as a dependency of the system, you can use:

    API Description
    GetEntityQuery Gets a query.

    Note: EntityQueryBuilder.Build is the preferred method to get queries and you should use this method wherever possible.
    GetBufferLookup
    GetComponentLookup
    GetEntityStorageInfoLookup
    Get lookups.
    GetComponentTypeHandle
    GetBufferTypeHandle
    GetEntityTypeHandle
    GetSharedComponentTypeHandle
    GetDynamicComponentTypeHandle
    GetDynamicSharedComponentTypeHandle
    Get type handles.

    These methods all add dependencies to the given type. For example, if you call state.GetComponentTypeHandle<MyComp>(isReadOnly: true), it adds a dependency of MyComp to be readable. This means that state.Dependency includes all earlier systems' state.Dependency for the systems which write to MyComp. GetEntityQuery has the same functionality for every component in the query, while the lookup methods add a dependency of the type.

    SystemBase

    All the methods in SystemState are available in SystemBase, and they're prefixed with this. rather than state.

    SystemAPI

    SystemAPI is a class that provides caching and utility methods for accessing data in an entity's world. It works in non-static methods in SystemBase and non-static methods in ISystem that take ref SystemState as a parameter. Because you can directly use these methods in Update, there's no runtime cost to using SystemAPI, so use SystemAPI to access data, wherever possible.

    For more information, refer to the SystemAPI overview documentation.

    Additional resources

    • SystemState API documentation
    • Systems comparison
    • SystemAPI overview
    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)