using System; using UnityEngine; using UnityEngine.Playables; using UnityEngine.Timeline; public class ThrowPositionMixerBehaviour : PlayableBehaviour { public override void ProcessFrame(Playable playable, FrameData info, object playerData) { var trackBinding = playerData as GameObject; if (!trackBinding) return; var trans = trackBinding.transform; var inputCount = playable.GetInputCount(); for (var i = 0; i < inputCount; i++) { var inputPlayable = (ScriptPlayable)playable.GetInput(i); var input = inputPlayable.GetBehaviour(); var positionTimeClipTime = inputPlayable.GetTime(); var positionTimeClipTimeMax = inputPlayable.GetDuration(); if (positionTimeClipTime > 0 && positionTimeClipTime + 0.01f < positionTimeClipTimeMax) { var rate = positionTimeClipTime / positionTimeClipTimeMax; var pos = Vector3.Lerp(input.startPos, input.endPos, (float)rate); trans.localPosition = pos; } } } }