protected void SetTween(TweenerCore <Vector3, Path, PathOptions> tween) { if (direction == AnimationDirection.From) { tween.From(); } tween.SetEase(ease); tween.SetRelative(isRelative); tween.Pause(); tweener = tween; }
/// <summary> /// Grab tweener, create if it doesn't exists. keyInd is the index of this key in the track. /// </summary> TweenerCore <Vector3, Path, PathOptions> GetPathTween(int frameRate) { if ((mPathTween == null || !mPathTween.active) && path.Length > 1) { //if all points are equal, then set to Linear to prevent error from DOTween var pathType = path.Length == 2 || IsPathPointsEqual() ? PathType.Linear : PathType.CatmullRom; var pathData = new Path(pathType, path, pathResolution); mPathTween = DOTween.To(PathPlugin.Get(), _PathGetter, _PathSetterNull, pathData, getTime(frameRate)); mPathTween.SetRelative(false).SetOptions(isClosed); } return(mPathTween); }
public override void build(SequenceControl seq, Track track, int index, UnityEngine.Object obj) { int frameRate = seq.take.frameRate; //allow tracks with just one key if (track.keys.Count == 1) { interp = Interpolation.None; } var trans = obj as Transform; var transParent = trans.parent; Rigidbody body = trans.GetComponent <Rigidbody>(); Rigidbody2D body2D = !body?trans.GetComponent <Rigidbody2D>() : null; var tTrack = track as TranslationTrack; bool pixelSnap = tTrack.pixelSnap; float ppu = tTrack.pixelPerUnit; if (!canTween) { //TODO: world position Vector3 pos = pixelSnap ? new Vector3(Mathf.Round(position.x * ppu) / ppu, Mathf.Round(position.y * ppu) / ppu, Mathf.Round(position.z * ppu) / ppu) : position; TweenerCore <Vector3, Vector3, TWeenPlugNoneOptions> tweener; if (body2D) { tweener = DOTween.To(new TweenPlugValueSet <Vector3>(), () => trans.localPosition, (x) => body2D.position = transParent.TransformPoint(x), pos, getTime(frameRate)); //1.0f / frameRate } else if (body) { tweener = DOTween.To(new TweenPlugValueSet <Vector3>(), () => trans.localPosition, (x) => body.position = transParent.TransformPoint(x), pos, getTime(frameRate)); //1.0f / frameRate } else { tweener = DOTween.To(new TweenPlugValueSet <Vector3>(), () => trans.localPosition, (x) => trans.localPosition = x, pos, getTime(frameRate)); //1.0f / frameRate } seq.Insert(this, tweener); } else { if (path.Length <= 1) { return; } if (getNumberOfFrames(seq.take.frameRate) <= 0) { return; } TweenerCore <Vector3, Path, PathOptions> ret = null; bool isRelative = false; PathType pathType = path.Length == 2 ? PathType.Linear : PathType.CatmullRom; var pathTween = new Path(pathType, path, pathResolution); var timeTween = getTime(frameRate); if (body2D) { if (pixelSnap) { ret = DOTween.To(PathPlugin.Get(), () => path[0], x => body2D.MovePosition(transParent.TransformPoint(new Vector2(Mathf.Round(x.x * ppu) / ppu, Mathf.Round(x.y * ppu) / ppu))), pathTween, timeTween).SetTarget(body2D); } else { ret = DOTween.To(PathPlugin.Get(), () => path[0], x => body2D.MovePosition(transParent.TransformPoint(x)), pathTween, timeTween).SetTarget(body2D); } } else if (body) { if (pixelSnap) { ret = DOTween.To(PathPlugin.Get(), () => path[0], x => body.MovePosition(transParent.TransformPoint(new Vector3(Mathf.Round(x.x * ppu) / ppu, Mathf.Round(x.y * ppu) / ppu, Mathf.Round(x.z * ppu) / ppu))), pathTween, timeTween).SetTarget(body); } else { ret = DOTween.To(PathPlugin.Get(), () => path[0], x => body.MovePosition(transParent.TransformPoint(x)), pathTween, timeTween).SetTarget(body); } } else { if (pixelSnap) { ret = DOTween.To(PathPlugin.Get(), () => path[0], x => trans.localPosition = new Vector3(Mathf.Round(x.x * ppu) / ppu, Mathf.Round(x.y * ppu) / ppu, Mathf.Round(x.z * ppu) / ppu), pathTween, timeTween).SetTarget(trans); } else { ret = DOTween.To(PathPlugin.Get(), () => path[0], x => trans.localPosition = x, pathTween, timeTween).SetTarget(trans); } } ret.SetRelative(isRelative).SetOptions(isClosed); if (hasCustomEase()) { ret.SetEase(easeCurve); } else { ret.SetEase(easeType, amplitude, period); } seq.Insert(this, ret); } }