public override JobHandle ScheduleJobs(JobHandle dependency)
    {
        // 首先,我们将在队列中有内容时Spawn出效果类似于爆炸/毒气的BUFF
        while (DebuffSpawnQueue.Count > 0)
        {

            SpawnDebuff(DebuffSpawnQueue.Dequeue());
        }


        int enemyCount = EnemyManager.Instance.ActiveEnemies.Count;

        // 在此之前需要计算BUFF/持续伤害乘数,放在ScheduleJob中是不必要的..
        _tickJobHandle = dependency; // passthrough if skipped
        if (enemyCount > 0)
        {
            var tickJob = new DebuffTickJob
            {
                EnemyDebuffMask = EnemyManager.Instance.EnemyDebuffMask,
                EnemyBurnDoT = EnemyManager.Instance.EnemyBurnDoT,
                BurnTickRate = DebuffDataHashMap[(int)DebuffType.Burn].TickRate,      // 需要更新处理方式
                DeltaTime   = Time.deltaTime,
                HitQueue    = EnemyManager.Instance.EnemyHitQueue.AsParallelWriter(),
            };
            _tickJobHandle = tickJob.Schedule(enemyCount, 64, dependency);
        }


        // ... Spawn逻辑可以在Update中实现但该函数未实现,所以此处留坑 TODO
        _collisionJobHandle = dependency;
        if (_debuffTransfromAccessArray.length > 0)
        {
            // JobHandle combinedDepedency = JobHandle.CombineDependencies(dependency, _tickJobHandle);
            var collisionJob = new DebuffFormCollisionJob
            {   
                // BUFF
                DebuffPayload = _debuffFormData,
                // // 敌人数据
                EnemySpatialMap         = EnemyManager.Instance.SpatialMap,
                EnemyPositions          = EnemyManager.Instance.EnemyPosition,
                EnemyHitBox             = EnemyManager.Instance.EnemyHitBox,
                CellSize                = EnemyManager.Instance.CellSize,
                HitQueue                = EnemyManager.Instance.EnemyHitQueue.AsParallelWriter(),
                // //
                ElapsedTime             = Time.time,
                DeltaTime               = Time.deltaTime,
                IsDebuffDead            = _isDebuffDead,
                DeadDebuffs             = _isDead.AsParallelWriter()
            };
            _collisionJobHandle = collisionJob.Schedule(_debuffTransfromAccessArray, dependency);
        }


        JobHandle combinedDep = JobHandle.CombineDependencies(
            _tickJobHandle,
            _collisionJobHandle
        );


        return combinedDep;
    }

我在上面使用Jobs来实现一些运算以在多线程(Parallel)环境下进行。具体来说,DebuffManager管理与技能相关的部分,而JobManager管理所有管理这些Job的script的Schedule和Job。DebuffTickJob负责计算敌人每次BUFF的伤害并有依赖项(依赖项有之前完成的数据),它写入Hit.Queue以处理伤害,而DebuffFormCollisionJob(主要是爆炸和其他物理效果BUFF的展示)同样写入Hit_QUEUE进行处理。

但是我的CollitionJob需要等待TickJob来执行,以便正常工作,并且出现以下提示:“尝试在HitQueue中新建一个并行队列。”但这并不是一个问题,因为这两个任务之间没有任何关联,应该并行处理HitQueue。