当前位置:丝路教程网 > Unity3D >

Unity3d更改系统默认鼠标指针

2016-11-04 10:08 来源: 丝路教程网 分类: Unity3D
486 作者:丝路教程网

[导读] 最近项目需要替换鼠标的默认图标,实现的效果是初始状态为一种图标,点击鼠标左键要换成另一种图标,按网上通用的方法做了以后,隐藏鼠标指针,在指针的位置画一个图片就可以

  最近项目需要替换鼠标的默认图标,实现的效果是初始状态为一种图标,点击鼠标左键要换成另一种图标,按网上通用的方法做了以后,隐藏鼠标指针,在指针的位置画一个图片就可以了,但不知道怎么回事,这种方法画的图标总是比真实鼠标的移动位置慢半拍,也就是有卡顿,鼠标移过去了缓一下画的图标才跟过来(这个问题在不同的电脑上卡顿程度不一样,估计是配置的问题)。

  所以最近就实现了直接用windows API改系统图标的方式,不过这种方式的劣点有2个:

  1、直接更改系统的鼠标图标,不只是针对某一个窗口,所以在程序退出时需要还原默认图标,不然鼠标一直是保持我们更改后的效果;

  2、只针对pc项目。

  一、导入包

  using System.Runtime.InteropServices;

  using System;

  二、光标资源加载函数

  /*光标资源加载函数

  * fileName为加载路径下的.cur文件

  */

  [DllImport("User32.DLL")]

  public static extern IntPtr LoadCursorFromFile(string fileName);

  三、设置系统指针函数

  /*设置系统指针函数(用hcur替换id定义的光标)

  * hcur用于表示指针或句柄的特定类型,可以用LoadCursorFromFile函数加载一个路径下的.cur指针文件

  * id是系统光标标识符,例:

  * OCR_APPSTARTING:标准箭头和小的沙漏;

  * OCR_NORAAC:标准箭头;

  * OCR_CROSS:交叉十字线光标;

  * OCR_HAND:手的形状(WindowsNT5.0和以后版本);

  * OCR_HELP:箭头和向东标记;

  * OCR_IBEAM:I形梁;

  * OCR_NO:斜的圆;

  * OCR_SIZEALL:四个方位的箭头分别指向北、南、东、西;

  * OCR_SIZENESEW:双箭头分别指向东北和西南;

  * OCR_SIZENS:双箭头,分别指向北和南;

  * OCR_SIZENWSE:双箭头分别指向西北和东南;

  * OCR_SIZEWE:双箭头分别指向西和东;

  */

  [DllImport("User32.DLL")]

  public static extern bool SetSystemCursor(IntPtr hcur, uint id);

  public const uint OCR_NORMAL = 32512;

  四、查询或设置的系统级参数函数(用于重置系统光标)

  /*查询或设置的系统级参数函数

  * uiAction该参数指定要查询或设置的系统级参数,SPI_SETCURSORS:重置系统光标

  * fWinIni该参数指定在更新用户配置文件之后广播SPI_SENDWININICHANGE消息

  */

  [DllImport("User32.DLL")]

  public static extern bool SystemParametersInfo(uint uiAction, uint uiParam, IntPtr pvParam, uint fWinIni);

  public const uint SPI_SETCURSORS = 87;

  public const uint SPIF_SENDWININICHANGE = 2;

  五、设置或恢复

  /*设置系统自带图标

  * SetSystemCursor(Cursors.WaitCursor.CopyHandle(), OCR_NORMAL);

  */

  /*设置外部图标文件

  * SetSystemCursor(hcur_normal, OCR_NORMAL);

  */

  public string path;

  void Start ()

  {

  path = UnityEngine.Application.dataPath;

  int num = path.LastIndexOf("/");

  path = path.Substring(0, num);

  }

  void FixedUpdate()

  {

  if (Input.GetMouseButtonDown(0))

  {

  //鼠标点击图标

  IntPtr hcur_click = LoadCursorFromFile(path + "/click.cur");

  SetSystemCursor(hcur_click, OCR_NORMAL);

  }

  if (Input.GetMouseButtonUp(0))

  {

  //正常状态图标

  IntPtr hcur_normal = LoadCursorFromFile(path + "/normal.cur");

  SetSystemCursor(hcur_normal, OCR_NORMAL);

  }

  }

  void OnApplicationQuit()

  {

  //恢复为系统默认图标

  SystemParametersInfo(SPI_SETCURSORS, 0, IntPtr.Zero, SPIF_SENDWININICHANGE);

  }

  六、将这个脚本挂在场景任意物体(全局不会销毁或隐藏的)上就可以了,再把你想替换的鼠标.cur文件click.cur和normal.cur(名字自定义)放在Assets同级目录下,好了本篇unity3d教程到此结束,下篇我们再会!


免责声明:

丝路教程网的部分文章信息来源于网络以及网友投稿,本网站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,如权利人发现存在误传其作品情形,请及时与本站联系。

Unity3d更改系统默认鼠标指针

的相关文章
Copyright © 2008-2017 blog.silucg.com 丝路教程网 版权所有 网站地图
点击这里给我发消息
丝路教育