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

时间:2019-12-16 06:46:29

标签: c# c++ unity3d mouse-cursor

我正在为Windows PC开发游戏,当用户将鼠标悬停在可单击的UI元素上时,我需要更改光标图标。我已经找到了该命令Cursor.SetCursor(texture2d, vector2),但存在一些延迟。

当鼠标悬停在UI元素上时,它会更改,但会有些延迟,这确实很烦人(无论如何,这是其他用户所说的话。)

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

我的问题是:如何仅在Windows构建中更改硬件级别的图标。

当我搜索“在 C#中更改鼠标光标”时,我发现了windows.forms选项(不能统一使用)和c ++代码,但它并不完整(仅方法的名称),而我不知道如何在C#中运行它……

3 个答案:

答案 0 :(得分:0)

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);
    }
}

答案 1 :(得分:0)

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

Unity的own documentation对此进行了很好的解释: 您可以通过自己发现的功能在支持的平台上使用硬件游标(请记住将游标模式设置为auto),但是硬件游标将自动不受控制地依赖于不受支持的平台和分辨率的软件。

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

请记住,将纹理设置为在其配置中键入“光标”。

最后,请记住windows only supports the 32x32px size。选择渲染类型时,这可能会迫使Unity伸出手。

答案 2 :(得分:0)

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

[SerializeField] Texture2D cursor;

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