Godot学习笔记(2):游戏引擎生命周期学习_godot 生命周期
节点的生命周期是指节点从出生(创建)到死亡(删除)的过程,这个过程中有几个关键的时间点,我们可以在这些时间点编写我们的逻辑代码,承载这些代码的方法就被称为生命周期方法。
Godot 引擎的生命周期主要涉及到几个关键的回调函数,这些函数在游戏或应用程序的不同阶段被调用,以管理资源、处理输入、更新游戏状态等。以下是 Godot 生命周期的主要阶段:
- _Init ():这是节点被创建后立即调用的第一个方法。它用于初始化变量和设置状态,但此时节点还没有进入场景树。
- _Ready ():当节点及其所有子节点都被添加到场景树中后,会调用此方法。这是进行初始化操作的理想位置,比如设置节点引用或调用其他节点的方法。
- _Process (delta):这个方法在每一帧都会被调用,无论场景是否正在播放。
delta
参数表示自上一帧以来经过的时间(以秒为单位)。这里是处理游戏逻辑的好地方。
- _PhysicsProcess (delta):与
_Process(delta)
类似,但是它遵循物理帧的节奏调用,适用于处理物理相关的逻辑。
- _Input (event):当有输入事件发生时,如键盘按键、鼠标移动或触摸屏幕时,会调用此方法。可以在这里处理用户输入。
- _EnterTree () 和 _ExitTree ():当节点被添加到场景树时,
_EnterTree()
会被调用;当节点从场景树中移除时,_ExitTree()
会被调用。这些方法适合执行需要在节点成为场景树一部分时进行的操作。
- _Draw ():对于绘制自定义图形的节点(如 2 D 游戏中的 CanvasItem),
_Draw()
方法在节点需要重新绘制时被调用。
- _PhysicsPreProcess (delta) 和 _PhysicsPostProcess (delta):这两个方法分别在物理处理之前和之后调用,允许你在物理步骤的不同阶段执行代码。
- _UnhandledInput (event) 和 _UnhandledKeyInput (event):当输入事件未被
_Input(event)
处理时,会调用这些方法。这对于处理全局输入事件很有用。
- _Dispose ():当节点即将被销毁时调用,用于清理资源。
这些方法提供了对游戏或应用程序生命周期的细粒度控制,允许开发者根据需要在正确的时间执行代码。在开发 Godot 项目时,合理利用这些生命周期方法可以帮助你更有效地管理游戏的状态和资源。
Godot 生命周期的关键方法:
- _Init ():类似于 Unity 的构造函数,但更多用于变量初始化而不是游戏逻辑。
- _Ready ():类似于 Unity 的 Start (),在节点及其子节点进入场景树时调用,用于初始化代码。
- _Process (delta):与 Unity 的 Update () 相似,每帧调用,用于常规更新。
- _PhysicsProcess (delta):类似于 Unity 的 FixedUpdate (),按物理帧调用,用于物理相关更新。
- _EnterTree () 和 _ExitTree ():没有直接的 Unity 等价物,但它们类似于 OnEnable () 和 OnDisable (),分别在节点进入和退出场景树时调用。
- _Input (event):处理输入事件,Unity 中通常在 Update () 或特定的输入事件处理函数中处理输入。
- _Draw ():用于自定义绘制,Unity 中可能通过 OnGUI () 或自定义渲染代码实现。
- _Dispose ():类似于 Unity 的 OnDestroy (),用于清理资源。
如果一个节点有子节点那么:
_enter_tree是通过前序遍历的方式调用的,即其自身的_enter_tree会最先调用,然后调用其子节点的_enter_tree
_exit_tree是通过后序遍历的方式调用的,即其子节点的_exit_tree会最先调用,最后调用自身的_exit_tree
_ready是通过后序遍历的方式调用的,即其子节点的_ready会最先调用,最后调用自身的_ready,并且_ready的调用是在自身以及所有子节点的_enter_tree调用完毕后才调用