Core Components
Learning what is what.
Input Controller
A cross-platform input system with automatic configuration for desktops and mobile devices. Not intended for manual editing. Contains public field to set Input System. By default, the system is set up for the Old Input Manager. To fully switch, follow these steps:
Open Edit → Project Settings → Player → Configuration, and set Active Input Handling to New/Old. For New one: install the Input System Unity package. For Old: delete this package. Check the EventSystem on the scene to see if it is set up correctly for the current input.
Set inputSystemType to New/Old in the InputController component.

The Input Controller also contains fields for Sound Design settings as well as the Playback Conditions, so that the effect appears not always, but only when certain conditions are met.

Mouse Input Type (LMB only / both) - mouse input on desktops that triggers a touch effect.
Effect Enabled (True/False) - indicates whether the effect is active at all. By default, it is True. It can be enabled or disabled via public methods inside the associated TouchGlowUI or SparkleSpawner: EnableTouch() and DisableTouch().
Operation Mode (Default / Manually Call) - indicates whether the effect will be triggered automatically when conditions are met, or if it requires a manual call from the associated TouchGlowUI or SparkleSpawner: ShowEffect().
Check Target Type (Any Type / UI / 3D / 2D) - specifies the type of objects from which input will be read to trigger the touch effect.
Check Condition (Any Target / ByGameObject / ByTag / ByLayer) - specifies the condition by which objects of the chosen type will be checked, from which input will be read to trigger the touch effect.
Target Object To Click, Target Tags, Target Layers - these are additional references. For example, if you want to provide visual feedback when the user clicks UI buttons with the tag Success, you set Target Type = UI, Condition = By Tag, and add the tag name 'Success' to the Tags list.
Sound Clips - a list of sounds, from which a random one is played when the One-Touch effect is triggered. See TouchSounds.prefab > InputController.
Max Simultaneous Sounds - specifies how many sounds from the list can be played simultaneously. If set to
1
, a single sound will play without overlapping until it finishes.Sound Clips Swipe Start & End - lists of sounds, from which random ones are played at the start and end of a swipe (Trail effect). See TouchTrailFromSimpleSpriteSounds.prefab > InputController.
Default Volume (0-1) - controls the base volume of the sound effects.
Random Stereo (True/False) - controls whether the sound plays randomly in the user's left/right ear.
TouchGlowUI (shader-based)

Main system controller managing trail generation, platform optimization, pooling, and rendering. Handles automatic platform detection and applies appropriate performance settings. Not intended for manual editing. Contains important references for assignment:
Target Canvas (UI canvas on the scene for positioning and scaling).
Glow Material (material created from shader for visual particle effect).
Input Controller.
Point Prefab (template GameObject for trail UI points). Not intended for manual editing.
Parent Object For Points (container transform for organizing trail hierarchy).

