[Unity] Unity Cursor 樣式設置和API解析

一直以來使用Unity沒有系統的使用 Unity Cursor 樣式等的修改,其實也就幾個變量和函數。現在做項目正好總結

CursorLockMode 枚舉,賦值變量:Cursor.lockState

  • CursorLockMode.None:無限制狀態(相對與後面兩個枚舉量)
  • CursorLockMode.Locked :鎖定後,光標將放置在視圖的中心,並且無法移動。不管Cursor.visible的值如何,在此狀態下,光標都是不可見的。按ESC鍵時,光標會暫時切換到None,當點擊鼠標時,又自動回到Locked模式。
  • CursorLockMode.Confined :當被限制時,除了被限制在視圖之外,光標的行爲正常。(即窗口模式下,鼠標無法出現在窗口外)
if (m_cursorLockMode == CursorLockMode.Locked)         //Pointer處於Locked狀態
    Cursor.lockState = m_cursorLockMode = CursorLockMode.Confined;

注意:上述代碼親測,發現當執行進入if將狀態從Locked改爲Confined時,Pointer雖然可見,但仍舊被鎖在屏幕中心。移動鼠標Pointer也不會移動。因此,建議Pointer顯隱用“Locked <—> None”兩者轉換。

CursorMode 枚舉,用於作爲SetCursor函數的參數

  • auto: 在支持的平臺上使用硬件渲染來渲染鼠標光標。
  • ForceSoftware:強制使用軟件遊標。

Cursor.visible Bool

鼠標的可見性

Cursor.SetCursor( Texture2D,Vector2, CursorMode )

  • Texture2D:鼠標更改的貼圖
  • Vector2:用貼圖左上角座標起始點。一般設爲Vector2.zero
  • CursorMode:該cursorMode參數允許您在支持的平臺上使用硬件光標,或強制對光標進行軟件渲染

若要更改整個項目的默認鼠標樣式可以在Edit->Project Setting->Player->Default Cursor中設置,將更改好的圖片拖拽賦值即可

我項目中的代碼示例:

  • 文件名:FPS_Cursor.cs
  • 有些變量已經在其他地方封裝(例如:input)
/*
*  編寫時間:2020.3.2
*  腳本內容:關於光標(Cursor)
*  修改記錄:
*              
*/
public class FPS_Cursor : MonoBehaviour
{
    [Header("光標貼圖")]
    public Texture2D m_cursorTex;

    [Header("光標狀態")]
    public CursorLockMode m_cursorLockMode;

    [Header("設置光標貼圖時使用")]
    public CursorMode m_cursorMode;

    //輸入模塊
    private FPS_Input input;

    private void Start()
    {
        //初始化變量
        input = GameObject
                .FindGameObjectWithTag(Tags.GameController)
                .GetComponent<FPS_Input>();

        Cursor.lockState = m_cursorLockMode;        //設置Point模式,默認鎖定
        Cursor.SetCursor(m_cursorTex, Vector2.zero, m_cursorMode); //設置Point樣式,
    }

    private void Update()
    {
        if(input.GetButtonDown(ConstString.ShowOrHideCursor))
        {
            if (m_cursorLockMode == CursorLockMode.Locked) //Point處於Locked狀態
                Cursor.lockState = m_cursorLockMode = CursorLockMode.None;
            else if (m_cursorLockMode == CursorLockMode.None) //Point處於Confined狀態
                Cursor.lockState = m_cursorLockMode = CursorLockMode.Locked;
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章