さけのさかなのブログ

同人ゲーム開発やってます。Unity使ったりする。

【Unity】NativeList自作

概要

 NativeArray、ECSやJobSystemとセットで紹介されることが多いけど、普通の配列との違いとしてGCに負担をかけないので、使えるところは積極的に使っていけばよさげ。

 そうすると可変長となるNativeListも欲しい。が、未実装。てなわけでここでは最小限のものを自分で作ることにする。正式にリリースされたら差し替えよう。

コード

 さしあたりAddClearとインデクサとイテレータがあれば役には立つだろ、という感じでやった。
 (あまり気の利いた機能をつけるとあとで正式版に差し替えるとき面倒が起こりかねねーな、という逃げの姿勢でもある)

 GC軽減を目的とするためにクラスではなく構造体なんだけど、これだとコピーした際に配列を共有したままCountがずれることがあり得るのでちょっと気を付ける必要がある。まあ、メソッド内で使い捨てる作業用バッファとかに使うなら安全なんじゃないでしょうか。

 Unity2018.2.8f1

gist.github.com

ちなみに

 T where : structと書かれているけど、構造体であれば使えるわけではない。

 どうやら構造体のメンバに参照型が含まれてるとダメっぽくて、実行時にnot blittableだかエラーが出る。