Unity生命周期函数详解

news2024/11/26 18:51:22

Unity生命周期函数详解

Unity生命周期函数是Unity引擎中用于控制游戏对象行为的一系列方法。它们在游戏的不同阶段被自动调用,允许开发者在适当的时机执行特定的代码。了解和正确使用生命周期函数对于创建流畅和高效的游戏至关重要。

生命周期函数概述

Unity生命周期函数分为几个主要类别,包括:

  • 初始化函数:在游戏对象首次创建时调用。
  • 更新函数:在每一帧被调用,用于处理游戏逻辑和物理。
  • 渲染函数:在渲染每一帧时调用,用于处理图像渲染。
  • 事件处理函数:响应用户输入和游戏事件。
  • 销毁函数:在游戏对象被销毁时调用。

主要生命周期函数详解

Awake

Awake 是Unity中最早被调用的生命周期函数之一,它在游戏对象被实例化后立即执行,并且只会执行一次。这个函数通常用于初始化变量和注册事件监听器。

void Awake() {
    // 初始化代码
}

Start

Start 函数在所有Awake函数执行完毕后调用,同样只会执行一次。与Awake不同,Start可以被用来调用其他游戏对象的Awake函数,这在需要跨对象通信时非常有用。

void Start() {
    // 启动代码
}

Update

Update 是Unity中的核心生命周期函数,它在每一帧结束后被调用。这个函数用于处理游戏逻辑,如移动、碰撞检测和输入响应。

void Update() {
    // 每帧更新的代码
}

FixedUpdate

FixedUpdate 与Update类似,但它以固定时间步长被调用,不受帧率影响。这使得它非常适合处理物理和需要精确时间控制的逻辑。

void FixedUpdate() {
    // 固定时间步长更新的代码
}

LateUpdate

LateUpdate 在所有Update和FixedUpdate函数执行完毕后调用。它可以用来执行那些需要在所有其他更新之后发生的操作,如摄像机跟随。

void LateUpdate() {
    // 延迟更新的代码
}

OnDestroy

OnDestroy 在游戏对象被销毁之前调用,是清理资源和注销事件监听器的理想位置。

void OnDestroy() {
    // 销毁前的清理代码
}

使用生命周期函数的最佳实践

  • 避免在Awake中调用其他游戏对象的Awake:这可能导致初始化顺序问题。
  • 使用Update进行逻辑处理:如移动和输入响应。
  • 使用FixedUpdate进行物理处理:如刚体的力和速度更新。
  • 在OnDestroy中清理资源:如注销事件监听器和释放资源。

Unity脚本所有生命周期函数


void Update()
{
    //当MonoBehaviour启用时,其Update在每一帧被调用。
}

void LateUpdate()
{

    //当Behaviour启用时,其LateUpdate在每一帧被调用。

}
void FixedUpdate()
{

    //当MonoBehaviour启用时,其 固定时间调用一次

}

void Awake()
{

    //当一个脚本实例被载入时Awake被调用。

}

void Start()
{

    //Start仅在Update函数第一次被调用前调用。


}

void Reset()
{

    //重置为默认值。

}

void OnMouseEnter()
{

    //当鼠标进入到GUIElement(GUI元素)或Collider(碰撞体)中时调用OnMouseEnter。

}

void OnMouseOver()
{

    //当鼠标悬浮在GUIElement(GUI元素)或Collider(碰撞体)上时调用 OnMouseOver .

}

void OnMouseExit()
{

    //当鼠标移出GUIElement(GUI元素)或Collider(碰撞体)上时调用OnMouseExit。

}

void OnMouseDown()
{

    //当鼠标在GUIElement(GUI元素)或Collider(碰撞体)上点击时调用OnMouseDown。
}



void OnMouseUp()
{

    //当用户释放鼠标按钮时调用OnMouseUp。

}

void OnMouseUpAsButton()
{

    //OnMouseUpAsButton只有当鼠标在同一个GUIElement或Collider按下,在释放时调用。

}