Also contains public fields for settings.
Universal Settings:
Glow Mode (Trail/OneTouch) - operating mode controlling particle behavior and pooling. When Max Points is manually set to 1, mode automatically switches to OneTouch.
Uses either 1 particle for single touch or 10 particles for multitouch support regardless of Max Points.
Uses configured Max Points value for continuous flowing effects (512 recommended).
Does not use Spacing.
Uses the Base Trail Spacing value to position points.
Creates a single effect at the touch point and either follows the touch until it is released (if Glow Material has property Holding Forbidden = 0), or extinguishes the effect at the spawn point.
Creates a trailing particle effect that lasts until release.
Desktop Settings:
Desktop Max Points (512) - maximum trail points at once. Less points = better performance but shorter trails. More points = longer trails but higher GPU load. Set to 1 for single touch response without trail (OneTouch mode). If OneTouch mode is already enabled, it takes priority and will use 1-10 particles for single touch or multitouch response without trail, regardless of this setting.
Desktop Glow Lifetime (2s) - how long each trail point stays visible before fading. Shorter time = fast blade-like effects. Longer time = slower fade.
Desktop Point Size (120x120px) - dimensions of individual trail points in pixels.
Desktop Base Trail Spacing (10px) - minimum pixel distance between trail points. System adds new point when finger moves this distance regardless of time. Smaller values = denser trails but more GPU load. Larger values = sparser trails with gaps during fast movement.
Desktop Target FPS (60) - controls time-based point generation. System adds points every 1/60 seconds even when finger doesn't move. Higher FPS = more frequent point generation = denser trails. Lower FPS = less frequent generation = sparser trails during slow movement.
Start/End Taper Points Desktop (64/64) - number of points used for smooth trail start and end tapering. Only active when Sharp Edges = true. Total taper points should be less than Max Points for proper function.
Mobile Settings:
Mobile Max Points (512) - maximum concurrent points optimized for mobile GPU performance.
Mobile Glow Lifetime (2s) - trail point lifetime adjusted for mobile battery efficiency.
Mobile Base Trail Spacing (8px) - tighter spacing optimized for smaller mobile screens.
Mobile Target FPS (60) - framerate target balancing smoothness with mobile performance.
Mobile Point Size (150x150px) - point dimensions for mobile screen densities.
Start/End Taper Points Mobile (32/32) - reduced taper complexity for mobile performance.
Additional Settings:
Initialization Delay (0.1s) - configurable delay before system starts. Allows to control when trail system activates to avoid startup performance impact.
Always Last Sibling (true) - keeps trail effects rendered above other UI elements. Logic is optimized to only update when new objects appear below in UI hierarchy, not constantly setting position. Incompatible with Dont Destroy On Load because the second function moves the object to a separate canvas without a hierarchy shared with other UI elements.
Dont Destroy On Load (false) - preserves trail system across scene transitions. System copies parent canvas settings and creates canvas duplicate in DontDestroyOnLoad area for persistent effects between scenes. Recommended if there are no other overlapping elements on the canvas.
Enable Multi Touch (true) - allows multiple simultaneous touch inputs with individual trail tracking. Creates separate trails for each finger on touch devices. Incompatible with Sharp Edges due to conflicting tapering logic.
Sharp Edges (false) - enables tapered trail beginnings and endings for blade-like effects. Incompatible with multi-touch due to complex edge tapering logic. Requires configuring Start/End Taper Points values (> 0) to function properly. Automatically disabled in OneTouch mode.
Size Multiplier (1) - changes the overall effect size while keeping the proportions between particle size and spacing.
Editor Settings:
Enable Debug Logs (true) - detailed console output for development and troubleshooting. Automatically disabled in builds for performance.
Force Mobile In Editor (false) - test mobile performance settings while in Unity Editor.
Methods For Manual Call
The component also contains Methods for Manual Call to enable/disable and show the effect on demand, rather than continuously. See Input Controller.
/// <summary>
/// Manual call mode: Show OneTouch effect manually after input is detected
/// Better to call via EventTrigger > PointerEnter or Button > OnClick or AutomaticTutorialMaker > OnStepComplete
/// </summary>
public void ShowEffect()
{
if (inputController == null || !inputController.effectEnabled) return;
bool manualCallInputDetected = inputController.GetManualCallInput();
if (!manualCallInputDetected) return;
Vector2 manualCallInputPosition = inputController.GetManualCallInputPos();
float manualCallInputTime = inputController.GetManualCallInputTime();
// Process the cached input data
AddPoint(manualCallInputPosition, manualCallInputTime, 0);
PlaySound();
}
/// <summary>
/// Temporary mode: Enable touch input processing
/// </summary>
public void EnableTouch()
{
if (inputController == null) return;
inputController.effectEnabled = true;
}
/// <summary>
/// Temporary mode: Disable touch input processing
/// </summary>
public void DisableTouch()
{
if (inputController == null) return;
inputController.effectEnabled = false;
}
SparkleSpawner (sprite-based)
Secondary effect system creating sprite-based particle accent effects with customizable dispersion patterns. Handles automatic platform detection and applies appropriate performance settings. Not intended for manual editing. Contains important references for assignment:
Target Canvas (UI canvas on the scene for positioning and scaling).
Input Controller.
Sparkle Particle Prefab (template GameObject for individual sparkles). Not intended for manual editing.
Sparkle Parent (container transform for organizing sparkle hierarchy).
Sparkle Textures (array of textures for visual variety).
Sparkle Colors (color palette for randomized particle appearance).
Also contains public fields for additional settings.

