環境
Unity2022.2.0b16
2022.2以前
unsafe
を利用する必要があります。
private unsafe void Start() { // NativeArrayの生成 NativeArray<byte> nativeArray = new NativeArray<byte>(100, Allocator.Temp); Span<byte> span = new Span<byte>(nativeArray.GetUnsafePtr(), nativeArray.Length); nativeArray.Dispose(); }
適当に大量に上記のコードをUpdate
で呼び出しても、GC.Alloc
がゼロにできていることが確認できます。

2022.2以降
private void Start() { // NativeArrayの生成 NativeArray<byte> nativeArray = new NativeArray<byte>(100, Allocator.Temp); nativeArray[0] = 100; Debug.Log(nativeArray[0]); // 100 // NativeArrayをRead-write Spanとして受け取る Span<byte> span = nativeArray.AsSpan(); Debug.Log(span[0]); // 100 span[0] = 200; Debug.Log(nativeArray[0]); // 200 // NativeArrayをReadOnly Spanとして受け取る ReadOnlySpan<byte> readonlySpan = nativeArray.AsReadOnlySpan(); Debug.Log(readonlySpan[0]); // 200 nativeArray.Dispose(); }
Unity - Scripting API: Unity.Collections.NativeArray_1.AsSpan
Unity - Scripting API: Unity.Collections.NativeArray_1.AsReadOnlySpan