文档章节

事件函数

LIndieGS
 LIndieGS
发布于 2017/05/21 00:04
字数 1002
阅读 21
收藏 0
点赞 0
评论 0

原文链接:https://docs.unity3d.com/Manual/EventFunctions.html

    在Unity中,脚本不像传统意义的程序。那些程序都在一个循环里不停地地运行,直到它完成了自己的工作。相反的,Unity通过调用已声明了的函数,间歇性地把控制权交给脚本。一旦一个函数执行结束,控制权又交还给Unity。这些函数被称为事件函数(event function),因为它们只在响应一个事件时被激活。 Unity使用了一套命名方案去区别那个函数去执行那个事件。比如,你已经见过的Update函数(在更新每一帧前调用)。Start函数(仅在对象的第一帧前调用)。详情见:MonoBehavior类的脚本指南,里面有所有函数的详细用法。下面介绍一些最常见的事件函数。

有规律的更新事件

    游戏更像是动画,频繁地生成一帧一帧的画面。游戏编程中,最核心的概念是在每一帧被渲染前,制造位置,状态和物体行为的变化。Update()函数就是放这些代码最主要的地方。Update函数在每一帧被渲染前调用,也在动画被计算出来前调用。

void Update() {
    float distance = speed * Time.deltaTime * Input.GetAxis("Horizontal");
    transform.Translate(Vector3.right * distance);
}

    游戏的物理引擎刷新画面是在不连续的时间进行的。一个单独的函数叫FixedUpdate()就仅在每一次物理刷新前被调用。因为物理事件的刷新和每一帧的刷新不会以同样的频率出现,比如在处理类似RigidBody的事件时,把代码放在FixedUpdate里就会得到更加好的效果。

void FixedUpdate() {
    Vector3 force = transform.forward * driveForce * Input.GetAxis("Vertical");
    rigidbody.AddForce(force);
}

      有时,在Update()函数和FixedUpdate()函数被调用后或者在所有的动画被计算出来后,允许做一些变化也是很有必要的。比如,游戏中的相机跟踪目标对象,脚本代码改变一个动画的效果(使角色的头朝向场景中的目标对象)。LateUpdate()函数就被用于这样的情况下。

oid LateUpdate() {
    Camera.main.transform.LookAt(target.transform);
}

初始化事件  

      在游戏设计中,调用初始化代码并先于所有画面刷新是经常使用的。Start()函数就是先于第一帧或第一次物理更新前调用。Awake()函数在脚本实例被载入时调用。值得注意的是,虽然不同的物体的Start()和Awake()能以任意顺序调用,但是所有的Awake()都在Start()调用之前完成。这意味着,在Start()中的代码能够使用在Awake()里初始化的数据。

GUI事件    

    Unity有一套系统去渲染在场景中的GUI控件和响应点击这些控件。这些代码有点不同于普通的帧刷新代码,所以它必须放在OnGUI()函数中,OnGUI()函数会被周期性的调用。

void OnGUI() {
    GUI.Label(labelRect, "Game Over");
}

      你也可以用它侦查鼠标事件。比如武器瞄准或显示当前鼠标指针指向角色的信息。可以设置OnMouseXXX()事件函数(比如:OnMouseOver ,OnMouseDown)允许脚本对玩家鼠标行为起反应。比如,如果鼠标按钮被点击,这是在它指针所指向的对象脚本中的OnMouseDown()函数就会被调用。

物理事件

       物理引擎反馈物体的碰撞(collision)通过调用物体上的事件函数来实现。OnCollisionEnter(),OnCollisionStay()和OnCollisionExit()函数在物体被接触,抓取和损毁时调用。这和OnTriggerEnter(),OnTriggerStay()和OnTriggerExit()函数一样,在物体的碰撞框被设置成触发器(Trigger)时调用。如果超过有多个接触在物理更新中发生,这些函数可能被连续调用数次。因此当一个参数被传进函数时,就给了给物体碰撞的详情(如:位置,进入物体的身份等等)。

void OnCollisionEnter(otherObj: Collision) {
    if (otherObj.tag == "Arrow") {
        ApplyDamage(10);
    }
}

                                                                     

© 著作权归作者所有

共有 人打赏支持
LIndieGS
粉丝 0
博文 9
码字总数 6421
作品 0
程序员
jQuery 事件方法

