using DG.Tweening; using System.Collections; using System.Collections.Generic; using UnityEngine; public class TweenRotation : MonoBehaviour { #if UNITY_EDITOR private void Reset() { from = transform.localEulerAngles; to = transform.localEulerAngles; } #endif public Vector3 from = Vector3.zero; public Vector3 to = Vector3.zero; public TweenStyle playStyle = TweenStyle.Once; public AnimationCurve curve = new AnimationCurve(new Keyframe(0f, 0f, 0f, 1f), new Keyframe(1f, 1f, 1f, 0f)); public float timer = 1f; private Tween tweener = null; // Use this for initialization void Start() { PlayForward(); } public void PlayForward() { ResetToBegining(); switch (playStyle) { case TweenStyle.Once: tweener = transform.DOLocalRotate(to, timer, RotateMode.FastBeyond360).SetEase(curve); break; case TweenStyle.Loop: tweener = transform.DOLocalRotate(to, timer, RotateMode.FastBeyond360).SetEase(curve).SetLoops(-1); break; case TweenStyle.PingPong: tweener = transform.DOLocalRotate(to, timer, RotateMode.FastBeyond360).SetEase(curve).SetLoops(-1, LoopType.Yoyo); break; } } public void PlayReverse() { ResetToEnding(); switch (playStyle) { case TweenStyle.Once: tweener = transform.DOLocalRotate(from, timer, RotateMode.FastBeyond360).SetEase(curve); break; case TweenStyle.Loop: tweener = transform.DOLocalRotate(from, timer, RotateMode.FastBeyond360).SetEase(curve).SetLoops(-1); break; case TweenStyle.PingPong: tweener = transform.DOLocalRotate(from, timer, RotateMode.FastBeyond360).SetEase(curve).SetLoops(-1, LoopType.Yoyo); break; } } public void Stop() { if (tweener != null) { tweener.Kill(); } } public void Pause() { if (tweener != null) { tweener.Pause(); } } public void Play() { if (tweener != null) { tweener.Play(); } } public void ResetToBegining() { if (tweener != null) { tweener.Kill(); } transform.localEulerAngles = from; } public void ResetToEnding() { if (tweener != null) { tweener.Kill(); } transform.localEulerAngles = to; } }