跳至主要内容

Cursors

重要 注意 提醒

Coding Style wiki


CursorsCursorSystem靜態門面 (Facade),內部包裝 CursorManager 單例的所有操作 (首次呼叫會自動查找或建立 [CursorManager] 實例),提供游標顯示/鎖定控制狀態切換渲染重置等 API;建議一律透過 Cursors 進行游標操作,保持狀態一致。

命名空間OxGKit.CursorSystem
類型public static class Cursors
原始碼Cursors.cs
using OxGKit.CursorSystem;

快速上手

using OxGKit.CursorSystem;
using UnityEngine;

// 初始 CursorManager 實例 (場景上已放置 CursorManager Prefab 則會自動查找)
Cursors.InitInstance();

// 依名稱切換游標狀態
Cursors.SetCursorState("Attack");

// 重置回預設狀態 (清單第一筆)
Cursors.ResetCursorState();

// 顯示與鎖定控制
Cursors.SetCursorVisible(true);
Cursors.SetCursorLockState(CursorLockMode.Confined);

通用規則

單例與預設狀態

  1. 任一 Cursors API 首次被呼叫時,會自動查找場景上的 CursorManager;查無則自動建立 [CursorManager] 節點 (整理至 OxGKit 容器節點下並 DontDestroyOnLoad 常駐)。
  2. Cursor States 清單第一筆即為預設狀態ResetCursorState 會重置回第一筆狀態。

注意 狀態名稱屬於數據 (依 Inspector 上的 Cursor States 配置),並非常數;SetCursorState 傳入未定義的名稱會返回 false,開發時建議檢查返回值。


初始

方法總覽

方法說明
InitInstance初始 CursorManager 實例。

InitInstance

public static void InitInstance()

初始 CursorManager 實例 (查找場景上的實例,查無則自動建立),建議於遊戲啟動時呼叫。


顯示與鎖定

方法總覽

方法說明
IsCursorVisible檢查游標是否顯示。
SetCursorVisible設定游標顯示開關。
GetCurrentCursorLockState取得當前游標鎖定模式。
SetCursorLockState設定游標鎖定模式。

IsCursorVisible

public static bool IsCursorVisible()

檢查返回游標當前是否顯示 (即 Cursor.visible)。

SetCursorVisible

public static void SetCursorVisible(bool visible)

設定游標顯示開關 (即 Cursor.visible)。

GetCurrentCursorLockState

public static CursorLockMode GetCurrentCursorLockState()

取得當前游標鎖定模式 (即 Cursor.lockState)。

SetCursorLockState

public static void SetCursorLockState(CursorLockMode cursorLockMode)

設定游標鎖定模式 (NoneLockedConfined)。

// FPS 類操作 (隱藏並鎖定於畫面中心)
Cursors.SetCursorVisible(false);
Cursors.SetCursorLockState(CursorLockMode.Locked);

// 開啟選單時釋放
Cursors.SetCursorLockState(CursorLockMode.None);
Cursors.SetCursorVisible(true);

注意 WebGL 平台受瀏覽器限制,鎖定 (Locked) 需由用戶手勢 (點擊等) 觸發才會生效。


狀態管理

方法總覽

方法說明
GetAllCursorStates取得所有游標狀態。
GetCursorState取得指定名稱的游標狀態。
GetCurrentCursorState取得當前游標狀態。
SetCursorState依名稱切換游標狀態。
ResetCursorState重置回預設狀態 (清單第一筆)。

GetAllCursorStates

public static CursorManager.CursorState[] GetAllCursorStates()

取得所有已配置的游標狀態 (CursorState)。

GetCursorState

public static CursorManager.CursorState GetCursorState(string stateName)

取得指定名稱的游標狀態,查無返回 null;可用於運行時動態調整狀態參數 (貼圖、熱點、速率等)。

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

GetCurrentCursorState

public static CursorManager.CursorState GetCurrentCursorState()

取得當前游標狀態。

SetCursorState

public static bool SetCursorState(string stateName)

依名稱切換游標狀態並重置渲染,切換成功返回 true;查無該名稱返回 false

// 例如滑入敵人時切換攻擊游標
if (!Cursors.SetCursorState("Attack"))
Debug.LogWarning("Cursor state not found!");

ResetCursorState

public static void ResetCursorState()

重置游標狀態為預設狀態 (清單第一筆) 並重置渲染;也可用於 RemoveCursorRender 後恢復游標渲染。


渲染控制

方法總覽

方法說明
SetIgnoreScale設定動態游標動畫是否忽略 Time.timeScale。
SetScaleToAllCursors設定所有游標狀態的縮放比例並重置渲染。
ResetRender重置當前游標狀態的渲染。
RemoveCursorRender移除游標渲染 (恢復系統游標)。

SetIgnoreScale

public static void SetIgnoreScale(bool ignore)

設定動態游標動畫更新是否忽略 Time.timeScale (預設 true,使用 Time.unscaledDeltaTime 驅動);若需要游標動畫在遊戲暫停 (Time.timeScale = 0) 時持續播放,請保持為 true

SetScaleToAllCursors

public static void SetScaleToAllCursors(Vector2 scale)

設定所有游標狀態的縮放比例並重置渲染。

注意 縮放僅於該狀態啟用 scalingEnabledcursorMode 為 ForceSoftware 時才會生效。

ResetRender

public static void ResetRender()

重置當前游標狀態的渲染 (靜態游標重新套用貼圖;動態游標重置動畫參數重新播放)。

RemoveCursorRender

public static void RemoveCursorRender()

移除游標渲染 (將當前狀態置空並恢復系統預設游標)。

提醒 若要恢復自定義游標渲染,請呼叫 ResetCursorState 重新初始並重置渲染 (而非僅呼叫 SetCursorVisible)。