在 C# 中更改鼠标光标图标

Change mouse cursor icon in C#

本文关键字:鼠标 光标 图标      更新时间:2023-10-16

我正在为 Windows PC 构建一个游戏,当用户在可点击的 UI 元素上时,我需要更改光标图标。我发现这个命令Cursor.SetCursor(texture2d, vector2)但它有一些滞后。

当鼠标悬停在UI元素上时,它会发生变化,但它有一些延迟,这真的很烦人(无论如何,这是其他用户对此的评价(。

经过一些阅读,我了解到Unity基本上只是在软件级别更改光标图标,即隐藏光标并显示我的图像,并使其遵循光标位置。

我的问题是:如何在硬件级别更改图标,再次仅在Windows版本中更改图标。

当我搜索"在 C# 中更改鼠标光标"时,我找到了 windows.forms 选项(在 Unity 中不起作用(和一个 c++ 代码,但它不是完整的(只有方法的名称(,我不知道如何在 C#中运行它......

SetCursor不能在所有Windows应用程序上运行良好,但是正确的方法。

Cursor.SetCursor(cursorTexture, hotSpot, cursorMode);

另一种方法是制作一个小假的隐藏鼠标光标并为您的需求情况制作 GUI 光标。您可以为要自定义的每个事件添加更多条件。

var OnMouseEnterCursor:Texture2D;
var cursorSizeX: int = 32;  // your cursor width
var cursorSizeY: int = 32;  // your cursor height
var MouseEnterCond = false;
function OnMouseEnter()
{
MouseEnterCond = true;
Screen.showCursor = false;
}
function OnMouseExit()
{
MouseEnterCond = false;
Screen.showCursor = true;
}
function OnGUI()
{
if(MouseEnterCond )
{
GUI.DrawTexture (Rect(Input.mousePosition.x-cursorSizeX/2 + cursorSizeX/2, (Screen.height-Input.mousePosition.y)-cursorSizeY/2 + cursorSizeY/2, cursorSizeX, cursorSizeY),OnMouseEnterCursor);
}
}

如果有一种方法可以在 Unity 中强制执行硬件光标,那么世界还没有找到它。

Unity 自己的文档对此进行了很好的解释: 通过您自己找到的功能,硬件光标在支持的平台上是首选的(请记住将光标模式设置为自动(,但它会自动且不受控制地回退到软件上以获得不受支持的平台和分辨率。

需要注意的重要一点是,在项目设置/播放器设置菜单中有一个称为"默认光标"的特殊字段(仅外围提及(。 这是Windows应用商店应用程序上唯一支持的硬件光标。

并记得将纹理设置为在其配置中键入"光标"。

最后,请记住,窗口仅支持 32x32 像素的大小。这可能会强制 Unity 在选择渲染类型时动手。

播放器设置中的默认光标设置在编辑器中有效,但未显示在构建中。还将纹理大小限制为 32x32。我通过在脚本中使用Cursor.SetCursor方法来更改光标来解决此问题。

[SerializeField] Texture2D cursor;
void Start() {
Cursor.SetCursor(cursor, Vector3.zero, CursorMode.ForceSoftware);
}