public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        m_TrackBinding = playerData as Light;

        if (m_TrackBinding == null)
        {
            return;
        }

        if (!m_FirstFrameHappened)
        {
            // Save default values
            m_DefaultColor           = m_TrackBinding.color;
            m_DefaultIntensity       = m_TrackBinding.intensity;
            m_DefaultBounceIntensity = m_TrackBinding.bounceIntensity;
            m_DefaultRange           = m_TrackBinding.range;
            m_FirstFrameHappened     = true;
        }

        // clip ¸öÊý
        int inputCount = playable.GetInputCount();


        // temporary values
        Color blendedColor           = Color.clear;
        float blendedIntensity       = 0f;
        float blendedBounceIntensity = 0f;
        float blendedRange           = 0f;
        float totalWeight            = 0f;
        float greatestWeight         = 0f;
        int   currentInputs          = 0;

        for (int i = 0; i < inputCount; i++)
        {
            float inputWeight = playable.GetInputWeight(i);
            ScriptPlayable <LightControlBehaviour> inputPlayable = (ScriptPlayable <LightControlBehaviour>)playable.GetInput(i);
            LightControlBehaviour input = inputPlayable.GetBehaviour();

            blendedColor           += input.color * inputWeight;
            blendedIntensity       += input.intensity * inputWeight;
            blendedBounceIntensity += input.bounceIntensity * inputWeight;
            blendedRange           += input.range * inputWeight;
            totalWeight            += inputWeight;

            if (inputWeight > greatestWeight)
            {
                greatestWeight = inputWeight;
            }

            if (!Mathf.Approximately(inputWeight, 0f))
            {
                currentInputs++;
            }
        }

        m_TrackBinding.color           = blendedColor + m_DefaultColor * (1f - totalWeight);
        m_TrackBinding.intensity       = blendedIntensity + m_DefaultIntensity * (1f - totalWeight);
        m_TrackBinding.bounceIntensity = blendedBounceIntensity + m_DefaultBounceIntensity * (1f - totalWeight);
        m_TrackBinding.range           = blendedRange + m_DefaultRange * (1f - totalWeight);
    }
    // NOTE: This function is called at runtime and edit time.  Keep that in mind when setting the values of properties.
    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        Light trackBinding   = playerData as Light;
        float finalIntensity = 0f;
        Color finalColor     = Color.black;

        if (!trackBinding)
        {
            return;
        }

        int inputCount = playable.GetInputCount(); //get the number of all clips on this track

        for (int i = 0; i < inputCount; i++)
        {
            float inputWeight = playable.GetInputWeight(i);
            ScriptPlayable <LightControlBehaviour> inputPlayable = (ScriptPlayable <LightControlBehaviour>)playable.GetInput(i);
            LightControlBehaviour input = inputPlayable.GetBehaviour();

            // Use the above variables to process each frame of this playable.
            finalIntensity += input.intensity * inputWeight;
            finalColor     += input.color * inputWeight;
        }

        //assign the result to the bound object
        trackBinding.intensity = finalIntensity;
        trackBinding.color     = finalColor;
    }
Exemplo n.º 3
0
    public override Playable CreatePlayable(PlayableGraph graph, GameObject owner)
    {
        // 把逻辑和资源联系起来
        var playable = ScriptPlayable <LightControlBehaviour> .Create(graph);

        var lightControlbehaviour = playable.GetBehaviour();
        // 获取到light的对象(通过playable.SetReferenceValue设置过来)
        var light2 = light.Resolve(graph.GetResolver());

        lightControlbehaviour.mLight    = light2;
        lightControlbehaviour.color     = color;
        lightControlbehaviour.intensity = intensity;
        var a = this.duration;

        behaviour = playable.GetBehaviour();
        return(playable);
    }
Exemplo n.º 4
0
    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        light = playerData as Light;
        if (light == null)
        {
            return;
        }

        if (!firstFrameHappened)
        {
            defaultColor     = Color.white;
            defaultIntensity = 1f;

            firstFrameHappened = true;
        }

        int inputCount = playable.GetInputCount();

        Color blendedColor     = Color.clear;
        float blendedIntensity = 0f;
        float totalWeight      = 0f;

        for (int i = 0; i < inputCount; i++)
        {
            float inputWeight = playable.GetInputWeight(i);
            ScriptPlayable <LightControlBehaviour> inputPlayable =
                (ScriptPlayable <LightControlBehaviour>)playable.GetInput(i);
            LightControlBehaviour behaviour = inputPlayable.GetBehaviour();

            blendedColor     += behaviour.color * inputWeight;
            blendedIntensity += behaviour.intensity * inputWeight;

            totalWeight += inputWeight;
        }

        float remainingWeight = 1 - totalWeight;

        light.color     = blendedColor + defaultColor * remainingWeight;
        light.intensity = blendedIntensity + defaultIntensity * remainingWeight;
    }