以下の内容はhttps://indie-du.com/entry/2019/10/03/081842より取得しました。


Unity ECS : JobComponentSystem が not run になる場合はEntityの状態を確認しよう

JobComponentSystem を使っているときに、OnUpdateが一回だけ呼ばれて以降のループが止まる という現象に悩まされたのですが、どうも仕様っぽい動作だったのでメモ。

f:id:sugar_affordance:20191003080051p:plain
not run になっている

下記の 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を作成すると、元気にシステムが動き出します。

f:id:sugar_affordance:20191003081450p:plain
Entityを得たJobComponentSystem

しかもデフォルトWorldでは発生せず 自作 World のみ で発生しているのですが原因は不明。

ということで、毎フレーム必ず実行したい処理は 横着してJobComponentSystemのOnUpdateに入れてはいけません。
別システムに切り出すか他の手を考えましょう ToT




以上の内容はhttps://indie-du.com/entry/2019/10/03/081842より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14