Exemplo n.º 1
0
        public void IncrementalConversionPerformance_CreateGameObjects([Values(1000)] int n)
        {
            InitializeIncrementalConversion();
            var reconvert = new NativeArray <int>(n, Allocator.TempJob);
            var args      = new IncrementalConversionBatch
            {
                ReconvertHierarchyInstanceIds = reconvert,
            };

            args.EnsureFullyInitialized();
            var objs = new List <GameObject>();

            Measure.Method(() =>
            {
                GameObjectConversionUtility.ConvertIncremental(ConversionWorld, ConversionFlags, ref args);
            }).SetUp(() =>
            {
                foreach (var go in objs)
                {
                    Object.DestroyImmediate(go);
                }
                SwapDeleteAndReconvert(ref args);
                GameObjectConversionUtility.ConvertIncremental(ConversionWorld, ConversionFlags, ref args);
                for (int i = 0; i < n; i++)
                {
                    var obj = _Objects.CreateGameObject();
                    objs.Add(obj);
                    reconvert[i] = obj.GetInstanceID();
                }

                SwapDeleteAndReconvert(ref args);
            }).MeasurementCount(30).Run();
            args.Dispose();
        }
        public void IncrementalConversion_ChangeOneObject_OnlyChangesThatObject()
        {
            var root  = _Objects.CreateGameObject("Root");
            var child = _Objects.CreateGameObject("Child");

            child.transform.SetParent(root.transform);

            InitializeIncrementalConversion();

            {
                var args = new IncrementalConversionBatch
                {
                    ChangedInstanceIds = new NativeArray <int>(new[] { root.GetInstanceID() }, Allocator.TempJob),
                };
                args.EnsureFullyInitialized();
                GameObjectConversionUtility.ConvertIncremental(ConversionWorld, ConversionFlags, ref args);
                args.Dispose();
            }
            CollectionAssert.AreEquivalent(InterceptConvertedGameObjects.GameObjectsConverted, new [] { root });

            {
                var args = new IncrementalConversionBatch
                {
                    ChangedInstanceIds = new NativeArray <int>(new[] { child.GetInstanceID() }, Allocator.TempJob)
                };
                args.EnsureFullyInitialized();
                GameObjectConversionUtility.ConvertIncremental(ConversionWorld, ConversionFlags, ref args);
                args.Dispose();
            }
            CollectionAssert.AreEquivalent(InterceptConvertedGameObjects.GameObjectsConverted, new [] { child });
        }
        public void IncrementalConversion_WhenChangingTransformWithoutDependency_DoesNotCauseReconversion()
        {
            var root  = _Objects.CreateGameObject("Root");
            var child = _Objects.CreateGameObject("Child");
            var a     = child.AddComponent <DependsOnTransformTestAuthoring>();

            a.Dependency            = root.transform;
            a.SkipDependency        = true;
            root.transform.position = new Vector3(0, 0, 0);
            child.transform.SetParent(root.transform);
            InitializeIncrementalConversion();

            // change the parent's position
            root.transform.position = new Vector3(0, 1, 2);
            var args = new IncrementalConversionBatch
            {
                ChangedComponents = new List <Component> {
                    root.transform
                }
            };

            args.EnsureFullyInitialized();
            GameObjectConversionUtility.ConvertIncremental(ConversionWorld, ConversionFlags, ref args);
            args.Dispose();

            // because there is no dependency on the transform of the child, we do not reconvert it and have invalid
            // data
            var t = DestinationWorld.EntityManager.CreateEntityQuery(typeof(DependsOnTransformTestAuthoring.Component))
                    .GetSingleton <DependsOnTransformTestAuthoring.Component>();

            Assert.AreNotEqual(t.LocalToWorld, child.transform.localToWorldMatrix);
        }
        public void IncrementalConversion_ConvertedEntitiesAccessor_ReturnsAllEntities()
        {
            var root = _Objects.CreateGameObject("Root");

            InitializeIncrementalConversion();

            {
                var args = new IncrementalConversionBatch
                {
                    ChangedInstanceIds = new NativeArray <int>(new[] { root.GetInstanceID() }, Allocator.TempJob),
                };
                args.EnsureFullyInitialized();
                GameObjectConversionUtility.ConvertIncremental(ConversionWorld, ConversionFlags, ref args);
                args.Dispose();
            }
            CollectionAssert.AreEquivalent(InterceptConvertedGameObjects.GameObjectsConverted, new [] { root });
        }
        public void IncrementalConversion_WhenAddingNewGameObjectToSubScene_MatchesFullConversion()
        {
            InitializeIncrementalConversion();
            var go   = _Objects.CreateGameObject("Hello");
            var args = new IncrementalConversionBatch
            {
                ReconvertHierarchyInstanceIds = new NativeArray <int>(new[] { go.GetInstanceID() }, Allocator.TempJob),
                ChangedComponents             = new List <Component> {
                    go.transform
                }
            };

            args.EnsureFullyInitialized();
            GameObjectConversionUtility.ConvertIncremental(ConversionWorld, ConversionFlags, ref args);
            args.Dispose();
            CheckAgainstFullConversion(DestinationWorld);
        }
        public void IncrementalConversion_NoChanges_DoesNotCauseReconversion()
        {
            for (int i = 0; i < 10; i++)
            {
                _Objects.CreateGameObject("Hello" + i);
            }
            InitializeIncrementalConversion();

            var args = new IncrementalConversionBatch();

            args.EnsureFullyInitialized();

            // this is necessary: if nothing is updated, the interception system never updates and we never clear the
            // list.
            InterceptConvertedGameObjects.GameObjectsConverted.Clear();
            GameObjectConversionUtility.ConvertIncremental(ConversionWorld, ConversionFlags, ref args);
            args.Dispose();

            Assert.IsEmpty(InterceptConvertedGameObjects.GameObjectsConverted);
        }