void OnMouseDrag()
{

    //当用户鼠标拖拽GUIElement(GUI元素)或Collider(碰撞体)时调用 OnMouseDrag 。

}

void OnTriggerEnter()
{

    //当Collider(碰撞体)进入trigger(触发器)时调用OnTriggerEnter。

}

void OnTriggerExit()
{

    //当Collider(碰撞体)停止触发trigger(触发器)时调用OnTriggerExit。


}
void OnTriggerStay()
{

    //当碰撞体接触触发器时,OnTriggerStay将在每一帧被调用。

}

void OnCollisionEnter()
{

    //当此collider/rigidbody触发另一个rigidbody/collider时,OnCollisionEnter将被调用。

}

void OnCollisionExit()
{

    //当此collider/rigidbody停止触发另一个rigidbody/collider时,OnCollisionExit将被调用。
}


void OnCollisionStay()
{

    //当此collider/rigidbody触发另一个rigidbody/collider时,OnCollisionStay将会在每一帧被调用。

}

void OnControllerColliderHit()
{

    //在移动的时,当controller碰撞到collider时OnControllerColliderHit被调用。


}
void OnJointBreak()
{

    //当附在同一对象上的关节被断开时调用。

}

void OnParticleCollision()
{

    //当粒子碰到collider时被调用。

}

void OnBecameVisible()
{

    //当renderer(渲染器)在任何相机上可见时调用OnBecameVisible。

}

void OnBecameInvisible()
{

    //当renderer(渲染器)在任何相机上都不可见时调用OnBecameInvisible。

}

void OnLevelWasLoaded()
{

    //当一个新关卡被载入时此函数被调用。


}
void OnEnable()
{

    //当对象变为可用或激活状态时此函数被调用。
}


void OnDisable()
{

    //当对象变为不可用或非激活状态时此函数被调用。

}

void OnDestroy()
{

    //当MonoBehaviour将被销毁时,这个函数被调用。


}
void OnPreCull()
{

    //在相机消隐场景之前被调用。
}


void OnPreRender()
{

    //在相机渲染场景之前被调用。
}


void OnPostRender()
{

    //在相机完成场景渲染之后被调用。

}

void OnRenderObject()
{

    //在相机场景渲染完成后被调用。
}


void OnWillRenderObject()
{

    //如果对象可见每个相机都会调用它。
}


void OnGUI()
{

    //渲染和处理GUI事件时调用。
}


void OnDrawGizmosSelected()
{

    //如果你想在物体被选中时绘制gizmos,执行这个函数。

}

void OnDrawGizmos()
{

    //如果你想绘制可被点选的gizmos,执行这个函数。

}

void OnApplicationPause()
{

    //当玩家暂停时发送到所有的游戏物体。
}


void OnApplicationFocus()
{

    //当玩家获得或失去焦点时发送给所有游戏物体。

}

void OnApplicationQuit()
{

    //在应用退出之前发送给所有的游戏物体。

}

void OnPlayerConnected()
{

    //当一个新玩家成功连接时在服务器上被调用。
}


void OnServerInitialized()
{

    //当Network.InitializeServer被调用并完成时,在服务器上调用这个函数。

}

void OnConnectedToServer()
{

    //当你成功连接到服务器时,在客户端调用。

}

void OnPlayerDisconnected()
{

    //当一个玩家从服务器上断开时在服务器端调用。

}

void OnDisconnectedFromServer()
{

    //当失去连接或从服务器端断开时在客户端调用。

}

void OnFailedToConnect()
{

    //当一个连接因为某些原因失败时在客户端调用。

}


void OnFailedToConnectToMasterServer()
{

    //当报告事件来自主服务器时在客户端或服务器端调用。
}


void OnMasterServerEvent()
{

    //当报告事件来自主服务器时在客户端或服务器端调用。

}

Unity中文API参考手册完整版下载

