All tools
DOTweenUIFeedback

Button Feel Lab

Tune press, hover and reject feedback, then paste it into Unity.

StateNormal

Stage

Motion tracescalex
Release easeOutBack

Click stream

  • Press the button — accepted and rejected clicks land here.

Parameters

Base
1.00
Highlighted
1.05
1.00
0.12 s
Pressed
0.92
1.00
0.07 s
Release
0.22 s
Click punch
0.10
0.20 s
8
0.60
Reject shake
14 px
0.32 s
14
60
Disabled
0.40
0.15 s
Timing & export
0.12 s
1.00
// Generated by Button Feel Lab — burakkaan.dev/tools/button-feel-lab
// Call from an Editor script or a bootstrap to build the profile.
using DG.Tweening;
using UnityEngine;
using Game.UI;

public static class GeneratedButtonFeel
{
    public static void Apply(ButtonFeedbackConfig c)
    {
        c.NormalScale = Vector3.one;
        c.NormalColor = new Color(0.031f, 0.569f, 0.698f, 1.000f);

        c.HighlightEnabled          = true;
        c.HighlightScaleMultiplier  = 1.050f;
        c.HighlightColor            = new Color(0.024f, 0.714f, 0.831f, 1.000f);
        c.HighlightDuration         = 0.120f;
        c.HighlightEase             = Ease.OutQuad;

        c.PressedScaleMultiplier    = 0.920f;
        c.PressedColor              = new Color(0.055f, 0.455f, 0.565f, 1.000f);
        c.PressedDuration           = 0.070f;
        c.PressedEase               = Ease.OutQuad;

        c.ReleaseDuration           = 0.220f;
        c.ReleaseEase               = Ease.OutBack;

        c.ClickPunchStrength        = 0.100f;
        c.ClickPunchDuration        = 0.200f;
        c.ClickPunchVibrato         = 8;
        c.ClickPunchElasticity      = 0.600f;

        c.RejectShakeEnabled        = true;
        c.RejectShakeStrength       = 14.000f;
        c.RejectShakeDuration       = 0.320f;
        c.RejectShakeVibrato        = 14;
        c.RejectShakeRandomness     = 60.000f;

        c.DisabledColor             = new Color(0.031f, 0.569f, 0.698f, 0.400f);
        c.DisabledDuration          = 0.150f;

        c.UseUnscaledTime           = true;
        c.ClickCooldown             = 0.120f;
        c.SfxVolume                 = 1.000f;

#if UNITY_EDITOR
        UnityEditor.EditorUtility.SetDirty(c);
#endif
    }
}

Ease names map 1:1 onto DOTween's Ease enum, so this compiles as-is against the config in the last tab.

What the numbers mean

Press → release
290 ms
Full round trip. Over ~350 ms starts to feel laggy.
Max clicks / s
8.3
Cooldown gate. Keep above your fastest legitimate tap rate.
Punch peak
10%
Scale overshoot on click, on top of the press scale.
Shake travel
14 px
Peak horizontal offset when a click is refused.

The stage runs the same state machine Unity's Selectable does — pointer enter/exit/down/up in the same order, with cooldown and busy gates in front of the click. What you feel here is what you get in-engine, minus input latency.