文档章节

事件函数

LIndieGS
 LIndieGS
发布于 2017/05/21 00:04
字数 1002
阅读 34
收藏 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
程序员
私信 提问
【Qt笔记】event()

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

大道无名
2016/07/30
11
0
【Qt笔记】事件总结

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

大道无名
2016/07/30
15
0
跟我学jquery(六)jquery中事件详解 .

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

挨踢人生
2012/07/27
0
0
ExtJS框架基础:事件模型及其常用功能

前言 工作中用ExtJS有一段时间了,Ext丰富的UI组件大大的提高了开发B/S应用的效率。虽然近期工作中天天都用到ExtJS,但很少对 ExtJS框架原理性的东西进行过深入学习,这两天花了些时间学习了...

liujie_sun
2014/03/04
0
0
node.js中的事件处理机制及事件环机制

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

前端小虾
2016/10/28
160
0

没有更多内容

加载失败,请刷新页面

加载更多

深入解析JSON与XML优缺点对比

本文从各个方面向大家对比展示了json和xml的优缺点,十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 #1. 定义介绍 1.1 XML定义 扩展标...

前端攻城老湿
11分钟前
0
0
Vue 单页应用(spa)前端路由实现原理

一文搞懂单页应用原理Vue项目History模式路由机制 源码分析VueVueRouter Vue 单页应用(spa)前端路由实现原理 写在前面:通常 SPA 中前端路由有2种实现方式: window.history location.hash...

前端攻城小牛
13分钟前
0
0
Vuex的初探与实战小结

1.概述 每一个 Vuex 应用的核心就是 store(仓库)。“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state)。 Vuex 和单纯的全局对象有以下两点不同: 1.Vuex 的状态存储是响...

peakedness丶
15分钟前
0
0
CSS 背景图片全屏显示

<style> html { background: url(./static/login/xia.jpg) no-repeat center center fixed; -webkit-background-size: cover; -moz-background-size: cover; ......

SummerGao
18分钟前
0
0
Supplier函数式接口

Supplier接口的不传入参数,返回一个值。真是一个无私奉献的接口,还没有default方法。 下面就想用一个接口试试,其实我本来用的是IntSupplier,但是发现在使用方法引用的时候,不好把Math....

woshixin
33分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部