Unity API参考手册是Unity开发者的宝贵资源,它提供了Unity引擎中所有类、接口、结构体、枚举和委托的详细文档。这份手册对于理解Unity的内部工作原理、使用Unity提供的各种功能以及扩展Unity的能力至关重要。
Unity圣典
Unity圣典
链接:https://pan.baidu.com/s/1S6Ezqou2i8Z4NpWrffii7g?pwd=umms
提取码:umms

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1669118.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

变量的解构赋值

变量的解构赋值 数组的解构赋值对象解构赋值 对象的解构与数组有一个重要的不同。嵌套结构的对象 字符串的解构赋值数值和布尔值的解构赋值函数参数的解构赋值 变量的解构赋值用途 交换变量的值从函数返回多个值函数参数的定义提取JSON数据设置默认值遍历Map和Set不完全解构输入…

TM1650 并联在I2C 信号线的处理方法

目的是可以并联多个TM1650 在标准I2C 总线上,并且不影响其他标准I2C 器件。思路就是拿个额外的开关控制每一片TM1650 的使能,就像SPI 的CS 信号那样。 协议 TM1650 的通信协议虽说不是标准I2C,但也算是比较兼容的,比方说&#x…

azkaban-tools 项目介绍

本文背景 应一个用户的好心和好奇心,在最近水深火热的百忙之中抽时间写完了一个简短的项目介绍,其实就是几个azkaban的批量操作脚本,但在大数据集群的“运维生涯”中,还是帮了自己不少忙,也算是为了它做一个简单的回顾…

SpringBoot集成jxls2实现复杂(多表格)excel导出

核心依赖 需求 导出多个表格,包含图片,类似商品标签 1.配置模板 创建一个xlsx的模板文件,配置如下 该模板进行遍历了两次,因为我想要导出的数据分为两列展示,左右布局,一个循环实现不了,所以采…

重学JavaScript高阶知识点(三)—— 详解Js中的内存管理

详解Js中的内存管理 1. 简介2. 内存生命周期3. JavaScript 的内存分配4. 垃圾回收 1. 简介 很多底层语言一般都有底层的内存管理接口,比如 C语言,可以调用对应的API去创建和释放内存空间。意思是需要手动去创建和释放内存空间,很明显&#x…

TCP服务器实现将客服端发送的信息广播发送(使用内核链表管理客户端信息)

目录 1.服务器端实现思路 2.服务器端代码 3.客户端代码 4.内核链表代码 5.运行格式 一、服务器端 二、客户端 6.效果 1.服务器端实现思路 Tcp广播服务初始化 等待客户端连接 广播发送 2.服务器端代码 #include "list.h" #include <signal.h> #def…

如何解决IntelliJ IDEA中pom.xml依赖项引发的安全漏洞黄线警告问题

背景 在开发过程中&#xff0c;当我们在pom.xml文件中添加依赖项时&#xff0c;经常会发现IntelliJ IDEA报出黄色警告线条&#xff0c;提示存在潜在的安全漏洞。警告的具体展现形式如下&#xff1a; 解决方案 首先&#xff0c;打开设置菜单界面&#xff0c;接着选择编辑器选…

神经网络复习--神经网络算法模型及BP算法

文章目录 神经网络模型的构成BP神经网络 神经网络模型的构成 三种表示方式&#xff1a; 神经网络的三要素&#xff1a; 具有突触或连接&#xff0c;用权重表示神经元的连接强度具有时空整合功能的输入信号累加器激励函数用于限制神经网络的输出 感知神经网络 BP神经网络 …

[嵌入式系统-75]:RT-Thread-快速上手:正点原子探索者 STM32F407示例

目录 正点原子探索者 STM32F407 上手指南 1. 简介 2. 准备工作 3. 运行第一个示例程序 3.1 编译下载 3.2 运行 继续学习 正点原子探索者 STM32F407 上手指南 1. 简介 探索者 STM32F407 是正点原子推出的一款基于 ARM Cortex-M4 内核的开发板&#xff0c;最高主频为 16…

