docs.unity3d.com
Search Results for

    Show / Hide Table of Contents

    Struct DynamicBuffer<T>

    An array-like data structure that can be used as a component.

    Implements
    IQueryTypeParameter
    INativeList<T>
    IIndexable<T>
    Namespace: Unity.Entities
    Assembly: Unity.Entities.dll
    Syntax
    [NativeContainer]
    public struct DynamicBuffer<T> : IQueryTypeParameter, INativeList<T>, IIndexable<T> where T : unmanaged
    Type Parameters
    Name Description
    T

    The data type stored in the buffer. Must be a value type.

    Examples
    [InternalBufferCapacity(8)]
    public struct FloatBufferElement : IBufferElementData
    {
        // Actual value each buffer element will store.
        public float Value;
    
        // The following implicit conversions are optional, but can be convenient.
        public static implicit operator float(FloatBufferElement e)
        {
            return e.Value;
        }
    
        public static implicit operator FloatBufferElement(float e)
        {
            return new FloatBufferElement { Value = e };
        }
    }
    
    public partial class DynamicBufferExample : SystemBase
    {
        protected override void OnUpdate()
        {
            float sum = 0;
    
            Entities.ForEach((DynamicBuffer<FloatBufferElement> buffer) =>
            {
                for (int i = 0; i < buffer.Length; i++)
                {
                    sum += buffer[i].Value;
                }
            }).Run();
    
            Debug.Log("Sum of all buffers: " + sum);
        }
    }

    Properties

    Name Description
    Capacity

    The number of elements the buffer can hold.

    IsCreated

    Whether the memory for this dynamic buffer has been allocated.

    IsEmpty

    Reports whether container is empty.

    this[int]

    Array-like indexing operator.

    Length

    The number of elements the buffer holds.

    Methods

    Name Description
    Add(T)

    Adds an element to the end of the buffer, resizing as necessary.

    AddRange(NativeArray<T>)

    Adds all the elements from newElems to the end of the buffer, resizing as necessary.

    AsNativeArray()

    Return a native array that aliases the original buffer contents.

    Clear()

    Sets the buffer length to zero.

    CopyFrom(NativeArray<T>)

    Copies all the elements from the specified native array into this dynamic buffer.

    CopyFrom(NativeSlice<T>)

    Copies all the elements from the specified native slice into this dynamic buffer.

    CopyFrom(DynamicBuffer<T>)

    Copies all the elements from another dynamic buffer.

    CopyFrom(T[])

    Copies all the elements from an array.

    ElementAt(int)

    Gets the reference to the element at the given index.

    EnsureCapacity(int)

    Ensures that the buffer has at least the specified capacity.

    GetEnumerator()

    Provides an enumerator for iterating over the buffer elements.

    GetUnsafePtr()

    Gets an unsafe read/write pointer to the contents of the buffer.

    GetUnsafeReadOnlyPtr()

    Gets an unsafe read-only pointer to the contents of the buffer.

    Insert(int, T)

    Inserts an element at the specified index, resizing as necessary.

    Reinterpret<U>()

    Returns a dynamic buffer of a different type, pointing to the same buffer memory.

    RemoveAt(int)

    Removes the element at the specified index.

    RemoveAtSwapBack(int)

    Removes the element at the specified index and swaps the last element into its place. This is more efficient than moving all elements following the removed element, but does change the order of elements in the buffer.

    RemoveRange(int, int)

    Removes the specified number of elements, starting with the element at the specified index.

    RemoveRangeSwapBack(int, int)

    Removes the specified number of elements, starting with the element at the specified index. It replaces the elements that were removed with a range of elements from the back of the buffer. This is more efficient than moving all elements following the removed elements, but does change the order of elements in the buffer.

    Resize(int, NativeArrayOptions)

    Sets the length of this buffer, increasing the capacity if necessary.

    ResizeUninitialized(int)

    Sets the length of this buffer, increasing the capacity if necessary.

    ToNativeArray(AllocatorHandle)

    Copies the buffer into a new native array.

    TrimExcess()

    Removes any excess capacity in the buffer.


    Did you find this page useful? Please give it a rating:

    Thanks for rating this page!

    Report a problem on this page

    What kind of problem would you like to report?

    • This page needs code samples
    • Code samples do not work
    • Information is missing
    • Information is incorrect
    • Information is unclear or confusing
    • There is a spelling/grammar error on this page
    • Something else

    Thanks for letting us know! This page has been marked for review based on your feedback.

    If you have time, you can provide more information to help us fix the problem faster.

    Provide more information

    You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:

    You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:

    You've told us there is information missing from this page. Please tell us more about what's missing:

    You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:

    You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:

    You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:

    You've told us this page has a problem. Please tell us more about what's wrong:

    Thank you for helping to make the Unity documentation better!

    Your feedback has been submitted as a ticket for our documentation team to review.

    We are not able to reply to every ticket submitted.

    In This Article
    • Properties
    • Methods
    Back to top
    Copyright © 2025 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)