一直以來使用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;
}
}
}