unity C#更改系统默认鼠标指针
最近项目需要替换鼠标的默认图标,实现的效果是初始状态为一种图标,点击鼠标左键要换成另一种图标,按网上通用的方法做了以后,隐藏鼠标指针,在指针的位置画一个图片就可以了,但不知道怎么回事,这种方法画的图标总是比真实鼠标的移动位置慢半拍,也就是有卡顿,鼠标移过去了缓一下画的图标才跟过来(这个问题在不同的电脑上卡顿程度不一样,估计是配置的问题)。
所以最近就实现了直接用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同级目录下
unity C#更改系统默认鼠标指针的更多相关文章
- 专治编译器编辑器vscode中文乱码输出 win10 配置系统默认utf-8编码
VS Code输出会出现乱码,很多人都遇到过.这是因为VS Code内部用的是utf-8编码,cmd/Powershell是gbk编码.直接编译,会把“你好”输出成“浣犲ソ”.如果把cmd的活动代码页 ...
- win10 配置系统默认utf-8编码
win10 配置系统默认utf-8编码 系统 win10 配置系统默认utf-8编码 Windows系统默认字符编码为gbk编码,开发项目编码一般为UTF-8,在我们执行程序及进行程序编码过程中编码 ...
- Unity 更改鼠标指针
1. 把鼠标指针图标导入到Unity中,把它的Texture Type改为Cursor : 2. 打开PlayerSettings面板,把鼠标指针图片拖到Default Cursor中: 3. 在场景 ...
- ubuntu系统默认源更改为阿里源
from:http://blog.csdn.net/minicto/article/details/62240020 ubuntu系统默认源更改为阿里源 ubuntu默认使用的国外的源,在更新的时候会 ...
- WPF如何更改系统控件的默认高亮颜色 (Highlight brush)
我们在用WPF时, 经常会对系统控件的默认高亮等等颜色进行更改. 以前通常是用controlTemplate来实现. 今天发现一个更合理或者简单的方法: 用系统默认颜色的key, 比如 SystemC ...
- CSS/HTML 改变鼠标指针形状
改变鼠标指针形状的方法有两种:第一种:用的来改变鼠标指针形状.另一种是:利用第三方控件的方法,而我自己最常用的是第一种:用css样式表来改变鼠标指针形状 我们先来看第一种:用来改变鼠标指针形状. 有些 ...
- 鼠标指针光标样式css cursor default pointer hand url
一.cursor语法与结构 1.cursor语法:cursor : auto | crosshair | default | hand | move | help | wait | text | w- ...
- Mac更换鼠标指针样式_mousecape教程
mousecape项目介绍 这是github上的一个项目,作者是alexzielenski. 项目是用于修改Mac系统鼠标样式的,支持动态鼠标样式. 该项目停止更新于2014年,目前仍可以被较新的系统 ...
- 利用Css3样式属性Cursor来更换自定义个性化鼠标指针(光标)
现而今,我们纵向的回顾整个大前端的历史,不难发现,人们对前端的审美要求越来越高,越来越严苛,与此同时,人们对追求美的体验是也极致的,从理性到感性,从平面到几何,从现实到虚拟,所以从某种角度来说,作为前 ...
随机推荐
- 视频编码器评测系统:VideoCodecRank
视频编码器领域一直有个比较复杂的问题:mpeg2.divx.xvid.mpeg4.vp8.vp9.x264.openh264.x265等等这一系列编码器到底哪个好?而对于同一种视频编码器,又包括了各种 ...
- 安卓程序员要拿到5000和1w的薪资,分别需要掌握哪些技术?
这个是我在逛知乎的时候发现的一个帖子,在这里小小的整理了一下,收集了一些评论,然后我分享出来,希望对自己还有同行有所帮助. 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 链接 ...
- sql中InnoDB和MyISAM的区别
InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型 1,MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持等高级处理,往往被认为只适合小项目:而 ...
- Android初级教程:shape的基本用法
转载本文请注明出处:http://blog.csdn.net/qq_32059827/article/details/52203347 点击打开链接 在自定义进度条之前,先来学习一下shape的用 ...
- GDAL使用插件方式编译HDF4、HDF5以及NetCDF的bug修改
GDAL库中提供了很方便的插件机制来扩展支持的数据格式,比如HDF4.HDF5.NetCDF.FileGDB.Postgre.Oralce等等.都可以通过插件的方式来使得GDAL支持相应的格式.最近将 ...
- (一一七)基本文件操作 -SDWebImage清除缓存 -文件夹的大小计算
在iOS的App沙盒中,Documents和Library/Preferences都会被备份到iCloud,因此只适合放置一些记录文件,例如plist.数据库文件.缓存一般放置到Library/Cac ...
- UNIX网络编程——TCP服务器“拒绝服务攻击” 解决方案
前面的博客<<使用select和shutdown>>里面的拒绝服务型攻击也有提到. 说这是一个完全的解决方案,其实有点夸大了,但这个方案确实可以缓解TCP服务器遭受" ...
- 【Unity Shaders】Transparency —— 透明的cutoff shader
本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...
- 【一天一道LeetCode】#111. Minimum Depth of Binary Tree
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...
- Dom4j修改xml文档引入
前面介绍了如何解析xnl文档的内容,这里对修改xml展开讨论. 一.首先看一下,写出内容到xml文档的主要代码: XMLWriter writer = new XMLWriter(OutputStre ...