Universal Settings:
Sparkle Mode (OneTouch/Trail) - operating mode for particle generation. When Max Points is manually set to 1, mode automatically switches to OneTouch.
Creates either 1 burst for single touch or 10 bursts for multitouch support regardless of Max Points.
Uses Min/Max Sparkle Points per Burst, Max Points (512 recommended).
Does not use Spacing.
Uses the Base Trail Spacing value to position points.
Creates a single burst at the input point and extinguishes it there.
Creates continuous bursts during movement.
Dispersion Type (None/Radial/Down/Left/Right/Up/Inward) - particle movement pattern. None keeps particles stationary. Radial spreads from center outward. Directional moves particles in specific directions. Inward pulls particles toward center.
Fade Animation Type (FadeAndScale/Fade/Scale) - visual fade-out animation style. FadeAndScale combines opacity and size changes. Fade only changes opacity. Scale only changes size.
Rotation Type (None/Radial/Random) - a setting that determines the particle’s rotation. None - original rotation, Radial - directed from the center toward the radius rings, Random - random.
Desktop Settings:
Desktop Max Points (512) - maximum concurrent sparkles for desktop performance.
Desktop Sparkle Lifetime (1s) - how long individual sparkles remain visible before fading. Shorter time = quick flash effects. Longer time = lingering sparkles.
Desktop Min/Max Point Size (20-40px) - size range for individual sparkles in pixels. System randomly selects size within this range for variety.
Desktop Spacing (20px) - minimum pixel distance between sparkle bursts in Trail mode. Controls how densely sparkles spawn during movement.
Desktop Min/Max Sparkle Points (8-16) - number of particles per burst. System randomly selects count within this range for natural variation.
Desktop Min/Max Radius (80-120px) - spawn distance range from touch point. Creates ring-shaped spawn area around touch location. There is a visualization of the coverage area in the Scene window.

Mobile Settings:
Mobile Max Points (512) - maximum concurrent sparkles optimized for mobile GPU performance.
Mobile Sparkle Lifetime (1s) - particle lifetime adjusted for mobile battery efficiency.
Mobile Min/Max Point Size (20-40px) - size range optimized for mobile screen densities.
Mobile Spacing (10px) - tighter spacing optimized for smaller mobile screens and touch precision.
Mobile Min/Max Sparkle Points (8-16) - particle count range balancing visual impact with mobile performance.
Mobile Min/Max Radius (80-120px) - spawn radius range for mobile touch targets.
Additional Settings:
Initialization Delay (0.1s) - configurable delay before system starts. Prevents startup performance impact and allows other systems to initialize first.
Always Last Sibling (false) - keeps sparkle effects rendered above other UI elements when enabled. Disabled by default as sparkles are typically accent effects.
Dont Destroy On Load (false) - preserves sparkle system across scene transitions. Creates persistent canvas copy in DontDestroyOnLoad area.
Enable Multi Touch (false) - allows multiple simultaneous sparkle bursts. Creates separate burst patterns for each finger on touch devices.
Size Multiplier (1) - global scale multiplier for sparkle size, spacing, and radius. Maintains proportions while scaling overall effect size.
Editor Settings:
Enable Debug Logs (true) - detailed console output for development and troubleshooting. Shows spawn counts, performance metrics, and system state. Automatically disabled in builds.
Force Mobile In Editor (false) - test mobile performance settings while in Unity Editor. Useful for optimizing mobile-specific parameters during development.
Methods For Manual Call
The component also contains Methods for Manual Call to enable/disable and show the effect on demand, rather than continuously. See Input Controller.
/// Manual call mode: Show OneTouch effect manually after input is detected
/// Better to call via EventTrigger > PointerEnter or Button > OnClick or AutomaticTutorialMaker > OnStepComplete
/// </summary>
public void ShowEffect()
{
if (inputController == null || !inputController.effectEnabled) return;
bool manualCallInputDetected = inputController.GetManualCallInput();
if (!manualCallInputDetected) return;
Vector2 manualCallInputPosition = inputController.GetManualCallInputPos();
float manualCallInputTime = inputController.GetManualCallInputTime();
// Process the cached input data
SpawnSparkles(manualCallInputPosition);
PlaySound();
}
/// <summary>
/// Temporary mode: Enable touch input processing
/// </summary>
public void EnableTouch()
{
if (inputController == null) return;
inputController.effectEnabled = true;
}
/// <summary>
/// Temporary mode: Disable touch input processing
/// </summary>
public void DisableTouch()
{
if (inputController == null) return;
inputController.effectEnabled = false;
}
ReadOnlyAttribute
Utility attribute for creating read-only fields in Unity Inspector, used throughout the Touch Effect System for preventing modification already configured and initialized values.
ParticlePreviewPlayer
Component that plays looped animation of a single particle without requiring input. Supports both shader-based (TouchGlowUI) and sprite-based (SparkleSpawner) approach simultaneously. Needed to add touch effects to scene, for example as visual tutorial hint where user needs to tap something. See also our Automatic Tutorial Maker. This prefab works well to use as a Pointer Prefab in a tutorial step. Watch the integration video guide → Contains important references for assignment.

