Esempio n. 1
0
        public IEnumerator ProcessAnimationCulling()
        {
            // Pre-arrange
            const int GO_COUNT = 3;

            GameObject[] gos   = new GameObject[GO_COUNT];
            Animation[]  anims = new Animation[GO_COUNT];

            for (int i = 0; i < GO_COUNT; i++)
            {
                gos[i]               = new GameObject("Test " + i);
                anims[i]             = gos[i].AddComponent <Animation>();
                anims[i].cullingType = AnimationCullingType.AlwaysAnimate;
            }

            var settings = cullingController.GetSettingsCopy();

            settings.enableAnimationCulling         = true;
            settings.enableAnimationCullingDistance = 15;

            cullingController.SetSettings(settings);

            cullingController.objectsTracker.MarkDirty();
            yield return(cullingController.objectsTracker.PopulateRenderersList());

            // Test #1
            gos[0].transform.position = Vector3.zero;
            gos[1].transform.position = new Vector3(0, 0, 30);
            gos[2].transform.position = new Vector3(0, 0, 10);
            CommonScriptableObjects.playerUnityPosition.Set(Vector3.zero);

            yield return(cullingController.ProcessAnimations());

            Assert.AreEqual(AnimationCullingType.AlwaysAnimate, anims[0].cullingType);
            Assert.AreEqual(AnimationCullingType.BasedOnRenderers, anims[1].cullingType);
            Assert.AreEqual(AnimationCullingType.AlwaysAnimate, anims[2].cullingType);

            // Test #2
            gos[2].transform.position = new Vector3(0, 0, 30);
            CommonScriptableObjects.playerUnityPosition.Set(Vector3.zero);

            yield return(cullingController.ProcessAnimations());

            Assert.AreEqual(AnimationCullingType.BasedOnRenderers, anims[2].cullingType);

            // Test #3
            gos[2].transform.position = new Vector3(0, 0, 10);
            CommonScriptableObjects.playerUnityPosition.Set(Vector3.zero);

            yield return(cullingController.ProcessAnimations());

            // Test #4
            settings.enableAnimationCulling = false;
            CommonScriptableObjects.playerUnityPosition.Set(Vector3.one * 10000);

            for (int i = 0; i < GO_COUNT; i++)
            {
                anims[i].cullingType = AnimationCullingType.AlwaysAnimate;
            }

            cullingController.SetSettings(settings);

            yield return(cullingController.ProcessAnimations());

            for (int i = 0; i < GO_COUNT; i++)
            {
                Assert.AreEqual(AnimationCullingType.AlwaysAnimate, anims[i].cullingType);
            }

            // Annihilate
            for (int i = 0; i < GO_COUNT; i++)
            {
                Object.Destroy(gos[i]);
            }
        }