unity3d 脚本的变量+事件函数

变量

就是指的类的成员变量,仅仅只是在unity这里将成员变量设为公有的时候,将其附加到游戏对象后,能够在游戏对象的监视面板中的脚本组件那栏里面看到该公有变量,也就是说能够在编辑器里面直接对该公有变量进行赋值,同一时候在debug状态下也能够在面板中看到它的值。

unity在编辑器中显示类的成员变量的时候,在类名中遇到(不是第一个字母的)大写字母的时候,会在该字母前增加一个空格,比如在类里面定义个公有成员变量名为”TestVar”,在编辑器中显示的变量名为”Test Var”,中间加了一个空格,可是这仅仅是一个unity显示变量的方式,真正在代码中訪问这个变量仍然应该使用”TestVar”这个名字。

事件函数

unity中的脚本并不像传统意义上的程序,即在一个循环中连续的执行直到完毕任务后再退出,而是unity通过调用定义在脚本内的某个函数,间断的将控制权交给一个脚本。一旦一个函数完毕执行,控制权被交还给unity。这些函数就是所知的事件函数,由于它们由unity调用用于响应发生在游戏过程中的事件。unity支持的全部事件都定义在MonoBehaviour这个里面,能够在该类的 參考文档中看到一系列的事件。以下介绍几个最常见、最重要的事件。

 

<1> 常规更新事件(Regular Update Events)

一个游戏更像一个在线生成动画帧的动画。游戏编程中的一个关键观念就是在每帧渲染前对游戏对象的位置、状态和行为进行改变。Update函数是unity中放置这类代码的主要地方,它在每帧被渲染前、同一时候也在动画被计算前调用。

update事件函数

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

物体引擎也以一个和帧渲染类似的方式每隔一个离散时间段进行更新。还有一个叫FixedUpdate的函数在每次物理更新之前调用。因为物理更新和帧更新并不使用同样的频率更新,假设将上面的代码放到FixedUpdate函数而不是Update函数的话,能够得到更加精确的结果(即FixedUpdate会以一个比Update更加稳定的帧率执行)。

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

同一时候在场景中全部对象的Update和FixedUpdate调用之后,以及全部的动画计算之后仍然可能有须要进行一些额外的改变。一个样例就是在一个摄像头须要监视一个目标对象的时候,对摄像机朝向的调整必须在目标对象已经移动之后。还有一个样例是在在须要用脚本代码来覆盖动画效果的场合(比方,使角色的头看向场景中的目标对象)。LateUpdate函数能够用于这些场合。

<2>  初始化事件

在游戏中的不论什么更新函数之前调用初始化代码是经经常使用到的,初始化函数Start在物体的第一帧更新或者物理更新之前被调用。Awake函数在场景被载入的时候,场景中的每一个对象上的该函数都会被调用,全部的Awake函数都会在第一个Start函数(有好多对象的话就有好多个Start函数)调用之前被调用。这就意味着Start函数中的代码也能够使用发生在Awake阶段里面的初始化后的数据。

<3> GUI事件

unity有一个用于渲染GUI控件的系统,这些GUI控件处于场景之上而且响应鼠标事件。这个代码处理起来和常规的帧更新有些不大一样,因而它须要放到OnGUI函数中,周期性的被调用。

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

同一时候当发生鼠标单击场景中的游戏对象的时候能够检測这些消息。这个能够用于调整武器或者显示当前在鼠标以下的角色信息。一系列的OnMouseXXX事件函数能够用于和用户的鼠标行为交互。

<4>物理事件

物理引擎会通过调用物体上的事件函数来报告发生的与还有一物体的碰撞事件。OnCollisionEnter、OnCollisionStay和OnCollisionExit函数分别在刚接触,持续和离开(broken)的时候调用。当碰撞器被配置成触发器的时候发生碰撞后相应的OnCollisionEnter、OnCollisionStay和OnCollisionExit会被调用。假如在物理更新期间有多于一个接触被检測到这些函数可能会被多次按顺序调用(即调用完一轮再来一轮)。

未经允许不得转载:Unity3D » unity3d 脚本的变量+事件函数

赞 (1)