UnityのDOTSってなんだろう?

今回はUnityのDOTSとは何か?を見ていきたいと思います。

最後に記載している参考サイトを見て自分なりに解釈しただけの内容なので、正確なところはそちらをご覧ください。(^_^;)

UnityのDOTSとはData-Oriented Technology Stackの略で、データ指向型のテクノロジースタックです。

Unityで現在主流なゲームの作り方はオブジェクト指向型で、ゲームオブジェクトにコンポーネント(スクリプトを含む)を取り付けてオブジェクト単位でプログラミングをしてゲームを作成しています。

ですが、データ指向型はデータと処理を分けて考えプログラミングを行う方法です。

データと処理を分ける事でメモリに最適にデータを入れる事が出来たり、オブジェクト指向のように余分なデータをゲームオブジェクト毎に持つ必要がなくなり、さらに異なるデータ型を持つことによってメモリにバラバラに入ることがなくなりアクセス処理が早くなります。

DOTSはUnityのデータ指向型機能の集合体です。

DOTSの各パッケージを使うとマルチコアプロセッサを利用してデータ処理を並列化し、Unityプロジェクトのパフォーマンスを向上させることができます。

とは言え、DOTS関連のパッケージはまだプレビュー版が多く開発段階です。

ちなみに2020/12/14時点でのDOTS関連のパッケージ(一部)の最新バージョンは以下の通りとなってます。

ECS-0.16.0(データ指向型のゲーム作りの基盤)
Jobs-0.7(ECSで使用するコアUnityジョブシステム)
Burst-1.5.0(最適化コンパイラ)
Hybrid Renderer-0.8(エンティティの描画レンダラー)
Unity NetCode-0.5.0(ECSを基盤としたマルチプレイヤーゲーム作成のサーバーモデル)
Unity Physics-0.5.1(DOTSを使用した空間クエリシステム、衝突関連のパッケージ)
DSPGraph Audio Framework-0.1.0(オーディオ関連のパッケージ)

正式版となるまではまだ時間がかかりそうですね。

スポンサーリンク

DOTSの機能

データ指向のゲームを作成する為の主なパッケージをいくつか見てみます。

個々の使い方についてはまた別の記事で出来たらと思います。(._.)

C# Job System

C# Job Systemを使うと安全なマルチスレッドコードプログラミングが出来ます。

多くのゲームオブジェクトを一括で処理する時に他のスレッドを使って並列に処理する事が出来ます。

並列処理のスクリプト作りに慣れていなくてエラーを発生する可能性があったとしてもUnityがエラーとして指摘してくれるので怖がらすにスクリプトを組むことが出来ます。

UnityのC# Job SystemとBurst Compilerを使ってみる
UnityのC# Job Systemを使ってマルチスレッドコードを書き、Burst Compilerを使ってプラットフォームに最適化したコンパイルを行ってみます。

ECS(Entity Component System)

ECS(Entity Component System)はデータ指向型でプログラミングをすることを助けてくれる機能です。

Entityはどのデータが一緒に属しているかを表す物です。
ComponentはPositionやRotation等の個々のデータです。
Systemはデータを現在の状態から次の状態へと変更する処理をします。つまり操作をします。

Entityはゲームオブジェクトと似ていますが、実際にはそのデータが属するIDという感じです。

UnityのECSを使ってデータ指向型のゲーム作りをしてみる
UnityのECS(Entity Component System)を使ってデータ指向型でスクリプトを作成しシンプルなCubeの動きを作成してみます。

Burst Compiler

Burst Compilerでプラットフォームに最適化したコンパイルを行ってくれます。

その他にもパッケージは用意されています。

DOTS パッケージ | Unity
Unity の Data-Oriented Technology Stack(DOTS)は、マルチコアプロセッサをフルに活用し、エンティティ、Unity NetCode、DOTS エディター、Burst コンパイラーなどのパッケージが含まれます。

パッケージのインストール方法

DOTSの各パッケージをインストールしてみましょう。

現在DOTSの各パッケージはほとんどがプレビュー版なので既存のプロジェクトで試すのではなく新しいプロジェクトを作成しそこに必要なパッケージをインポートして使うと良いと思います。

Unity2019より前のバージョンだとPackage ManagerのAdvancedとなっている部分を押し、Show preview packagesにチェックを入れるとインポート出来ます。

ただし、Unity2020.1以降?のUnityの場合はPackage Managerでプレビュー版が表示されるようにし、パッケージの種類をUnity RegistryにしてもDOTSのプレビュー版の各パッケージが表示されないので特別なやり方を行う必要があります。

今回は試しにECSパッケージをインストールしてみます。

まずはUnityエディターのメニューからWindow→Package Managerを開き+からAdd package from git URL…を押します。

表示されないプレビューパッケージをインストールするやり方

出てきた入力欄にパッケージ名とバージョンを指定します。

パッケージ名とバージョン情報を入力してインストール

指定するパッケージ名は

プレビューパッケージ - Unity マニュアル

上のページのcom.unity.パッケージ名という部分までを@の前に入力し、その後はバージョン情報なのでインストールしたいバージョンをマニュアルのページから調べ入力します。

他のインストール方法は以下のサイトで確認出来ます。

Installing hidden packages | DP-701: Installation instructions for hidden packages | 0.1.0-preview

終わりに

Unityでは今後データ指向型の考え方が主流?(オプション的なものかも?)になっていくようです。

ただ今までのオブジェクト指向型でゲームが作れなくなるわけではなくサポートを続けるとあちこちに書いてありました(Unity公式動画やUnity Learn内の文章など)。

今までの作り方に慣れているわたくしみたいな人にとっては非常にありがたいです。(´Д`)

ゲーム作り初心者でも使えるのがUnityの長所だと思うのでオブジェクト指向型の作り方がなくなるということはないとは思いますが・・・、思いたいです。

正直、現時点でデータ指向型のプログラミングは難しいのか自分に合っていないのか理解が進みません・・・(^_^;)

なんだかんだ言っても使っているうちに慣れるかなとは思います。

各パッケージもプレビュー版な為か色々変わっているようなので、DOTSを勉強しつつ、少しずつ取り入れる事が出来たらいいなと思います。

参考サイト

UnityBlog-DOTS: Entity Component System-

DOTS

UnityLearn-What is DOTS and why is it important?-

タイトルとURLをコピーしました