机器人学导论实验2-差速驱动机器人的运动学与控制BJTU

目录 机器人导论实验-差速驱动机器人的运动学与控制 1 实验目的 2 任务一&#xff1a;前馈控制 2.1 内容分析 2.2 过程分析 2.3 结果分析 3 任务二&#xff1a;闭环控制 3.2 过程分析 3.3 结果分析 4 任务三&#xff1a;闭环控制&#xff08;改进&#xff09; 4.1 内容分…

Kotlin: ‘return‘ is not allowed here

报错&#xff1a;以下函数的内部函数return语句报错 Kotlin: return is not allowed here fun testReturn(summary: (String) -> String): String {var msg summary("summary收到参数")println("test内部调用参数&#xff1a;>结果是 &#xff1a;${msg…

(四十)第 6 章 树和二叉树(树的双亲表存储)

1. 背景说明 2. 示例代码 1) errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strrch…

项目管理-计算题公式-补充【复习】

1.EMV决策树 定义&#xff1a;用决策树在若干备选行动方案中选择一个最佳方案。在决策树 中&#xff0c;用不同的分支代表不同的决策或事件&#xff0c;即项目的备选路径。每个决策或事件 都有相关的成本和单个项目风险(包括威胁和机会)。决策树分支的终点表示沿特 定路径发展的…

C++ | Leetcode C++题解之第86题分隔链表

题目&#xff1a; 题解&#xff1a; class Solution { public:ListNode* partition(ListNode* head, int x) {ListNode* small new ListNode(0);ListNode* smallHead small;ListNode* large new ListNode(0);ListNode* largeHead large;while (head ! nullptr) {if (head-…

C语言实现猜数字小游戏

1.随机数生成 要想实现猜数字小游戏&#xff0c;依赖于随机数的生成 1.1 rand()函数 这个函数是用来生成随机数的&#xff0c;返回值是正整数&#xff0c;他的值的范围是0到rand_max之间的&#xff0c;rand_max的值在大多数编译器上面是32767&#xff0c;rand()函数的使用必…

高校课程评价|基于SSM+vue的高校课程评价系统的设计与实现(源码+数据库+文档)

高校课程评价系统 目录 基于SSM&#xff0b;vue的高校课程评价系统的设计与实现 一、前言 二、系统设计 三、系统功能设计 1管理员功能模块 2学生功能 3教师功能 4专家功能 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&…

Node.js基础:从入门到实战

初识 Node.js 与内置模块 &#xff08;初识&#xff09; 1、知道什么是node.js 2、知道node.js可以做什么 3、node.js 中js的组成部分 &#xff08;内置模块&#xff09; 4、用 fs 模块读写操作文件 5、使用 path 模块处理路径 6、使用http 模块写一个基本的web服务器 初识 N…

高精度原理介绍及代码实现

目录 高精度 引入 使用场景 实现原理 高精度加法 数据存储 加法实现 总代码 高精度减法 与加法的不同点&#xff1a; 总代码 高精度乘法 总代码 高精度除法 总结 总注意点 减法注意点 高精度 引入 所谓高精度并不是很高级难懂的东西&#xff0c;只是对传统的…

改进YOLOv5,YOLOv5+CBAM注意力机制

目录 1. 目标检测模型 2. YOLOv5s 3. YOLOv5s融合注意力机制 4. 修改yolov5.yaml文件 5. ChannelAttentionModule.py 6. 修改yolo.py 1. 目标检测模型 目标检测算法现在已经在实际中广泛应用&#xff0c;其目的是找出图像中感兴趣的对象&#xff0c;并确定对象的类别和位…

一文读懂设计模式-单例模式

单例模式&#xff08;Singleton Pattern&#xff09;提供了一种创建对象的最佳方式 单例模式涉及到一个单一的类&#xff0c;该类负责创建自己的对象&#xff0c;同时确保只有单个对象被创建&#xff0c;这个类提供了一种访问其唯一的对象的方式&#xff0c;可以直接访问&…