diff --git a/_DOTween.Assembly/DOTween/Core/DOTweenSettings.cs b/_DOTween.Assembly/DOTween/Core/DOTweenSettings.cs index 33fd8528..29e87c8f 100644 --- a/_DOTween.Assembly/DOTween/Core/DOTweenSettings.cs +++ b/_DOTween.Assembly/DOTween/Core/DOTweenSettings.cs @@ -11,6 +11,7 @@ public class DOTweenSettings : ScriptableObject public const string AssetName = "DOTweenSettings"; public bool useSafeMode = true; + public bool showErrorLog = true; public float timeScale = 1; public bool useSmoothDeltaTime; public float maxSmoothUnscaledTime = 0.15f; // Used if useSmoothDeltaTime is TRUE diff --git a/_DOTween.Assembly/DOTween/Core/TweenerCore.cs b/_DOTween.Assembly/DOTween/Core/TweenerCore.cs index d2b8dad7..4524805e 100644 --- a/_DOTween.Assembly/DOTween/Core/TweenerCore.cs +++ b/_DOTween.Assembly/DOTween/Core/TweenerCore.cs @@ -173,15 +173,22 @@ internal override bool Startup() internal override bool ApplyTween(float prevPosition, int prevCompletedLoops, int newCompletedSteps, bool useInversePosition, UpdateMode updateMode, UpdateNotice updateNotice) { float updatePosition = useInversePosition ? duration - position : position; + if (DOTween.useSafeMode) { try { tweenPlugin.EvaluateAndApply(plugOptions, this, isRelative, getter, setter, updatePosition, startValue, changeValue, duration, useInversePosition, updateNotice); - } catch { + } catch (Exception e) { + if(DOTween.showErrorLog) Debugger.LogWarning(e); // Target/field doesn't exist anymore: kill tween return true; } } else { - tweenPlugin.EvaluateAndApply(plugOptions, this, isRelative, getter, setter, updatePosition, startValue, changeValue, duration, useInversePosition, updateNotice); + try { + tweenPlugin.EvaluateAndApply(plugOptions, this, isRelative, getter, setter, updatePosition, startValue, changeValue, duration, useInversePosition, updateNotice); + } catch (Exception e) { + if(DOTween.showErrorLog) Debugger.LogWarning(e); + throw e; + } } return false; } diff --git a/_DOTween.Assembly/DOTween/DOTween.cs b/_DOTween.Assembly/DOTween/DOTween.cs index 12708871..516405cd 100644 --- a/_DOTween.Assembly/DOTween/DOTween.cs +++ b/_DOTween.Assembly/DOTween/DOTween.cs @@ -37,10 +37,18 @@ public class DOTween /////////////////////////////////////////////// // Options //////////////////////////////////// + /// If TRUE (default) makes tweens slightly slower but safer, automatically taking care of a series of things /// (like targets becoming null while a tween is playing). /// Default: TRUE public static bool useSafeMode = true; + + /// If TRUE (default) show all exceptions occurred in tweening to log console. + /// Showing exception costs a bit.If you care about performance, make showErrorLog=false in production. + /// + public static bool showErrorLog = true; + + /// If TRUE you will get a DOTween report when exiting play mode (only in the Editor). /// Useful to know how many max Tweeners and Sequences you reached and optimize your final project accordingly. /// Beware, this will slightly slow down your tweens while inside Unity Editor. @@ -177,6 +185,7 @@ static IDOTweenInit Init(DOTweenSettings settings, bool? recycleAllByDefault, bo if (useSafeMode == null) DOTween.useSafeMode = settings.useSafeMode; if (logBehaviour == null) DOTween.logBehaviour = settings.logBehaviour; if (recycleAllByDefault == null) DOTween.defaultRecyclable = settings.defaultRecyclable; + DOTween.showErrorLog = settings.showErrorLog; DOTween.timeScale = settings.timeScale; DOTween.useSmoothDeltaTime = settings.useSmoothDeltaTime; DOTween.maxSmoothUnscaledTime = settings.maxSmoothUnscaledTime; diff --git a/_DOTween.Assembly/DOTween/Tweener.cs b/_DOTween.Assembly/DOTween/Tweener.cs index 64804e5e..3ffe597b 100644 --- a/_DOTween.Assembly/DOTween/Tweener.cs +++ b/_DOTween.Assembly/DOTween/Tweener.cs @@ -126,14 +126,23 @@ internal static bool DoStartup(TweenerCore( if (DOTween.useSafeMode) { try { t.startValue = t.tweenPlugin.ConvertToStartValue(t, t.getter()); - } catch { + } catch (System.Exception e) { + if (DOTween.showErrorLog) Debugger.LogWarning(e); // Target/field doesn't exist: kill tween TweenManager.Despawn(t); return null; } - } else t.startValue = t.tweenPlugin.ConvertToStartValue(t, t.getter()); + } else { + try { + t.startValue = t.tweenPlugin.ConvertToStartValue(t, t.getter()); + } catch (System.Exception e) { + if(DOTween.showErrorLog) Debugger.LogWarning(e); + throw e; + } + } } t.tweenPlugin.SetChangeValue(t); }