Struct ComponentDataFromEntity<T> | Package Manager UI website
docs.unity3d.com
    Show / Hide Table of Contents

    Struct ComponentDataFromEntity<T>

    A NativeContainer that provides access to all instances of components of type T, indexed by Entity.

    Namespace: Unity.Entities
    Syntax
    public struct ComponentDataFromEntity<T>
        where T : struct, IComponentData
    Type Parameters
    Name Description
    T

    The type of IComponentData to access.

    Remarks

    ComponentDataFromEntity is a native container that provides array-like access to components of a specific type. You can use ComponentDataFromEntity to look up data associated with one entity while iterating over a different set of entities. For example, Unity.Transforms stores the Entity object of parent entities in a Parent component and looks up the parent's LocalToWorld matrix using ComponentDataFromEntity&lt;LocalToWorld> when calculating the world positions of child entities.

    To get a ComponentDataFromEntity, call GetComponentDataFromEntity<T>(Boolean).

    Pass a ComponentDataFromEntity container to a Job by defining a public field of the appropriate type in your IJob implementation. You can safely read from ComponentDataFromEntity in any Job, but by default, you cannot write to components in the container in parallel Jobs (including IJobForEach<T0> and IJobChunk). If you know that two instances of a parallel Job can never write to the same index in the container, you can disable the restriction on parallel writing by adding NativeDisableParallelForRestrictionAttribute to the ComponentDataFromEntity field definition in the Job struct.

    If you would like to access an entity's components outside of a job, consider using the EntityManager methods GetComponentData<T>(Entity) and SetComponentData<T>(Entity, T) instead, to avoid the overhead of creating a ComponentDataFromEntity object.

    Properties

    Item[Entity]

    Gets the IComponentData instance of type T for the specified entity.

    Declaration
    public T this[Entity entity] { get; set; }
    Parameters
    Type Name Description
    Entity entity

    The entity.

    Property Value
    Type Description
    T

    An IComponentData type.

    Remarks

    You cannot use ComponentDataFromEntity to get zero-sized IComponentData. Use Exists(Entity) to check whether an entity has the zero-sized component instead.

    Normally, you cannot write to components accessed using a ComponentDataFromEntity instance in a parallel Job. This restriction is in place because multiple threads could write to the same component, leading to a race condition and nondeterministic results. However, when you are certain that your algorithm cannot write to the same component from different threads, you can manually disable this safety check by putting the NativeDisableParallelForRestrictions attribute on the ComponentDataFromEntity field in the Job.

    Exceptions
    Type Condition
    System.ArgumentException

    Thrown if T is zero-size.

    Methods

    Exists(Entity)

    Reports whether the specified Entity instance still refers to a valid entity and that it has a component of type T.

    Declaration
    public bool Exists(Entity entity)
    Parameters
    Type Name Description
    Entity entity

    The entity.

    Returns
    Type Description
    System.Boolean

    True if the entity has a component of type T, and false if it does not. Also returns false if the Entity instance refers to an entity that has been destroyed.

    Remarks

    To report if the provided entity has a component of type T, this function confirms whether the EntityArchetype of the provided entity includes components of type T.

    In This Article
    • Properties
      • Item[Entity]
    • Methods
      • Exists(Entity)
    Back to top
    Copyright © 2023 Unity Technologies — Terms of use
    • Legal
    • Privacy Policy
    • Cookies
    • Do Not Sell or Share My Personal Information
    • Your Privacy Choices (Cookie Settings)
    "Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
    Generated by DocFX on 18 October 2023