事件响应函数

Unity中函数基本是大写开头的,以下仅介绍部分API,其余可以在unity官网查找。

Awake :初始化,一开始(脚本实例化时)执行。

Start : 在Awake之后执行,第一次Update之前执行,用于准备工作。

Update :每一帧执行,它一般而言并不是稳定的,因为每次绘制耗时都不同。也就是我们常说的游戏的FPS。

FixedUpdate :固定时间执行,在做一些动画效果计算时需要精确的时间间隔,比如要考虑时间的物理仿真计算,如果在opengl中这个还需要自己手动写一个特定时间间隔执行的控制器,嵌入到update中,在u3d中就方便多了。

LateUpdate:所有Update之后调用。那为什么不直接写在Update之后呢,因为场景中有很多脚本,它们都要执行一边update,这个LateUpdate就是等它们都执行完了才去做。经常写异步语言的人都知道,在异步语言中做同步控制是很重要的,也就是保证多个事件执行的拓扑顺序,这个LateUpdate就有种同步控制的意思。

Reset:点击reset按钮时调用。

关于LateUpdate,Unity官网给了一个相机的例子,也就是要在所有物体都Update之后才移动相机,保证画面上物体都已显示。

[csharp] view plaincopy
  1. using UnityEngine;
  2. using System.Collections;
  3. public class ExampleClass : MonoBehaviour
  4. {
  5. void LateUpdate()
  6. {
  7. transform.Translate(0, Time.deltaTime, 0);
  8. }
  9. }

OnMouseOver :鼠标位于物体之上时调用。

OnMouseEnter:鼠标进入物体时调用。

OnMouseExit:鼠标离开物体时调用。

OnMouseUp:鼠标抬起时调用.

OnMouseDown :鼠标在物体上按下时调用。

OnMouseDrag:鼠标拖动物体时调用。

Unity官网给出的关于OnMouseOver和OnMouseEnter的例子:

[csharp] view plaincopy
  1. using UnityEngine;
  2. using System.Collections;
  3. public class ExampleClass : MonoBehaviour {
  4. public Renderer rend;
  5. void Start() {
  6. rend = GetComponent<Renderer>();
  7. }
  8. void OnMouseEnter() {
  9. rend.material.color = Color.red;
  10. }
  11. void OnMouseOver() {
  12. rend.material.color -= new Color(0.1F, 0, 0) * Time.deltaTime;
  13. }
  14. void OnMouseExit() {
  15. rend.material.color = Color.white;
  16. }
  17. }

将鼠标放在物体上,物体会变成红色,然后随着鼠标停留在物体上,红色慢慢变慢,离开后变成白色。

OnApplicationFocus:应用程序失去焦点时调用。经常写GUI的人应该很清楚焦点是个什么东西,在桌面平台上就是当你点击了某个窗口,窗口处在顶层且呈现激活态时。对于一些游戏,可以利用这个函数在玩家不再聚焦于游戏窗口时,暂停一些功能。

OnApplicationPause:应用程序暂停时调用。这个可以联想一下安卓开发,也有类似的几个API,当你离开游戏进入别的界面时,游戏虽然没有关闭,但是已经不是当前栈顶的项目了,如果你重新回到游戏界面,但是你的应用程序没有做状态保存(存档)操作的话,那么界面将会到初始化的状态。

OnApplicationQuit:应用程序退出时调用,这个应该不用多说了。

Unity官网样例:当程序暂停或失去焦点时,显示游戏暂停。

[csharp] view plaincopy
  1. using UnityEngine;
  2. public class AppPaused : MonoBehaviour
  3. {
  4. bool isPaused = false;
  5. void OnGUI()
  6. {
  7. if (isPaused)
  8. GUI.Label(new Rect(100, 100, 50, 30), "Game paused");
  9. }
  10. void OnApplicationFocus(bool hasFocus)
  11. {
  12. isPaused = !hasFocus;
  13. }
  14. void OnApplicationPause(bool pauseStatus)
  15. {
  16. isPaused = pauseStatus;
  17. }
  18. }

OnGUI : 绘制游戏界面时调用,也是比较常用的了,GUI这部分也有很多可以研究的,前面的例子正好就使用了GUI来画一个标签。

OnCollistionEnter:两个碰撞体/刚体开始重叠时调用。

OnCollisionExit :两个碰撞体/刚体不再重叠时调用。

OnCollisionStay:两个碰撞体/刚体保持重叠状态时调用(每帧)。

OnParticleCollision:粒子碰到碰撞体时调用。

OnTriggerEnter:碰撞体进入触发区域时调用。

OnTriggerExit:碰撞体离开触发区域时调用。

OnTriggerStay:碰撞体停留在触发区域时调用(每帧)。

(同时有2D版本的,直接在后面加上2D作为函数名即可)

Unity官网样例:碰撞后绘制接触点和法线,相对速度达到一定值播放声音。

[csharp] view plaincopy
  1. using UnityEngine;
  2. using System.Collections;
  3. public class ExampleClass : MonoBehaviour
  4. {
  5. AudioSource audio;
  6. void Start()
  7. {
  8. audio = GetComponent<AudioSource>();
  9. }
  10. void OnCollisionEnter(Collision collision)
  11. {
  12. foreach (ContactPoint contact in collision.contacts)
  13. {
  14. Debug.DrawRay(contact.point, contact.normal, Color.white);
  15. }
  16. if (collision.relativeVelocity.magnitude > 2)
  17. audio.Play();
  18. }
  19. }

OnBecomeInvisible:物体不被摄像机显示时调用。

OnBecomeVisible:物体被摄像机显示时调用。

