2019年1月7日月曜日

Unity Project Tinyのドキュメントを読んだ。

前々から興味があったので、ドキュメントを読んで軽くまとめる。

サンプルとか見て思った感想は、処理部分が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デコレータで実行順序を制御できる。
けれど、システムやフェンスの順序を制御すことはできない。

Entity Command Buffers:(Advanced Topics Low-level)

EntityCommandBufferを使うことでコマンドを変更したものを作ることができ、あとでWorldにコミットすることができる。 コマンドバッファにはentityの作成/削除、コンポーネントの追加/編集/削除が記録できる。

tsconfig.json:(Advanced Topics)

Unityのプロジェクトフォルダーに作られる(Tinyプロジェクトのフォルダーではないので注意) 変更したいときは、tsconfig.override.jsonをTinyプロジェクトがあるフォルダーに作る必要がある。 tsconfig.override.jsonとtsconfig.jsonの内容をマージしたものが最終的には使われる。

0 件のコメント:

コメントを投稿