当前位置:网站首页>Unity脚本生命周期 Day02
Unity脚本生命周期 Day02
2022-07-04 14:13:00 【@夜魅】
何为脚本生命周期?
Unity脚本从唤醒到销毁的过程。
消息:当满足某种条件Unity引擎自动调用的函数。
图表如下所示:
初始阶段:
1、Awake唤醒:
当物体载入时立即调用1次;
常用于在游戏开始前进行初始化,可以判断当满足某种条件执行此脚本this.enable = true
2、OnEnable当可用:每当脚本对象启用时调用。
3、Start开始:
物体载入且脚本对象启用时被调用1次。
常用于数据或游戏逻辑初始化,执行时机晚于Awake。
物理阶段:
1、FixedUpdate固定更新:脚本启用后,固定时间被调用,适用于对游戏对象做物理操作,例如移动等。设置更新频率:“Edit”--> "Project Setting" --> "Time" --> "Fixed Timestep"值,默认为0.02.
2、OnCollisionXXX碰撞:当满足碰撞条件时调用。
3、OnTriggerXXX触发:当满足触发条件时调用。
4、OnMouseEnter鼠标移入:鼠标移入到当前Collider时调用。
5、OnMouseOver鼠标经过:鼠标经过当前Collider时调用。
6、OnMouseExit鼠标离开:鼠标离开当前Collider时调用。
7、OnMouseDown鼠标按下:鼠标按下当前Collider时调用。
8、OnMouseUp鼠标抬起:鼠标在当前Collider上抬起时调用。
游戏逻辑:
1、Update更新:
脚本启用后,每次渲染场景时调用,频率与设备性能及渲染量有关。
2、LateUpdate延迟更新:
在Update函数被调用后执行,适用于跟随逻辑。
场景渲染:
1、OnBecameVisible当可见:
当Mesh Renderer在任何相机上可见时调用。
2、OnBecameInvisible当不可见:
当Mesh Renderer在任何相机上都不可见时调用。
结束阶段:
1、OnDisable当不可用:
对象变为不可用或附属游戏对象非激活状态时此函数被调用。
2、OnDestroy当销毁:
当脚本销毁或附属的游戏对象被销毁时被调用。
3、OnApplicationQuit当程序结束:
应用程序退出时被调用。
代码如下所示:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 脚本生命周期/必然事件/消息Message
/// </summary>
public class Lifecycle : MonoBehaviour
{
//脚本:.cs的文本文件 类文件
// 附加到游戏物体中,定义游戏对象行为指令的代码
//序列化字段 作用:在编辑器中显示私有变量
[SerializeField]
private int a = 100 ;
//作用:在编辑器中隐藏字段
[HideInInspector]
public float b;
[Range(0,100)]
public int c;
//属性:在编辑器中不能显示,通常在脚本中不写
public int A
{
get { return this.a; }
set { this.a = value; }
}
public Lifecycle()
{
Debug.Log("构造函数");
//不要再脚本中写构造函数
//不能在子线程中访问主线程成员
//b = Time.time;
}
//***********初始阶段****************
//执行时机:创建游戏对象 --> 立即执行1次(早于start)
//作用:初始化
private void Awake()
{
Debug.Log("Awark-"+Time.time+"-"+this.name);
}
//执行时机:创建游戏对象 -> 脚本启用 -> 才执行(1次)
//作用:初始化
private void Start()
{
Debug.Log("Start-"+Time.time+"-"+this.name);
}
//****************物理阶段*****************
//执行时机:每隔固定时间(大概0.02s)执行1次。(时间可以修改)
//适用性:适合对物体做物理操作(移动、旋转......),不会受到渲染影响
private void FixedUpdate()
{
//渲染时间不固定(每帧渲染量不同、机器性能不同)
//Debug.Log(Time.time);
}
private void OnMouseEnter()
{
Debug.Log("OnMouseEnter");
}
private void OnMouseDown()
{
Debug.Log("OnMouseDown");
}
//*************游戏逻辑*****************
//执行时机:渲染帧执行,执行间隔不固定
//适用性:处理游戏逻辑
private void Update()
{
//向前移动1m
//查看某一帧程序执行情况
//启动调试 F5 --> 运行场景 --> 暂停 --> 在可能出错的行加断点 --> 单帧运行 --> 调试…… --> 停止调试 Shift + F5
int a = 1;
int b = 2;
int c = a + b;
}
}
边栏推荐
猜你喜欢
Introduction to asynchronous task capability of function calculation - task trigger de duplication
Deep learning neural network case (handwritten digit recognition)
Weekly recruitment | senior DBA annual salary 49+, the more opportunities, the closer success!
Go zero micro service practical series (IX. ultimate optimization of seckill performance)
UFO: Microsoft scholars have proposed a unified transformer for visual language representation learning to achieve SOTA performance on multiple multimodal tasks
Numpy notes
MySQL学习笔记——数据类型(2)
31年前的Beyond演唱会,是如何超清修复的?
IO flow: node flow and processing flow are summarized in detail.
Deep learning network regularization
随机推荐
flutter 报错 No MediaQuery widget ancestor found.
go-zero微服务实战系列(九、极致优化秒杀性能)
Luo Gu - some interesting questions 2
They are all talking about Devops. Do you really understand it?
Width and alignment
宽度与对齐
The performance of major mainstream programming languages is PK, and the results are unexpected
Cann operator: using iterators to efficiently realize tensor data cutting and blocking processing
IO flow: node flow and processing flow are summarized in detail.
Halcon knowledge: NCC_ Model template matching
音视频技术开发周刊 | 252
Leecode learning notes - Joseph problem
Redis 發布和訂閱
Redis的4种缓存模式分享
内存管理总结
js平铺数据查找叶子节点
PLC模拟量输入 模拟量转换FC S_ITR (CODESYS平台)
Ranking list of databases in July: mongodb and Oracle scores fell the most
LeetCode 1200 最小絕對差[排序] HERODING的LeetCode之路
Huawei cloud database DDS products are deeply enabled