public static Tween AttrackOutTween(ref Transform tf, ElimlnateEffectParam effectParam, out Vector3 center, float multiplying = 1.5f, float during = 0.2f) { center = effectParam.EndPosition; Vector2 direction = center - tf.position; direction.Normalize(); Vector3 end = tf.position + new Vector3(-direction.x * multiplying, -direction.y * multiplying, 0f); Tween tw = tf.DOMove(end, during); return(tw); }
private void OnEffect(ElimlnateGrid target, TweenEffectBase <ElimlnateEffectParam> tw, GridEffectParam param) { //target.StopEffect(GameEffects.EffectChoosen);//, "Glow"); Transform tf = target.GridTrans; ElimlnateEffectParam effectParam = param as ElimlnateEffectParam; //Vector3 end = GetdAttrackOutTween(ref tf, effectParam, out Vector3 center); Tween attracktOut = AttrackOutTween(ref tf, effectParam, out Vector3 center) .SetEase(Ease.OutSine); Sequence queue = DOTween.Sequence(); queue.AppendInterval(0.2f * effectParam.Index); queue.Append(attracktOut); queue.Append( tf.DOMove(center, 0.4f) .SetEase(Ease.InSine)) .OnComplete(() => { target.WillDestroy(); UpperStrata.AfterGridEffectFinished?.Invoke(); queue.Kill(); }); }
protected virtual void BeforeFinish(ref Sequence queue, ref ElimlnateGrid target, ref ElimlnateEffectParam param) { }
private void OnEffect(ElimlnateGrid target, TweenEffectBase <ElimlnateEffectParam> tw, ElimlnateEffectParam param) { Sequence queue = DOTween.Sequence(); #if APPLY_GRID_RANK float interval = 0.1f; queue.AppendInterval(interval * param.Index); #endif #if DO_PUNCH_ROT float z = Utils.RangeRandom(45f, 90f); Vector3 punch = new Vector3(0f, 0f, z); queue.Append(target.GridTrans.DOPunchRotation(punch, 0.4f, 15)); //摇晃 queue.AppendInterval(0.05f * param.Index); //摇晃后间隔时间 #endif queue.Append(target.GridTrans.DOScale(Vector3.one * 1.2f, 0.18f)); //1.5f, 0.25f queue.Append(target.GridTrans.DOScale(Vector3.zero, 0.1f)); //zero, 0.15f BeforeFinish(ref queue, ref target, ref param); #if DIRECT_FINISH queue.AppendCallback(Finish); //直接结束 #else queue.Join(target.GridSprite.DOFade(0f, 0.1f)) //褪为透明 .OnComplete(Finish); #endif void Finish() { if (UpperStrata.HasFollowUpEffect) { UpperStrata.CheckFollowEffect(); } else { UpperStrata.AfterGridEffectFinished?.Invoke(); target.WillDestroy(); queue.Kill(); } } OnPlaySound?.Invoke(); }