読者です 読者をやめる 読者になる 読者になる

GameProgrammar's Night

ゲームプログラム系の覚え書き

UE4 BPで2次元配列を実現する

 BPは使えるデータ構造が少なく1次元配列しか使えません。1次元配列だけでも組むこと自体はもちろん可能ですが、せめて2次元配列ぐらいは欲しい所です。
 というわけで、BPで2次元配列を扱うためのTIPSを紹介します。

1次元配列を2次元配列のように扱うインデックス計算をする

 配列のインデックス計算を工夫して、実体は1次元配列でも2次元配列のようにアクセスできるようにします。
 2次元配列として扱いたい配列に対して、以下のようなマクロを用意します。

f:id:katze_7514:20160625131401j:plain

 2次元配列にアクセスするための2つのインデックスと配列あたりのサイズを受け取って、実際に格納されているインデックスを計算します。
 これを使って

f:id:katze_7514:20160625145450j:plain

 のように使います。疑似コードで書くと

float f = FloatArray[0][2];

のような感じになっています。

 この形で2次元配列を使う時は、AddやRemoveを使うとインデックスがズレてしまうので使うことはできません。必ずSetItemArrayElemノードを使ってインデックスを使用してアクセスするようにしてください。SetItemArrayElemを利用した専用のAdd/Removeマクロを作ると良いと思います。

BP構造体を利用する

  • 配列の配列は作れない
  • 構造体の配列は作れる
  • 構造体のメンバーに配列を作ることはできる

以上のことより、構造体を介すことて簡単に2次元以上の配列を作ることができます。

 配列をメンバーにした構造体を作ります。 
f:id:katze_7514:20160625140501j:plain

 その構造体を配列にします。
f:id:katze_7514:20160625140630j:plain

 二次元配列の完成です。アクセスは以下の通り

f:id:katze_7514:20160625140954j:plain

 ゲームのパラメータを扱うならば、構造体に名前も付けられますし、こちらの方が優れているかもしれません。
 状況に応じて使い分けてみてください。

まとめ

 2次元配列の実現の仕方でした。これらの話を拡張することで多次元配列を作ることも可能です。
 それにしても、BPのデータ構造の貧弱さは、本当にどうにかして欲しい所です……。Mapのエディタ対応はよ!