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);
}