お前誰だよ
そこら辺の大学生です。この記事は勉強するついでに書いた記事なので、間違ってる場所多めでお送りするかもしれません。自信もないけど書いてます。ごめんね。
また、この記事は2022年12月末の公式ドキュメントを頑張って読んで書いてます。
この記事の目的
いろんな記事読んだけど結局何したら理解できるんやみたいな人用。細かいところはいろんなところでまとまってるのでそっちをご確認ください。
Unity DOTSって?
Unityがめっちゃ力入れてるもの。プログラム組むときの設計が大きく変わるが、高速化を実現してるもの。詳しくはほかの記事見て。
ECS, Burst, C# JobSystemの3つを柱としている。
紹介の前に環境
Unity 2022.2.1f1
Entities 1.0.0-pre.15
Burst 1.7.4
ECS(Entity Component System)
メインディッシュ。詳しくは以下略
Burst
コンパイルうんぬんかんぬんだと思ってる。詳しくは以下略
C# JobSystem
C#を早く非同期処理できるぜベイベ!詳しくは以下略。
DOTSやりたい!なにする?
Unityの公式ドキュメント読みましょう。俺は下のSpawn exampleをやると少し理解できました。
Unity Spawn example
Spawn exampleやったという前提で…俺の備忘録
こっからは、Spawn exampleとUnityの従来の開発スタイルをある程度理解してる前提で書きます。
SubScene
GameObjectは、SubSceneに入れるとEntityになります。昔の記事を見てると、従来はSubSceneではなく「Convert to Entity」というスクリプトをアタッチしてEntityになってたっぽい。
オブジェクトにアタッチしてたコンポーネントも再生モード時にEntityに変換されるので、今まで通りの世界の構築方法で大丈夫!
(※コンポーネントの変換は一部対応してないです。対応してないやつは無視されてシーンに反映されるので注意。)
Baker
今までの開発スタイルとECSを連携させるときに使うっぽい。
IJobEntity
C# JobSystemのやつ。俺も詳しくは知らんけど、ECSのSystemで使う用の汎用メソッドを定義するノリで良いと思う。
ISystemとSystemBase
基本的にはISystemを使うべきっぽい。こっちの方が早い。その代わりSystemBaseは便利な機能があるよーって書いてあった。
ISystemのEntityのアクセス方法
foreach(var 変数 in SystemAPI.Query<RefRW</*自作IComponent*/>>)
{
//処理
}
SystemBaseのEntityのアクセス方法
Entities.ForEach( (ref /*自作IComponent*/) =>{
//処理
});
詳しい使い方は、ほかの記事見てね。
以上
Unity DOTSを実際に触る一日目でした。