【Unity】Hybrid ECS

Entity Component Systemを使いたいが、Pure ECSの学習コストが高い!
大量なオブジェクトのUpdate()だけスレッドで処理したく、
Hybrid ECSを試しました。( Unity バージョン:2018.2.10f1 )

準備

Scripting Runtime Version 設定

ECS を使うために、.NET4.x に設定する必要があります

Package をインストール

Unityエディタで [Window] -> [Package Manager] を開き [All] タブを選択し
以下Package をインストールする

・Entities (0.0.12-previre.19)

オブジェクトを大量生成する

プレハブを指定して大量なオブジェクトを生成するクラスです。
生成したら座標や向きを設定する
※ECSと関係ないので実装詳細は飛ばしても問題なし!

gist.github.com

動かせるスクリプトを作成する

今までのやり方でオブジェクトを動かせます
gist.github.com

f:id:kou_yeung:20181107165600g:plain
3xFPS ぐらい

Hybrid ECS化

プレハブを選択し Add Component から "Game Object Entity" をアタッチする。
あとは Move.cs を修正する

gist.github.com

ECS にしたが、実行してもあまり差が感じないよね。
原因は更新部分がまだマルチスレッドしていません。

Job で マルチスレッド

IJobParallelForTransformを実装し並列処理を行う。
gist.github.com

f:id:kou_yeung:20181107165316g:plain
5xFPS ぐらいになりました。

最低限のマルチスレッド処理ができました

Unity 従来の使い方でマルチスレッド化できたので
Hybrid ECSはとても手軽で魅力的ですね。

次回:
【Unity】Hybrid ECS + MeshInstanceRenderer - 浮遊島