前回の記事の続きです。
前回の記事では、データ指向のなにがいいのかを考えました。
今回の記事では、Unityにおけるデータ指向の考え方を調べてみた日記です。
噂で聞いたのは、
大量の同じ計算をするオブジェクトが登場するときに、データ指向は向いてる
ということ。
なぜ、そのような状況の時にデータ指向が向いてるんでしょう?調べよう。
#Entity Component System(ECS)の仕組み
UnityにおけるECSとは、C#上で実装されたデータ指向設計のことを指します。
EntityとComponentという言葉が何を指すのか、、、
Entityはコンテナを表し、ComponentはEntityに格納するデータ(処理は含まない)を表します。
Unityで例えると、
Entity=GameObject
Component=Monobehaviour
と考えると頭にスッと入ってきやすいかと思います。
おなじ複数のMonobehaviourを持つGameObjectが大量にあると考えます。
つまり、同じComponentを持つEntityが大量にあるということです。
ですが、データ時には、Componentが連続したデータになっています。
例えば、
Entity1を構成するのはA[0]、B[0]、C[0]
Entity2を構成するのはA[1]、B[1]、C[1]
Entity3を構成するのはA[2]、B[2]、C[2]
ということです。
この状況の時に、データ指向が向いている処理
「大量の同じ計算をするオブジェクトが登場するとき」
をするとします。Entity1~Entity50のComponentAに対してある処理を行うとき、
使いたいデータ(ComponentA)が連続して並んでいるので、
キャッシュはメモリから一気にデータを取得(前回の記事参照)できるというわけです。
すでにネット上にあがっている情報をじぶんなりにまとめただけですが、なんとなく良さがわかってきたのでヨシ!