Skip to main content

Cursors

Important Attention Reminder

Coding Style wiki​


Cursors is the static facade of CursorSystem that wraps all operations of the CursorManager singleton (the first call automatically finds or creates the [CursorManager] instance), providing cursor visibility/lock control, state switching, and render-reset APIs. Route all cursor operations through Cursors to keep state consistent.

NamespaceOxGKit.CursorSystem
Typepublic static class Cursors
SourceCursors.cs
using OxGKit.CursorSystem;

Quick Start​

using OxGKit.CursorSystem;
using UnityEngine;

// Initialize the CursorManager instance (auto-finds the CursorManager Prefab placed in the scene)
Cursors.InitInstance();

// Switch the cursor state by name
Cursors.SetCursorState("Attack");

// Reset back to the default state (first element in the list)
Cursors.ResetCursorState();

// Visibility and lock control
Cursors.SetCursorVisible(true);
Cursors.SetCursorLockState(CursorLockMode.Confined);

General Rules​

Singleton and Default State​

  1. The first call to any Cursors API automatically finds the CursorManager in the scene; if none exists, a [CursorManager] node is created automatically (parented under the OxGKit container node with DontDestroyOnLoad).
  2. The first entry in the Cursor States list is the default state; ResetCursorState resets back to the first state.

Attention State names are data (defined by the Cursor States list in the Inspector), not constants; SetCursorState returns false for undefined names — check the return value during development.


Initialization​

Methods Overview​

MethodDescription
InitInstanceInitializes the CursorManager instance.

InitInstance​

public static void InitInstance()

Initializes the CursorManager instance (finds the instance in the scene, or creates one automatically). Recommended to call at game startup.


Visibility and Lock​

Methods Overview​

MethodDescription
IsCursorVisibleChecks whether the cursor is visible.
SetCursorVisibleSets the cursor visibility.
GetCurrentCursorLockStateGets the current cursor lock mode.
SetCursorLockStateSets the cursor lock mode.

IsCursorVisible​

public static bool IsCursorVisible()

Checks whether the cursor is currently visible (i.e., Cursor.visible).

SetCursorVisible​

public static void SetCursorVisible(bool visible)

Sets the cursor visibility (i.e., Cursor.visible).

GetCurrentCursorLockState​

public static CursorLockMode GetCurrentCursorLockState()

Gets the current cursor lock mode (i.e., Cursor.lockState).

SetCursorLockState​

public static void SetCursorLockState(CursorLockMode cursorLockMode)

Sets the cursor lock mode (None, Locked, Confined).

// FPS-style capture (hide and lock to the screen center)
Cursors.SetCursorVisible(false);
Cursors.SetCursorLockState(CursorLockMode.Locked);

// Release when opening a menu
Cursors.SetCursorLockState(CursorLockMode.None);
Cursors.SetCursorVisible(true);

Attention On WebGL, browser restrictions require a user gesture (e.g., a click) before the lock (Locked) takes effect.


State Management​

Methods Overview​

MethodDescription
GetAllCursorStatesGets all cursor states.
GetCursorStateGets the cursor state with the given name.
GetCurrentCursorStateGets the current cursor state.
SetCursorStateSwitches the cursor state by name.
ResetCursorStateResets back to the default state (first element).

GetAllCursorStates​

public static CursorManager.CursorState[] GetAllCursorStates()

Gets all configured cursor states (CursorState).

GetCursorState​

public static CursorManager.CursorState GetCursorState(string stateName)

Gets the cursor state with the given name; returns null if not found. Useful for adjusting state parameters at runtime (textures, hotspot, frame rate, etc.).

var cursorState = Cursors.GetCursorState("Default");
cursorState?.SetFrameRate(12);

GetCurrentCursorState​

public static CursorManager.CursorState GetCurrentCursorState()

Gets the current cursor state.

SetCursorState​

public static bool SetCursorState(string stateName)

Switches the cursor state by name and resets the rendering; returns true on success, or false if the name is not found.

// e.g., switch to the attack cursor when hovering an enemy
if (!Cursors.SetCursorState("Attack"))
Debug.LogWarning("Cursor state not found!");

ResetCursorState​

public static void ResetCursorState()

Resets the cursor state to the default state (first element in the list) and resets the rendering; also used to restore the cursor rendering after RemoveCursorRender.


Render Control​

Methods Overview​

MethodDescription
SetIgnoreScaleSets whether dynamic cursor animation ignores Time.timeScale.
SetScaleToAllCursorsSets the scale for all cursor states and resets the rendering.
ResetRenderResets the rendering of the current cursor state.
RemoveCursorRenderRemoves the cursor rendering (restores the system cursor).

SetIgnoreScale​

public static void SetIgnoreScale(bool ignore)

Sets whether the dynamic cursor animation update ignores Time.timeScale (default true, driven by Time.unscaledDeltaTime). Keep it true if the cursor animation must continue while the game is paused (Time.timeScale = 0).

SetScaleToAllCursors​

public static void SetScaleToAllCursors(Vector2 scale)

Sets the scale for all cursor states and resets the rendering.

Attention Scaling only takes effect when the state has scalingEnabled on and cursorMode is ForceSoftware.

ResetRender​

public static void ResetRender()

Resets the rendering of the current cursor state (a static cursor re-applies its texture; a dynamic cursor resets its animation parameters and replays).

RemoveCursorRender​

public static void RemoveCursorRender()

Removes the cursor rendering (clears the current state and restores the system default cursor).

Reminder To restore the custom cursor rendering, call ResetCursorState to re-initialize and reset the rendering (not just SetCursorVisible).