Unity3D中获取默认鼠标光标纹理及切换系统内置光标样式的方法
Unity3D中获取默认鼠标光标纹理及切换系统内置光标样式的方法
嗨,我来帮你解决这两个问题!你遇到的第一个问题是默认光标变量为空没法保存,第二个是想切换系统内置的光标样式,咱们一个个来搞定:
一、解决默认光标变量为空的问题,实现恢复默认光标
你原来的代码里defaultCursor没初始化就直接调用,肯定会是空值。其实Unity并没有直接提供获取系统默认光标纹理的API,但如果你的需求只是恢复到系统默认光标,根本不需要保存纹理,直接用下面这行代码就可以:
// 一键恢复到系统默认光标 Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto);
如果确实需要保存默认光标纹理(比如要做自定义修改),那可以在游戏启动时通过ReadPixels捕获当前光标,但这种方法比较麻烦,而且只有光标在游戏窗口内时才有效,参考代码如下:
private Texture2D defaultCursor; void Start() { // 创建一个适配标准光标大小的纹理 defaultCursor = new Texture2D(16, 16); // 捕获屏幕上光标位置的像素(这里假设初始光标在窗口中心,可根据实际调整) Rect cursorCaptureRect = new Rect(Input.mousePosition.x - 8, Screen.height - Input.mousePosition.y - 8, 16, 16); defaultCursor.ReadPixels(cursorCaptureRect, 0, 0); defaultCursor.Apply(); } // 后续恢复光标时调用 void RestoreDefaultCursor() { Cursor.SetCursor(defaultCursor, Vector2.zero, CursorMode.Auto); }
不过我更推荐第一种方法,直接传null恢复默认,简单又靠谱!
二、切换系统内置的光标样式(比如Pan、Arrow)
从Unity 2020.1版本开始,Unity新增了MouseCursor枚举,能直接设置系统内置的光标样式,完全不需要自定义纹理。用法超简单,直接调用Cursor.SetCursor的重载方法,传入对应的枚举值就行:
// 设置为系统默认箭头光标 Cursor.SetCursor(MouseCursor.Arrow); // 切换为平移操作光标 Cursor.SetCursor(MouseCursor.Pan); // 切换为文本输入光标 Cursor.SetCursor(MouseCursor.Text); // 其他比如ResizeHorizontal(水平缩放)、Rotate(旋转)等样式也可以这么用
如果你的Unity版本低于2020.1,那可能没有这个枚举。这种情况下,你可以用Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto)恢复默认箭头,其他特殊样式就只能用自定义纹理来实现啦。
备注:内容来源于stack exchange,提问作者Sharper




