Dynamic Buffers
DynamicBuffer是一種支援可變大小的彈性buffer component data,可以存放一定數量的元素資料。如果空間不足會配置設定堆記憶體塊來擴充。
該方法的記憶體管理是自動的。DynamicBuffer的記憶體是由EntityManager管理的,是以當DynamicBuffer component删除時,其記憶體也會被釋放。
Fixed Array 固定長度數組已經被Dynamicbuffer替代并移除。
Declaring Buffer Element Types
聲明元素類型
需要用指定的類型來聲明buffer:
// This describes the number of buffer elements that should be reserved
// in chunk data for each instance of a buffer. In this case, 8 integers
// will be reserved (32 bytes) along with the size of the buffer header
// (currently 16 bytes on 64-bit targets)
[InternalBufferCapacity(8)]
public struct MyBufferElement : IBufferElementData
{
// These implicit conversions are optional, but can help reduce typing.
public static implicit operator int(MyBufferElement e) { return e.Value; }
public static implicit operator MyBufferElement(int e) { return new MyBufferElement { Value = e }; }
// Actual value each buffer element will store.
public int Value;
}
以上看起來是定義了一個元素類型,而不是一個buffer,這種設計由2個好處:
通過派生IBufferElementData,我們可以支援更多類型的buffer。而且這些類型可以有更多的資料成員。
我們可以将buffer定義到EntityArchetype原型中,就像一個comopent。
Adding Buffer Types To Entities
添加buffer
調用方法AddBuffer():
利用原型:
Accessing Buffers
有多種方法可以通路buffers,
直接在主線程通路:
基于Entity通路
可以在JobComponentSystem中基于每個entity進行通路
var lookup = GetBufferFromEntity<MyBufferElement>();
var buffer = lookup[myEntity];
buffer.Append(7);
buffer.RemoveAt(0);
Reinterpreting Buffers (Experimental)
Buffer類型強制轉換(實驗特性)
Buffer可以被強制轉換成長度相同的類型的Buffer:
将MyBufferElement類型的Buffer,轉換成int類型。因為它們的長度一緻。
需要注意的是,因為沒有類型檢查,是以轉成float也不會報錯,但是操作資料會産生不可預料的結果。