CollisionFilter as a separate IComponentData

Oh my…

After DAYS of looking for solution I found your post and it works !!!

For everyone that is interested this is a complete solution I came with using a Request Component that can be added to any entity and a Job System who will apply it:

    using Unity.Burst;
    using Unity.Collections;
    using Unity.Entities;
    using Unity.Jobs;
    using Unity.Physics;
    using Unity.Physics.Extensions;

    public struct RequestPhysicCollisionFilterUpdate : IComponentData
    {
        public uint BelongsTo;
        public uint CollidesWith;
        public int GroupIndex;
    }
    

    [BurstCompile]
    public partial struct ApplyPhysicCollisionFilterUpdateSystem : ISystem
    {

        [BurstCompile]
        public void OnUpdate(ref SystemState state)
        {
            var ecb = new EntityCommandBuffer(Allocator.TempJob);
            var job = new ApplyPhysicCollisionFilterUpdateJob
            {
                ECB = ecb.AsParallelWriter()
            };

            state.Dependency = job.ScheduleParallel(state.Dependency);

            state.Dependency.Complete();
            ecb.Playback(state.EntityManager);
            ecb.Dispose();
        }


        [BurstCompile]
        private partial struct ApplyPhysicCollisionFilterUpdateJob : IJobEntity
        {
            public EntityCommandBuffer.ParallelWriter ECB;

            public void Execute(Entity entity, [EntityIndexInQuery] int entityIndex, ref PhysicsCollider physicsCollider, in RequestPhysicCollisionFilterUpdate request)
            {
                var colliderCopy = physicsCollider.Value.Value.Clone();
                colliderCopy.Value.SetCollisionFilter(new CollisionFilter
                {
                    BelongsTo = request.BelongsTo,
                    CollidesWith = request.CollidesWith,
                    GroupIndex = request.GroupIndex,
                });

                PhysicsCollider newCollider = colliderCopy.AsComponent();
                ECB.SetComponent(entityIndex, entity, newCollider);
                ECB.RemoveComponent<RequestPhysicCollisionFilterUpdate>(entityIndex, entity);
            }
        }
    }