You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动