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; }
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); }
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; }