OnPreRender:作用于摄像机,范围内开始渲染时调用。

OnPostRender:作用于摄像机,范围内渲染完成后调用。

OnPreCull:作用于摄像机,剔除场景后调用。

以下是部分网络模块:

OnConnectedToServer:连接到服务器时调用。

OnDisconnectedFromServer:从服务器断开时调用。

OnFailedToConnect / OnFailedToConnectToMasterServer:连接失败时调用。

OnPlayerConnected:玩家成功连接服务器调用。

OnPlayerDisConnected:玩家掉线时调用。

Unity官网的例子,也就是打印一下连线的玩家:

[csharp] view plaincopy
  1. using UnityEngine;
  2. using System.Collections;
  3. public class ExampleClass : MonoBehaviour {
  4. private int playerCount = 0;
  5. void OnPlayerConnected(NetworkPlayer player) {
  6. Debug.Log("Player " + playerCount + " connected from " + player.ipAddress + ":" + player.port);
  7. }
  8. }

Unity中鼠标的交互事件相关推荐

  1. tkinter中鼠标与键盘事件

    tkinter中鼠标与键盘事件(十五) 本文转自Tynam Yang的博客园 import tkinterwuya = tkinter.Tk() wuya.title("wuya" ...

  2. 【Unity】【Wwise】在Unity中获取某个Wwise事件的持续时间

    [Unity][Wwise]在Unity中获取某个Wwise事件的持续时间 解决方案 注意事项 边边角角 小吐槽 有一次接到这么一个需求:要在界面上显示出一段人物语音的长度,并且在播放的时候进行倒计时 ...

  3. Qt中鼠标的双击事件和单击事件的实现方式

    背景 同一个部件既要响应鼠标单击事件又要响应双击事件,而且两者响应的动作没有交集,跟不存在包含关系(如果双击事件动作包含单击事件的动作,那么只需要将双击事件特有的部分放到mouseDoubleClic ...

  4. 解决chrome浏览器中鼠标滚轮滚动事件失效的问题

    今天遇到了一个html5页面由于开启了图片遮罩层在chrome浏览器中,鼠标滚轮上下滚动时,页面不动的问题,后查询相关资料后解决,具体方法是加入如下代码: <script type=" ...

  5. Vue中鼠标移入移出事件-解析

    鼠标在li上移动也会触发移出事件 两组鼠标事件 mouseover 和 mouseout mouseenter 和 mouseleave mouseover 和 mouseout 什么时候使用说明 根 ...

  6. vue中鼠标移入移出事件种类以及区别

    1.@mouseover与@mouseout 鼠标经过时自身触发事件,其子元素同时也触发该事件. 父亲有的东西,儿子也有 ,支持冒泡. 适用于鼠标移入移出时子元素也会执行事件的场景,或者单一标签. 2 ...

  7. JavaScript中鼠标移入移出事件有哪些?区别是什么?

    1.onmouseover与onmouseout 鼠标经过时自身触发事件,其子元素同时也触发该事件. 父亲有的东西,儿子也有 ,支持冒泡. 2.onmouseenter与onmouseleave 鼠标 ...

  8. Unity中鼠标的锁定与解锁

    void Update(){// 当按下 A 键时,鼠标锁定并消失if (Input.GetKeyDown(KeyCode.A)){Cursor.lockState = CursorLockMode. ...

  9. Legolas工业自动化平台入门(三)交互事件响应动作

    在上一篇Legolas工业自动化平台入门(二)数据响应动作 一文中,我们介绍了"动作"相关内容,了解到"动作"分为多种,各种动作的添加方式相同,但是应用方式各自 ...

最新文章

  1. mongodb自带监控 mongostat数值说明
  2. 米家摄像头固件_小米摄像头被谷歌紧急封禁!别人的设备,能看到你家现场
  3. 数据结构-栈的顺序结构两种方式
  4. 风控策略和模型的区别_风控模型之产品赢利分析与策略优化
  5. mysql explain实践
  6. SAP Spartacus加载delivery国家列表的处理逻辑
  7. 三丰三坐标编程基本步骤_三丰三坐标CRYSTA APEX S776
  8. mesh渲染到ui_在Unity中使用UGUI修改Mesh绘制几何图形
  9. sql server 2005技术大全_3年2.16~3.2万吨!上机数控子公司与新疆大全签订多晶硅采购长单...
  10. 如何解析一个字符串并返回一个嵌套数组?
  11. 第一次冲刺-站立会议03
  12. Python实现粒子群(PSO)带惩罚函数多目标优化
  13. 视频接口:DP接口和HDMI接口介绍,看完你就懂了
  14. png在ai转为路径_ai怎么把png转换为路径
  15. BZOJ3420: Poi2013 Triumphal arch
  16. 网络接口 FE GE 10GE SFP
  17. sina vistor system
  18. android webview实现拍照
  19. and5.1PowerManagerService深入分析(三)updatePowerStateLocked函数
  20. 大数据面试题以及答案整理(面试必备)

热门文章

  1. c++ 复合命题打真值表
  2. ajax jqxhr,jquery ajax 之 jqXHR 和 Data Types详解
  3. 【STM32】引脚配置—F1与F4系列
  4. shell编程实例1--参数表示
  5. matlab有限元计算程序,MATLAB 有限元计算程序2
  6. 小白兔写话_小白兔的看图写话
  7. 关于DHCP原理与配置
  8. 2022年起重机司机(限桥式起重机)考题及答案
  9. 监控视频分发转发服务器性能,基于视频监控的分发服务器的研究与实现
  10. 索引(从零开始)必须大于或等于零,且小于参数列表的大小的错位问题