サンプルとか見て思った感想は、処理部分がHierachyビューの方にあるので初めは戸惑ったが、慣れるとコードが散らからずいい感じになるんじゃないかなと。ECSなのでよく考えてから作る必要があると感じた。
Entity
いわゆるデータ型みたいなもの。GameObjectのパラメータ部分になる。制作物のビルドブロックの単位となる。
何か処理を行いたときは後のコンポーネントを使う。
Entity Group
Tiny Projectに所属するもの。好きな数のEntityをグループ化できるもの。 Entity Groupを使うことで階層構造内のEntityをアレンジできる。 EntityGroupはTransform階層と同じものを用意している。 複数個プロジェクト内には配置できる。 その際は実行時にLoad/Unloadされる。 プロジェクトにはAssetのように格納される。(拡張子は.utdata)プロジェクトに存在するEntityGroupのひとつは必ず、Startup Groupに指定しないといけない。Startup Groupに指定されたEntityGroupは起動時に自動で読み込まれる。 指定されていないものは実行時に要求されたときに読み込まれる。
Components
Components build-inとcustomの2種類ある。 UnityのGameObjectと似てはいるが Entity-Component-System(ECS)パターンで操作されるので違うものである。(ちなみにコメント的な説明文が書けるのはちょっと嬉しい。)
Prefabs
Unityのものと似ているが、すべての機能をカバーしてはいない。カバーしている機能は以下のもの
- Instanceで変更した部分をPrefabに反映する(Inspector上のApply/Revert)
- プロパティ/コンポーネント/Entityの上書き
Building
Playボタンを押すとビルドされ、そのまま動作をブラウザ上で確認できる。単にビルドするときはTiny ProjectのインスペクターにあるBuild Configurationセクションからできる。
Scripting
いくつか種類がある。
ut.ComponentSystem
Entityデータを処理する関数. Entity Filtersと組み合わせて使うと便利。 同じ条件を持つものの共通処理とかに向いている。ut.ComponentSystemを継承することで自由にカスタマイズできる。
Fence
スケジュールシステムによって使われる空っぽのノード。 ut.Sharedに全てのFenceは存在する。現状、以下の種類がある
- InputFence
- UserCodeStart
- UserCodeEnd
- RenderingFence
- PlatformRenderingFence
Entity Filters
与えられた範囲からEntityを抽出したり、フィルタリングする。(Reactive Extensionsっぽい)ut.EntityFilterから派生させることでカスタマイズできる。
Systemがこれを使い処理を行いたいモデルを抽出する。
Behaviours
ut.ComponentBehaviour及び、その派生先のこと。 MonoBehaviourのようなもの。 OnEntityEnable, OnEntityUpdate, OnEntityDisable関数をオーバーライドできる。 が、OnEntityUpdateはut.ComponentSystemで行った方がECS的に最適。ut.executeAfter, ut.executeBeforeデコレータで実行順序を制御できる。
けれど、システムやフェンスの順序を制御すことはできない。
0 件のコメント:
コメントを投稿