search
LoginSignup
3
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

データ指向なんもわからん!(②UnityのECS編)

前回の記事の続きです。

前回の記事では、データ指向のなにがいいのかを考えました。
今回の記事では、Unityにおけるデータ指向の考え方を調べてみた日記です。

噂で聞いたのは、
大量の同じ計算をするオブジェクトが登場するときに、データ指向は向いてる
ということ。

なぜ、そのような状況の時にデータ指向が向いてるんでしょう?調べよう。

Entity Component System(ECS)の仕組み

UnityにおけるECSとは、C#上で実装されたデータ指向設計のことを指します。

EntityとComponentという言葉が何を指すのか、、、
Entityはコンテナを表し、ComponentはEntityに格納するデータ(処理は含まない)を表します。
Unityで例えると、

Entity=GameObject
Component=Monobehaviour

と考えると頭にスッと入ってきやすいかと思います。

おなじ複数のMonobehaviourを持つGameObjectが大量にあると考えます。
つまり、同じComponentを持つEntityが大量にあるということです。

image.png

ですが、データ時には、Componentが連続したデータになっています。
image.png

例えば、
Entity1を構成するのはA[0]、B[0]、C[0]
Entity2を構成するのはA[1]、B[1]、C[1]
Entity3を構成するのはA[2]、B[2]、C[2]
ということです。

実際にメモリ内ではこのような形でデータが配置されています。
image.png

この状況の時に、データ指向が向いている処理
大量の同じ計算をするオブジェクトが登場するとき
をするとします。Entity1~Entity50のComponentAに対してある処理を行うとき、
使いたいデータ(ComponentA)が連続して並んでいるので、
キャッシュはメモリから一気にデータを取得(前回の記事参照)できるというわけです。

image.png

すでにネット上にあがっている情報をじぶんなりにまとめただけですが、なんとなく良さがわかってきたのでヨシ!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3
Help us understand the problem. What are the problem?