コード例 #1
0
        public void IJobChunk_Run_WorksWithMultipleChunks()
        {
            var archetype = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestData2), typeof(EcsTestSharedComp));
            var group     = m_Manager.CreateEntityQuery(new EntityQueryDesc
            {
                Any  = Array.Empty <ComponentType>(),
                None = Array.Empty <ComponentType>(),
                All  = new ComponentType[] { typeof(EcsTestData), typeof(EcsTestData2) }
            });

            const int entityCount = 10;
            var       entities    = new NativeArray <Entity>(entityCount, Allocator.Temp);

            m_Manager.CreateEntity(archetype, entities);

            for (int i = 0; i < entityCount; ++i)
            {
                m_Manager.SetSharedComponentData(entities[i], new EcsTestSharedComp(i));
            }

            var job = new ProcessChunks
            {
                ecsTestType = m_Manager.GetArchetypeChunkComponentType <EcsTestData>(false)
            };

            job.Run(group);

            for (int i = 0; i < entityCount; ++i)
            {
                Assert.AreEqual(5, m_Manager.GetComponentData <EcsTestData>(entities[i]).value);
            }

            entities.Dispose();
        }
コード例 #2
0
        public void IJobChunkProcess()
        {
            var archetype = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestData2));
            var group     = m_Manager.CreateEntityQuery(new EntityQueryDesc
            {
                Any  = Array.Empty <ComponentType>(),
                None = Array.Empty <ComponentType>(),
                All  = new ComponentType[] { typeof(EcsTestData), typeof(EcsTestData2) }
            });

            var entity = m_Manager.CreateEntity(archetype);
            var job    = new ProcessChunks
            {
                ecsTestType = m_Manager.GetArchetypeChunkComponentType <EcsTestData>(false)
            };

            job.Run(group);

            Assert.AreEqual(5, m_Manager.GetComponentData <EcsTestData>(entity).value);
        }
コード例 #3
0
        public void IJobChunkProcessFiltered()
        {
            var archetype = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestData2), typeof(SharedData1));
            var group     = m_Manager.CreateEntityQuery(typeof(EcsTestData), typeof(EcsTestData2), typeof(SharedData1));

            var entity1 = m_Manager.CreateEntity(archetype);
            var entity2 = m_Manager.CreateEntity(archetype);

            m_Manager.SetSharedComponentData <SharedData1>(entity1, new SharedData1 {
                value = 10
            });
            m_Manager.SetComponentData <EcsTestData>(entity1, new EcsTestData {
                value = 10
            });

            m_Manager.SetSharedComponentData <SharedData1>(entity2, new SharedData1 {
                value = 20
            });
            m_Manager.SetComponentData <EcsTestData>(entity2, new EcsTestData {
                value = 20
            });

            group.SetSharedComponentFilter(new SharedData1 {
                value = 20
            });

            var job = new ProcessChunks
            {
                ecsTestType = m_Manager.GetArchetypeChunkComponentType <EcsTestData>(false)
            };

            job.Schedule(group).Complete();

            Assert.AreEqual(10, m_Manager.GetComponentData <EcsTestData>(entity1).value);
            Assert.AreEqual(5, m_Manager.GetComponentData <EcsTestData>(entity2).value);

            group.Dispose();
        }