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