Supported Visuals
Tooltip Collection > Tooltip Visuals. What is pointing at the target.
Here, the types and capabilities of the supported visuals are described. To explore the specific prefabs for use, see Visual Prefabs.
In the Tooltip System, visual tips include UI Pointers and World Pointers.
Visuals tips are prefabs to be assigned in the Tooltip Collection list element, which spawn & play when the tooltip is launched and are then either reused or destroyed. In the tooltip collection, UI-type pointers are assigned in Visuals > UI Pointer Prefab, and their text in UI Pointer Text. World-type pointers are assigned similarly: the prefab goes in World Pointer Prefab, and the text in World Pointer Text.

Single displayed tooltip can contain both or one of pointers (UI/World). Different visuals do not conflict with each other. Pointers can target to both UI targets and objects in world coordinates. Visual prefabs can be created by merging elements. However, the basic behavior of a visual is determined by its basic type: UI / World.
UI Pointer
A UI pointer prefab spawns on the Canvas and follows its target placed in UI or world space. The pointer itself always points precisely at the target, while the graphic elements inside it (UI elements, such as an Image or a TextMeshPro text) can be offset, rotated, or scaled relative to the center. The UI Pointer prefab must include a UI Pointer Animation component on the parent object, which must reference a UI Pointer Settings Scriptable Object.
Default

See Prefabs > UI Pointers > UIPointer as example.
Default UI Pointer contains a simple Image with the pointer, positioned slightly below the center level to appear just “under” the target object. The position and Source Image can be edited. Prefab also includes a text field and a placeholder for additional elements that can be added to the prefab.
To create UI Pointer: create a UI Image, turn it into a prefab, then add UI Pointer Animation component to it. Also Create > Tooltip System > UI Pointer Settings and set it to Settings field. UI Pointer Settings handle UI Pointer animations. For example, if the settings specify the appearance type as "Slide" the pointer will appear with a sliding animation.
Here’s how to configure pointer behavior via UI Pointer Animation > Settings:
Use Pivots. If True, then when directing the pointer, it looks for the target object pivot, not its actual center.
Movement Settings. Speed, Smooth Time, and Threshold for the pointer’s movement toward its target.
Appearance Settings, Slide Animation. Types for the pointer's appearance and disappearance, their duration, and special animation values. Available animations: None, Zoom, Fade, Slide.
Idle Animation settings. Values for different types of idle animations are adjusted here. Set a base rotation angle (Quaternion.Euler.z) for the pointer so it isn’t just vertical. Set available animations: None, Levitate, Pulse, Blink, Fade.
Frame Offset. Used only for prefabs containing a frame corner prefab or cutout mask component. Controls how much wider the frame is compared to the target bounds. For frame visuals, also choose how object bounds are detected: via a collider or a renderer.
Screen Edge Settings. Whether the text should flip when it goes off the edge of the screen.

UI Frame

