我们在用unity3d开发自己的游戏的时候。自己定义游戏中的鼠标也是常常要用到的。那我就得学学。事实上原理非常easy,先将鼠标给隐藏,然后在鼠标的位置上画出一个自己定义的鼠标贴图,这样看起来就像一个自己定义的鼠标。当然我这里利用的是跨平台方案,Unity的GUI效率不高。假设我们要用特定的某个平台的自己定义鼠标,那就去用特定的接口函数,这样效率会高一点。这里我写的就是一个跨平台方案,一种通用的方法。

举例:

假设是windows平台的话,我们假设要隐藏鼠标就用SetCursor()这种方法,

注意:

1.GUI坐标系的原点是在左上角,而屏幕坐标系採用的是一种OpenGL坐标系原点是在左下角,所以这就存在一个坐标转换的问题!

2.update()和FixedUpdate()的差别:

Update() 和 FixedUpdate()在游戏中都会在更新的时候自己主动循环调用。

可是Update是在每次渲染新的一帧的时候才会调用,也就是说,这个函数的更新频率和设备的性能有关以及被渲染的物体(能够觉得是三角形的数量)。在性能好的机器上可能fps 30,差的可能小些。

这会导致同一个游戏在不同的机器上效果不一致,有的快有的慢。由于Update的运行间隔不一样了。

而FixedUpdate,是在固定的时间间隔运行。不受游戏帧率的影响。

有点想Tick。

所以处理Rigidbody的时候最好用FixedUpdate。

PS:FixedUpdate的时间间隔能够在项目设置中更改。Edit->Project Setting->time  找到Fixed timestep。就能够改动了。

操作:

1.隐藏鼠标是:Screen.showCursor = false;

2.显示自己定义鼠标

  1. public Texture CursorTexture;
  2. void OnGUI()
  3. {
  4. Vector3 mousePos = Input.mousePosition;
  5. //由于GUI坐标系原点是左上角,而屏幕坐标系原点是在左下角,所以要转换
  6. GUI.DrawTexture(new Rect(mousePos.x-CursorTexture.width/2,Screen.height - mousePos.y-CursorTexture.height/2,CursorTexture.width,CursorTexture.height),CursorTexture);
  7. }

效果:

[Unity3d]定义自己的鼠标的更多相关文章

  1. unity提高----------射线使用【unity3d 怎样获得当前鼠标点击的对象】

    unity3d 怎样获得当前鼠标点击的对象 最佳答案   var ray = Camera.main.ScreenPointToRay (Input.mousePosition);var hit : ...

  2. 【转】Unity3D 入门小技巧——鼠标拾取并移动物体

    http://blog.csdn.net/sysujackjiao/article/details/69396274 一.鼠标拾取物体的原理 在Unity3D当中,想要在观察面(Aspect)中拾取物 ...

  3. unity3d游戏物体跟着鼠标方向移动

    效果:当点击鼠标左键时,游戏对象会朝鼠标点击的方向移动,类似魔兽争霸一样. 思路:把鼠标的坐标转化成世界坐标(鼠标默认是屏幕坐标),然后当点击鼠标时,物体将朝着鼠标的世界坐标方向移动. 如果你看到这的 ...

  4. [Unity3D]Unity3D游戏开发之鼠标滚轮实现放大缩小

    今天为大家分享的是在Rpg游戏中十分常见的鼠标滚轮调整摄像机视野效果.首先我们先创建一个游戏场景: 接下来我们编写一段脚本代码: [csharp] view plaincopyprint" ...

  5. 【Unity3D自学记录】鼠标移动三维物体

    创建一个脚本.例如以下: using UnityEngine; using System.Collections; public class OnMouse : MonoBehaviour { IEn ...

  6. unity3d的键盘和鼠标输入

    一.键盘的输入 •GetKey,GetKeyDown,GetKeyUp三个方法分别获取用户键盘按键的输入 1. GetKey:用户长按按键有效: bool down = Input.GetKeyDow ...

  7. (转载)【Unity3D学习】获取鼠标点击所对应的GameObject

    刚开始学习Unity 3D,新手遇到的坑都是泪对自由的抗争.直入主题~ 首先,为GameObject需要添加组件“Box Collider”. 然后,在脚本中的Update方法中添加如下代码. if( ...

  8. Unity3D移动平台动态读取外部文件全解析

    前言: 一直有个想法,就是把工作中遇到的坑通过自己的深挖,总结成一套相同问题的解决方案供各位同行拍砖探讨.眼瞅着2015年第一个工作日就要来到了,小匹夫也休息的差不多了,寻思着也该写点东西活动活动大脑 ...

  9. 在CSS中定义a:link、a:visited、a:hover、a:active顺序

    摘自:http://blog.snsgou.com/post-2.html     以前用CSS一直没有遇到过这个问题,在最近给一个本科同学做的项目里面.出现一些问题,搜索引擎查了一些网站和资料,发现 ...

随机推荐

  1. AIR学习教程(一)

    一.AIR的简单介绍 Adobe® AIR™ 为跨操作系统执行时,通过它能够利用现有 Web 开发技术(Adobe® Flash® CS3 Professional.Adobe® Flex™.HTML ...

  2. Java调用摄像头截图

    使用webcam-capture替换JMF调用摄像头 最近有个需要通过java调用摄像头,并截图的需求,在网上找了下资料,大部分是用一个叫jmf的库,但是jmf已经几百年没有更新,用起来各种问题.后来 ...

  3. python import media模块

    安装PyGraphics包 (python import media模块)有一段代码要import media,打开python自带的IDLE,输入: >>>import media ...

  4. Linux虚拟文件系统VFS解决

    参考<Linux内核设计与实现> 虚拟文件系统(VFS)它是linux核心和详细I/O一个普通的访问接口之间的包装设备,通过这层界面,linux内核能够以同一的方式訪问各种I/O设备. 虚 ...

  5. CodeForces 343D 线段树维护dfs序

    给定一棵树,初始时树为空 操作1,往某个结点注水,那么该结点的子树都注满了水 操作2,将某个结点的水放空,那么该结点的父亲的水也就放空了 操作3,询问某个点是否有水 我们将树进行dfs, 生成in[u ...

  6. ThinkPHP实现用户登录

    ThinkPHP实现用户登录 ? //默认url入口 ? class IndexAction extends Action{ function index() { //检查用户是否登录 if(isse ...

  7. Objective-C之成魔之路【9-类构造方法和成员变量作用域、以及变量】

    郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 构造方法 ...

  8. Linux 该文件命令查看内容

    Linux系统,请使用以下命令来查看文件的内容: cat tac  从最后一行開始显示.能够看出 tac 是 cat 的倒著写! nl   显示的时候,顺道输出行号! more 一页一页的显示文件内容 ...

  9. NET的可运行于树莓派

    Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器   最近在业余时间玩玩树莓派,刚开始的时候在树莓派里写一些基于wiringPi库的C语言程序来控制树莓派的GPIO引脚,从而控制 ...

  10. 很多Python新手教程

    重要提示 这不是一个教程新手程序员准备,你担任很快编程,或者没有使用1至2程序设计语言,请移步!这是一些编程经验准备.它最出名Java或C,理解命令行,Shell等待.简而言之,面向老鸟的,让老鸟高速 ...