Universal Playback Settings:
Particle Lifetime (0.5-5.0s) - duration particle stays visible before fading.
Playback Speed (0.1-3.0x) - animation speed multiplier.
Pause Duration (0.1-2.0s) - time between animation cycles.
Shader Particle Settings:
Raw Image (RawImage component for shader particle display).
Glow Material (material for shader-based particle rendering).
Shader Particle Size (120px) - size of shader particle in pixels.
Sprite Particle Settings:
Sparkle Textures (array of textures for sprite particle visual variety).
Sparkle Colors (color palette for randomized particle appearance).
Sparkle Particle Prefab (template GameObject for sprite particles).
Sparkle Parent (container transform for organizing particle hierarchy).
Dispersion Type (None/Radial/Down/Left/Right/Up/Inward) - particle movement pattern.
Rotation Type (None/Radial/Random) - particle rotation behavior.
Pool Size (4-24) - number of sprite particles to create.
Min/Max Radius (40/80px) - spawn distance range from center.
Sprite Particle Size (30px) - base size for sprite particles.
Shaders


Specialized shaders providing different visual styles and effects.
Blade parts
TouchPointBlur - soft glowing effect.
TouchPointGradient - multi-color gradient transitions.
Glow parts
TouchPointCore - tapering trail with soft fade.
TouchPointGlow - layered glow with core and edge colors.
Ink
TouchGlowInk - a monochrome effect with particles that taper as they progress.
One Touch - Expanding Rings
TouchPointExpandingRing - an effect of a simple expanding ring.
TouchPointRipple - an effect of soft expanding rings, like a touch on the surface of water.
TouchPointSonarPulse - an effect of multiple expanding rings (wi-fi like).
One Touch - Patterns
TouchPointForceFieldHex - an effect highlighting an invisible hex-based force field, consisting of a wave and a fade-out.
TouchPointMatrixGrid - an effect highlighting an invisible matrix of squares, consisting of a wave and a fade-out.
One Touch - Shapes Dynamic (randomly shaped)
TouchPointBrokenGlass - an effect that imitates a crack in glass, with customizable numbers of rays and rings to achieve a "shattering" effect.
TouchPointNeonBlob - an effect that imitates a blob.
TouchPointNeonLightning - an effect that imitates a lightning strike at the touch point, with a customizable number of rays.
One Touch - Shapes Neon
TouchPointNeonCircle - an effect in the shape of a ring with adjustable outer and inner glow.
TouchPointNeonDiamond - an effect in the shape of a diamond with adjustable outer and inner glow.
TouchPointNeonHexagon - an effect in the shape of a hexagon with adjustable outer and inner glow.
TouchPointNeonSquare - an effect in the shape of a square with adjustable outer and inner glow.
TouchPointNeonTriangle - an effect in the shape of a triangle with adjustable outer and inner glow.
One Touch - Shapes Rotating
TouchPointRotatingSquare - an effect in the shape of a glowing square that scales up while rotating around its axis.
TouchPointRotatingTriangle - an effect in the shape of a glowing triangle that scales up while rotating around its axis.
One Touch - Shapes Simple
TouchPointCircle, TouchPointDiamond, TouchPointSquare, TouchPointTriangle, TouchPointPlus, TouchPointSparkle - geometric shapes with customizable core, glow, and ring layers for one-touch.
Each shader supports color customization. For OneTouch materials, there are additional properties:
HoldingForbidden determines whether the particle fades immediately at the touch point or can be held in OneTouch mode until release.
OneTouchHoldAge defines the animation progress point at which the effect can be held in OneTouch mode.
Last updated