UE4 BPで2次元配列を実現する
BPは使えるデータ構造が少なく1次元配列しか使えません。1次元配列だけでも組むこと自体はもちろん可能ですが、せめて2次元配列ぐらいは欲しい所です。
というわけで、BPで2次元配列を扱うためのTIPSを紹介します。
1次元配列を2次元配列のように扱うインデックス計算をする
配列のインデックス計算を工夫して、実体は1次元配列でも2次元配列のようにアクセスできるようにします。
2次元配列として扱いたい配列に対して、以下のようなマクロを用意します。
2次元配列にアクセスするための2つのインデックスと配列あたりのサイズを受け取って、実際に格納されているインデックスを計算します。
これを使って
のように使います。疑似コードで書くと
float f = FloatArray[0][2];
のような感じになっています。
この形で2次元配列を使う時は、AddやRemoveを使うとインデックスがズレてしまうので使うことはできません。必ずSetItemArrayElemノードを使ってインデックスを使用してアクセスするようにしてください。SetItemArrayElemを利用した専用のAdd/Removeマクロを作ると良いと思います。
BP構造体を利用する
- 配列の配列は作れない
- 構造体の配列は作れる
- 構造体のメンバーに配列を作ることはできる
以上のことより、構造体を介すことて簡単に2次元以上の配列を作ることができます。
配列をメンバーにした構造体を作ります。
その構造体を配列にします。
二次元配列の完成です。アクセスは以下の通り
ゲームのパラメータを扱うならば、構造体に名前も付けられますし、こちらの方が優れているかもしれません。
状況に応じて使い分けてみてください。
まとめ
2次元配列の実現の仕方でした。これらの話を拡張することで多次元配列を作ることも可能です。
それにしても、BPのデータ構造の貧弱さは、本当にどうにかして欲しい所です……。Mapのエディタ対応はよ!