JobComponentSystem を使っているときに、OnUpdateが一回だけ呼ばれて以降のループが止まる という現象に悩まされたのですが、どうも仕様っぽい動作だったのでメモ。
下記の Unityドキュメントのサンプル より簡略なシステムを使っていたところ、上画像のように Entity Debugger 上でシステムが動作していない表示になっています。
ログを仕込むと OnUpdate が一度だけ呼ばれてそれ以降出力されないという状態でした。
・確認環境
Unity2019.2.6
ECS 0.1.1
public class GarbageComponentSystem : JobComponentSystem { protected override JobHandle OnUpdate(JobHandle inputDeps) { var job = new GarbageJob() { }; JobHandle handle = job.Schedule(this, inputDeps); return handle; } [BurstCompile] struct GarbageJob : IJobForEach<Translation> { public void Execute(ref Translation translation) { } } }
で結論ですが、どうも JobComponentSystem の OnUpdate で投入したジョブの処理対象となるEntityが存在しないと、
次回ループからシステムが止まる らしい。
上のソースを使って not run の状態から、Translation ありの Entityを作成すると、元気にシステムが動き出します。
しかもデフォルトWorldでは発生せず 自作 World のみ で発生しているのですが原因は不明。
ということで、毎フレーム必ず実行したい処理は 横着してJobComponentSystemのOnUpdateに入れてはいけません。
別システムに切り出すか他の手を考えましょう ToT