public IEnumerator CreateAssetAndComponentTotalTime()
        {
            EditorApplication.ExecuteMenuItem("Window/General/Game");
            var graph = MakeTemporaryGraph();

            var spawnerContext = ScriptableObject.CreateInstance <VFXBasicSpawner>();
            var constantRate   = ScriptableObject.CreateInstance <VFXSpawnerConstantRate>();

            // Attach to a valid particle system so that spawner is compiled
            var initContext   = ScriptableObject.CreateInstance <VFXBasicInitialize>();
            var outputContext = ScriptableObject.CreateInstance <VFXPointOutput>();

            spawnerContext.LinkTo(initContext);
            initContext.LinkTo(outputContext);

            var slotRate  = constantRate.GetInputSlot(0);
            var totalTime = VFXLibrary.GetOperators().First(o => o.name == VFXExpressionOperation.TotalTime.ToString()).CreateInstance();

            slotRate.Link(totalTime.GetOutputSlot(0));

            spawnerContext.AddChild(constantRate);
            graph.AddChild(spawnerContext);

            graph.RecompileIfNeeded();
            var expressionIndex = graph.FindReducedExpressionIndexFromSlotCPU(slotRate);

            var gameObj      = new GameObject("CreateAssetAndComponentDebugExpressionTest");
            var vfxComponent = gameObj.AddComponent <VisualEffect>();

            vfxComponent.visualEffectAsset = graph.visualEffectResource.asset;

            var cameraObj = new GameObject("CreateAssetAndComponentSpawner_Camera");
            var camera    = cameraObj.AddComponent <Camera>();

            camera.transform.localPosition = Vector3.one;
            camera.transform.LookAt(vfxComponent.transform);

            int maxFrame = 512;

            while (vfxComponent.culled && --maxFrame > 0)
            {
                yield return(null);
            }
            Assert.IsTrue(maxFrame > 0);

            maxFrame = 512;
            while (!(VisualEffectUtility.GetExpressionFloat(vfxComponent, expressionIndex) > 0.01f) && --maxFrame > 0)
            {
                yield return(null);
            }
            Assert.IsTrue(maxFrame > 0);

            UnityEngine.Object.DestroyImmediate(gameObj);
            UnityEngine.Object.DestroyImmediate(cameraObj);
        }
Exemplo n.º 2
0
        public IEnumerator Create_Asset_And_Component_Check_Expected_TotalTime()
        {
            EditorApplication.ExecuteMenuItem("Window/General/Game");
            var graph = MakeTemporaryGraph();

            var spawnerContext = ScriptableObject.CreateInstance <VFXBasicSpawner>();
            var constantRate   = ScriptableObject.CreateInstance <VFXSpawnerConstantRate>();

            // Attach to a valid particle system so that spawner is compiled
            var initContext   = ScriptableObject.CreateInstance <VFXBasicInitialize>();
            var outputContext = ScriptableObject.CreateInstance <VFXPointOutput>();

            graph.AddChild(initContext);
            graph.AddChild(outputContext);
            spawnerContext.LinkTo(initContext);
            initContext.LinkTo(outputContext);

            var    slotRate = constantRate.GetInputSlot(0);
            string opName   = ObjectNames.NicifyVariableName(VFXExpressionOperation.TotalTime.ToString());

            var totalTime = VFXLibrary.GetOperators().First(o => o.name == opName).CreateInstance();

            slotRate.Link(totalTime.GetOutputSlot(0));

            spawnerContext.AddChild(constantRate);
            graph.AddChild(spawnerContext);

            graph.RecompileIfNeeded();
            var expressionIndex = graph.FindReducedExpressionIndexFromSlotCPU(slotRate);

            while (m_gameObject.GetComponent <VisualEffect>() != null)
            {
                UnityEngine.Object.DestroyImmediate(m_gameObject.GetComponent <VisualEffect>());
            }
            var vfxComponent = m_gameObject.AddComponent <VisualEffect>();

            vfxComponent.visualEffectAsset = graph.visualEffectResource.asset;

            int maxFrame = 512;

            while (vfxComponent.culled && --maxFrame > 0)
            {
                yield return(null);
            }
            Assert.IsTrue(maxFrame > 0);

            maxFrame = 512;
            while (!(VisualEffectUtility.GetExpressionFloat(vfxComponent, expressionIndex) > 0.01f) && --maxFrame > 0)
            {
                yield return(null);
            }
            Assert.IsTrue(maxFrame > 0);
        }
Exemplo n.º 3
0
        public IEnumerator Create_Asset_And_Component_Check_Expected_TotalTime()
        {
            yield return(new EnterPlayMode());

            var graph = VFXTestCommon.MakeTemporaryGraph();

            var spawnerContext = ScriptableObject.CreateInstance <VFXBasicSpawner>();
            var constantRate   = ScriptableObject.CreateInstance <VFXSpawnerConstantRate>();

            // Attach to a valid particle system so that spawner is compiled
            var initContext   = ScriptableObject.CreateInstance <VFXBasicInitialize>();
            var outputContext = ScriptableObject.CreateInstance <VFXPointOutput>();

            graph.AddChild(initContext);
            graph.AddChild(outputContext);
            spawnerContext.LinkTo(initContext);
            initContext.LinkTo(outputContext);

            var slotRate  = constantRate.GetInputSlot(0);
            var totalTime = GetTotalTimeOperator().CreateInstance();

            slotRate.Link(totalTime.GetOutputSlot(0));

            spawnerContext.AddChild(constantRate);
            graph.AddChild(spawnerContext);

            AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(graph));
            var expressionIndex = graph.FindReducedExpressionIndexFromSlotCPU(slotRate);

            while (m_gameObject.GetComponent <VisualEffect>() != null)
            {
                UnityEngine.Object.DestroyImmediate(m_gameObject.GetComponent <VisualEffect>());
            }
            var vfxComponent = m_gameObject.AddComponent <VisualEffect>();

            vfxComponent.visualEffectAsset = graph.visualEffectResource.asset;

            int maxFrame = 512;

            while (vfxComponent.culled && --maxFrame > 0)
            {
                yield return(null);
            }
            Assert.IsTrue(maxFrame > 0);

            maxFrame = 512;
            while (!(VisualEffectUtility.GetExpressionFloat(vfxComponent, expressionIndex) > 0.01f) && --maxFrame > 0)
            {
                yield return(null);
            }
            Assert.IsTrue(maxFrame > 0);
            yield return(new ExitPlayMode());
        }