jQuery 事件方法 事件方法会触发匹配元素的事件,或将函数绑定到所有匹配元素的某个事件。 触发实例: $("button#demo").click() 上面的例子将触发 id="demo" 的 button 元素的 click 事件。...

云中不知人 ⋅ 2017/04/20 ⋅ 0

【Qt笔记】事件总结

Qt 的事件是整个 Qt 框架的核心机制之一,也比较复杂。说它复杂,更多是因为它涉及到的函数众多,而处理方法也很多,有时候让人难以选择。现在我们简单总结一下 Qt 中的事件机制。 Qt 中有很...

大道无名 ⋅ 2016/07/30 ⋅ 0

jQuery(三)jQuery事件执行/简单事件/复合事件

jQuery事件执行 写在前面,jquery代码执行时机对比:$(docuemnt).ready(function(){xxx 代码}); 与window.onload()=function(){xxx 代码}的区别。 window.onload()程序是等所有文件都下载完成...

年少爱追梦 ⋅ 2016/06/05 ⋅ 0

node.js中的事件处理机制及事件环机制

EventEmitter类 在node.js的用于实现各种事件处理的event模块中,定义了一个EventEmitter类。所有可能触发事件的对象都是一个继承了EventEmitter类的子类的实例对象。EventEmitter定义了许多...

前端小虾 ⋅ 2016/10/28 ⋅ 0

【Qt笔记】event()

前面的章节中我们曾经提到函数。事件对象创建完毕后,Qt 将这个事件对象传递给的函数。函数并不直接处理事件,而是将这些事件对象按照它们不同的类型,分发给不同的事件处理器(event handl...

大道无名 ⋅ 2016/07/30 ⋅ 0

jQuery Event.stopPropagation() 函数详解

函数用于阻止当前事件在DOM树上冒泡。 根据DOM事件流机制,在元素上触发的大多数事件都会冒泡传递到该元素的所有祖辈元素上,如果这些祖辈元素上也绑定了相应的事件处理函数,就会触发执行这...

zh151832 ⋅ 2016/12/01 ⋅ 0

事件Qevent的接受和忽略 和重定义 事件过滤器

事件处理流程: 某个事件发生------>exec()循环会接收到这个事件------> 创建一个事件对象,并将对象传递给QObject::event()------> 在QWidget::event()函数中,分配给特定的事件处理函数---...

晨曦之光 ⋅ 2012/04/13 ⋅ 0

jQuery学习四 事件与事件对象

一.摘要 事件是脚本编程的灵魂. 所以本章内容也是jQuery学习的重点. 本文将对jQuery中的事件处理以及事件对象进行详细的讲解. .事件与事件对象 首先看一下我们经常使用的添加事件的方式: <!D...

天行健J ⋅ 2012/12/10 ⋅ 0

Java程序员从笨鸟到菜鸟之(九十)跟我学jquery(六)jquery中事件详解

由于jquery本身就是web客户端的有力帮手,所以事件对于它来说就显得尤为重要了,事件是脚本编程的灵魂. 所以此内容也是jQuery学习的重点。 在传统的javascript中,注册一个事件也是非常简单的...

长平狐 ⋅ 2012/11/12 ⋅ 0

跟我学jquery(六)jquery中事件详解 .

由于jquery本身就是web客户端的有力帮手,所以事件对于它来说就显得尤为重要了,事件是脚本编程的灵魂. 所以此内容也是jQuery学习的重点。 在传统的javascript中,注册一个事件也是非常简单的...

挨踢人生 ⋅ 2012/07/27 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

tcp/ip详解-链路层

简介 设计链路层的目的: 为IP模块发送和接收IP数据报 为ARP模块发送ARP请求和接收ARP应答 为RARP模块发送RARP请求和接收RARP应答 TCP/IP支持多种链路层协议,如以太网、令牌环往、FDDI、RS-...

loda0128 ⋅ 52分钟前 ⋅ 0

spring.net aop代码例子

https://www.cnblogs.com/haogj/archive/2011/10/12/2207916.html

whoisliang ⋅ 今天 ⋅ 0

发送短信如何限制1小时内最多发送11条短信

发送短信如何限制1小时内最多发送11条短信 场景: 发送短信属于付费业务,有时为了防止短信攻击,需要限制发送短信的频率,例如在1个小时之内最多发送11条短信. 如何实现呢? 思路有两个 截至到当...

黄威 ⋅ 昨天 ⋅ 0

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 昨天 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 昨天 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 昨天 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 昨天 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 昨天 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 昨天 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部