For UI Pointers, a special behaviour - Frame - is supported. This pointer highlights the target object by finding its outermost points and stretching a rectangular frame to fully cover it. It works with both canvas objects and 2D/3D objects.
See Prefabs > UI Pointers > UIFramePointer as example. It contains nothing inside except a reference to the original corner for the frame. At runtime, four child corners are spawned and positioned around the target.
To create a frame, assign a prefab with the top-left corner Image in UI Pointer Animation > Frame Corner Prefab. To edit the frame use such references:
UI Pointer Animation > Frame Corner Prefab > replace the Image, resize it`s Rect Transform values, change the Image initial color.
UI Pointer Animation > Settings > Frame Settings > adjust Frame Offset in to make the frame wider, narrower, or exactly match the target’s bounds. If Use Collider Bounds is enabled, object bounds in world space are determined primarily by colliders; if Use Renderer Bounds is enabled instead, they are determined by the renderers’ bounds. Use other universal settings for the UI Pointer too, for example, set the appearance animation to Zoom, the disappearance animation to Fade, adjust the idle animation values.
UI Mask

For UI Pointers, a special behaviour - Mask - is supported. This pointer creates a cutout around the target object, blocking raycasts everywhere else except the target, and optionally coloring the inactive area (black by default).There is also a Frame Mode that, like the option above, clips the area to the edges of the object. It all works with both canvas objects and 2D/3D objects.
See Prefabs > UI Pointers > Masking > UIPointerMaskFormed as example.
To create a mask, assign a prefab with the child object containing Image and the Iris Cutout Mask component. To edit the mask use such references:
Iris Cutout Mask component > set the Cutout Shape (Rectangle / Circle / Ellipse), set Resolution for visual quality, define a fixed Cutout Size, or enable IsFrameMode to generate the cutout dynamically based on the target object’s bounds. Enable Visual Mask to darken the inactive area around the target, or assign any fill color other than black. Or use additional visuals around the target area inside the prefab, while the transparent mask still blocks input around it. Pay attention to the gizmo visualization in the Scene view to test the cutout size at runtime.
UI Pointer Animation > Settings. Use universal UI Pointer settings, for example, set the appearance animation to Fade, Appear Duration to 0.5 seconds, increase Move Speed so the pointer follows the target more quickly. For IsFrameMode adjust Frame Offset and Frame Bound recognition settings the same way as for a regular frame.
UI Text

UI Pointers also support text tooltips with localization. These are simple visuals with text that can appear when the user hovers over objects. UI Pointer Animation must contain a reference to the text inside the prefab to animate it correctly.
See Prefabs > UI Pointers > Texts > UIPointerTextKeySprite as example.
For basic Text tooltip use, simply enter the text directly in the prefab containing TMP_Text. Position it relative to the tooltip center, set a custom font, font weight, alignment, color and other properties.
In UI Pointer Animation > Settings, configure everything that is universal for UI Pointers and their text (appearance animation, idle state, and so on). When Adjust Text Position is set to true, the system will attempt to reposition the text into the visible area if it goes beyond the screen bounds.
Instead of specifying text in the prefab, set the Pointer text via the central Collection > Localization Reference. This will store text in the LocalizableTexts text storage, allowing for later localization. See Additional.
You can also use the Localized Tooltip component for the text. It will assign tooltip text from the CSV repository and automatically translate it if you’re using the built-in localization system. See a text object using this component in the demo scene.
World Pointer
A World Pointer prefab spawns in world coordinates at object assigned in Scene References as Target World Holder. Pointer follows its target placed in UI or world space. It always points precisely at the target, while the graphic elements inside it (such as Mesh or a TextMeshPro text) can be offset, rotated, scaled. The World Pointer prefab must include a World Pointer Animation component on the parent object, which must reference a World Pointer Settings Scriptable Object.

Default
World Pointer Settings have several predefined behaviors, which can be selected to match the visual content of the prefab:
Pointer Mode = Position Only. The pointer follows the exact position of the target object. A basic mode for adding custom animations, rotation, offsets, or visual effects inside the prefab (for example, a sparkle particle system to highlight the target).
Pointer Mode = Rotate Only. The pointer stays at its spawn position and only rotates toward the target object. Useful for directional signs pointing to a destination. See Prefabs > World Pointers > 3D > 3DRoadSign.
Pointer Mode = Road Sign. The pointer is always placed in front of the camera at a configurable distance and points toward the target. Useful for navigation in racing games. See Prefabs > World Pointers > 3D > 3DRoadNavigator.
Pointer Mode = Geotag. The pointer follows the target’s position, aligning to its top edge with a configurable offset (for example, Y = 1 places the pointer 1 unit above the object). Useful for marking quest locations on a map. See Prefabs > World Pointers > 3D > 3DGeotag.
Pointer Mode = Facade. The pointer follows the target’s position and is placed between the object and the camera, with a configurable offset (for example, Z = 1 places the pointer 1 unit closer to the camera). Useful for target crosshairs or aim indicators. See Prefabs > World Pointers > 2D > 2DTargetPointer.
Pointer Mode = Side. The pointer follows the target’s position while pointing to it from the side. See Prefabs > World Pointers > 3D > 3DSideArrow
Pointer Mode = Ground. Similar to Geotag, but positioned at the bottom edge of the object with a configurable offset. See Prefabs > World Pointers > 2D > 2DGround.
Pointer Mode = Frame. A special mode that requires a Frame Corner Prefab. Creates a frame around the edges of the target object with a configurable offset (wider or tighter). See Prefabs > World Pointers > 2D > 2DFramePointer.
There are also universal settings available for any World Pointer.
Use Pivots. Determines whether the pointer is positioned based on the object’s pivot or its actual center.
Movement Settings. Speed, Smooth Time, and Threshold for the pointer’s movement toward its target.
Appearance Settings. Types for the pointer's appearance and disappearance, duration, and special animation values. Available animations: None, Zoom, Zoom And Rotate, Fade.
Placement Settings. This section shows offsets for different pointer types (for example, a geotag offset above objects) and the distance from the camera to the object when the pointer highlights a UI element from world space.
Rotation Settings. Defines whether the pointer rotates toward the camera and how fast it does so.
Idle Animation settings. Values for different types of idle animations are adjusted here. Set available animations: None, Levitate, Pulse, Blink, Orbit, Bounce, Rotate Spin.

To create World pointer: create a 2D/3D visual, turn it into a prefab, then add World Pointer Animation component to it. Also Create > Tooltip System > World Pointer Settings and set it to Settings field.
World Frame
Similar to a UI Frame, it is created around the target object bounds but in world space, using a Frame Corner Prefab wits a Renderer source instead of an Image. It works only for 2D/3D objects.

See Prefabs > World Pointers > 2D > 2DFramePointer as example.
It contains nothing inside except a reference to the original corner for the frame. At runtime, four child corners are spawned and positioned around the target.
To create a frame, assign a prefab with the top-left corner Sprite Renderer in World Pointer Animation > Frame Corner Prefab. To edit the frame use such references:
World Pointer Animation > Frame Corner Prefab > replace the Sprite, resize it, change initial color.
World Pointer Animation > Settings > Frame Settings > adjust Frame Offset in to make the frame wider, narrower, or exactly match the target’s bounds. If Use Collider Bounds is enabled, object bounds in world space are determined primarily by colliders; if Use Renderer Bounds is enabled instead, they are determined by the renderers’ bounds. Use other universal settings for the World Pointer too, for example, set the appearance animation to Zoom, the disappearance animation to Fade, adjust the idle animation values.
World Text

It works exactly like UI Text, but uses positioning settings typical for a World Pointer.
See Prefabs > World Pointers > 3D > World Text as example.
Additional
Edit prefab content
You can add any visuals or animations inside any pointer prefab. Adjust built-in prefabs to fit your project, especially scaling internal graphics, because visual proportions may vary.
Modify the scripts
Each script controlling a pointer (UI/World) includes a built-in RedesignConsideringTarget method, which is called on initialization. You can use it to customize the prefab depending on the target - for example, change the reticle image color to red if the target has very low HP. See the available Methods for Editing.
Use sprite assets & localize TMP text
The system supports using TMP sprites. To access them, use the TMP_SpriteAsset "key_empty" reference. It provides a fallback for all other keys. This sprite is also used in the LocalizableTexts ScriptableObject when the pointer text is taken from that storage via Localization Reference or LocalizedTooltip.cs.

Default key sprites can be found and replaced in DynamicHoverTooltips > RebindAndLocalization > KeyboardAssets. AmaranthBold font is used in this asset under the SIL Open Font License and is free for commercial and non-commercial use.
For advanced text settings & localization use SceneReferences > LocalizableTexts Scriptable Object (SO). To set the Pointer text in the central collection find Localization Reference, it navigates to editable text storage. Enter default text, then export current strings to CSV via button. Fill CSV file with translations and keys, so when the language is changed, the pointer text is automatically translated to the corresponding localization. Alternatively, enter a string key directly in the central collection element, so the text is set dirrectly from CSV column of currently selected language. When the language is changed via SO > TranslateAllTutorialByString("language"); the system automatically remembers the current language and translates all tooltip texts that are already displayed in the scene.
In LocalizableTexts SO set also default fonts, a reference to a sprite asset, and the default language.
If Initial Font is set to true, the system replaces the font with Default one for all generated text tooltips. If not, it uses Default Font and Language Special Fonts to switch fonts between languages (for example, when switching from English to Chinese and back).

This is how the CSV as translation storage looks. To change the language in runtime, use the reference to the LocalizableTexts SO to call the ChangeLanguage(string languageColumnName).

Last updated