包含此页的版本:
不含此页的版本:
事件函数是一组预定义的回调,所有 MonoBehaviour 脚本组件都可以接收这些回调。回调由各种 Unity 编辑器和引擎事件触发,包括:
在MonoBehaviour-派生类,以允许游戏对象对源事件做出反应。
有关可用回传的完整列表,请参阅 MonoBehaviour Scripting API 参考页面,它们列在 Messages 下。本节的其余部分概述了一些关键的事件函数组。
游戏就像动画一样,动画帧是动态生成的。游戏编程中的一个关键概念是在渲染每一帧之前更改对象的位置、状态和行为。这Update函数是 Unity 中此类代码的主要位置。Update在渲染帧之前以及计算动画之前调用。
void Update() {
float distance = speed * Time.deltaTime * Input.GetAxis("Horizontal");
transform.Translate(Vector3.right * distance);
}
物理系统也会以离散的时间步长进行更新,其方式与帧渲染类似。一个单独的事件函数,称为FixedUpdate在每次物理更新之前调用。由于物理更新和帧更新不会以相同的频率发生,因此如果将物理代码放在FixedUpdate函数而不是Update.
void FixedUpdate() {
Vector3 force = transform.forward * driveForce * Input.GetAxis("Vertical");
rigidbody.AddForce(force);
}
有时在Update和FixedUpdate函数已为场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
请参阅术语表,并在计算完所有动画后。此方案的一些示例包括:
这LateUpdate函数可用于此类情况。
void LateUpdate() {
Camera.main.transform.LookAt(target.transform);
}
能够在游戏过程中发生的任何更新之前调用初始化代码通常很有用。Start 函数在对象上的第一帧或物理更新之前调用。在场景加载时为场景中的每个对象调用 Awake 函数。请注意,尽管各种对象的Start和Awake函数以任意顺序调用,所有Awake将在第一个之前完成Start被称为。这意味着Start函数可以利用之前在Awake阶段。
Unity 有一个系统,用于在场景中的主要动作上渲染 GUI 控件,并响应对这些控件的点击。此代码的处理方式与正常帧更新略有不同,因此应将其放置在 OnGUI 函数中,该函数将定期调用。
void OnGUI() {
GUI.Label(labelRect, "Game Over");
}
您还可以检测在游戏对象Unity 场景中的基本对象,可以表示角色、道具、风景、相机、航路点等。游戏对象的功能由附加到它的组件定义。更多信息
请参阅术语表正如它出现在场景中一样。这可用于瞄准武器或显示当前鼠标指针下的角色信息。一组以前缀命名的事件函数OnMouse(例如,OnMouseOver、OnMouseDown)允许脚本使用鼠标对用户作做出反应。例如,如果在指针位于特定对象上时按下鼠标按钮,则OnMouseDown如果存在,则该对象脚本中的函数将被调用。
这物理引擎模拟物理系统各个方面的系统,使物体能够正确加速并受到碰撞、重力和其他力的影响。更多信息
请参阅术语表将报告碰撞当物理引擎检测到两个游戏对象的碰撞器接触或重叠时,当至少一个游戏对象具有刚体组件并且处于运动状态时,就会发生碰撞。更多信息
请参阅术语表通过调用对象脚本上的事件函数来对对象进行调用。OnCollisionEnter、OnCollisionStay 和 OnCollisionExit 函数将在接触建立、保持和断开时被调用。当对象的 碰撞体一种不可见的形状,用于处理对象的物理碰撞。碰撞体不需要与对象的网格体完全相同的形状 - 在游戏中,粗略的近似值通常更有效且难以区分。更多信息
请参阅术语表配置为 Trigger(即,一个碰撞器,它只是检测某物何时进入它,而不是做出物理反应)。如果在物理更新期间检测到多个接触,则可能会连续多次调用这些函数,因此将参数传递给函数,提供碰撞的详细信息(位置、传入对象的身份等)。
void OnCollisionEnter(Collision collision) {
if (collision.gameObject.tag == "Arrow") {
ApplyDamage(10);
}
}