예제 #1
0
    private void Update()
    {
        if (DoOverride)
        {
            if (transitionMode == TransitionManager.TransitionMode.Particle)
            {
                float timePassed = Time.timeSinceLevelLoad - StartTime;
                ComputeShader.SetFloat("deltaTime", Time.deltaTime);
                ComputeShader.SetFloat("direction", direction);
                ComputeShader.SetFloat("timePassedSinceStart", timePassed);
                if (state == 0)
                {
                    ComputeShader.Dispatch(ComputeShader.FindKernel("CSMoveParticles1"), particleCount / 256, 1, 1);
                    if (true)
                    {
                        state = 1;
                    }
                }
                else if (state == 1)
                {
                    ComputeShader.Dispatch(ComputeShader.FindKernel("CSMoveParticles2"), particleCount / 256, 1, 1);
                    if (timePassed >= timeToCicle)
                    {
                        ComputeShader.SetFloat("inStart", timeToCicle);
                        ComputeShader.SetFloat("inEnd", timeToCicle + timeInCirlce);
                        state = 2;
                    }
                }
                else if (state == 2)
                {
                    ComputeShader.Dispatch(ComputeShader.FindKernel("CSMoveParticles3"), particleCount / 256, 1, 1);
                    if (timePassed >= timeToCicle + timeInCirlce)
                    {
                        ComputeShader.SetFloat("backStartTime", timeToCicle + timeInCirlce);
                        ComputeShader.SetFloat("backEndTime", timeToCicle + timeInCirlce + timeToEndPos);
                        ComputeShader.Dispatch(ComputeShader.FindKernel("CSMoveParticlesSetOrigin"), particleCount / 256, 1, 1);
                        state = 3;
                    }
                }
                else if (state == 3)
                {
                    ComputeShader.Dispatch(ComputeShader.FindKernel("CSMoveParticles4"), particleCount / 256, 1, 1);
                    if (timePassed >= timeToCicle + timeInCirlce + timeToEndPos)
                    {
                        transitionManager.EndPhaseParticle();
                    }
                }

                //ComputeShader.Dispatch(ComputeShader.FindKernel("CSMoveParticles1"), particleCount / 256, 1, 1);
            }
        }
    }