生命周期
在前面我们已经了解到了 Update
函数和 Render
函数, Update
与 Render
每帧都会被调用,
对于逻辑的更新我们应在 Update
中做, 而有关绘制的任务我们应该在 Render
中做, 这是因为即使你在 Update
中进行了绘制的调用,
在 Render
开始之前也会被蔚蓝清空. 类似地, 游戏中的暂停的实现原理是停止每帧 Update
的调用而保留 Render
的调用,
那么自然如果你在 Render
里进行逻辑更新你会破坏掉游戏原有的暂停.
ok那么我们 balabala 说了一大堆, 接下来介绍几个会被蔚蓝调用的函数, 这些函数也叫做生命周期
函数.
对于 Entity
Update
Render
DebugRender
: 该函数会在蔚蓝调试控制台被打开时被每帧被调用作为 debug 渲染, 即 everest 默认 ~ 键打开的那个, 它的默认行为是绘制该实体的碰撞箱, 在这里你可以做一些调试用的标识的绘制, 就比如说你的实体的作用范围什么的.Added
: 当该实体被以Scene.Add
函数调用加入到场景上时调用, 在这里你可以读取场景的一些状态或者 flag 之类的并更改它的行为.Awake
: 该函数与Added
行为相同, 但是当一帧之内有多个实体被加入场景时它们的Awake
会在这些实体都被加入后再批量调用, 而Added
则是加入一个就调用一个. 一个很好的在官图中运用的例子是浮动块的连接, 这是在场景开始时做的, 为了防止遗漏某些浮动块间的连接就需要在实体都被加入后再调用.Removed
: 当该实体被以Scene.Remove
函数调用移除场景时调用, 你可以在这里取消一些实体对场景的一些作用, 比如说背景的变化.SceneBegin
: 当场景被调用Scene.Begin
的同时调用SceneEnd
: 当场景被调用Scene.End
的同时调用
对于 Component
对于 Component 来说大部分函数与 Entity 的类似, 只不过名字前加个了 Entity.
比如实体的 Awake
对应 Component 的 EntityAwake
, 通常这些函数被调用的地方是对应的 Entity 的生命周期函数的默认实现,
所以除非有意而为之记得在开头调用基类的生命周期实现:
MyInterestingEntity.cs | |
---|---|
1 2 3 4 5 6 |
|
对于 Scene
嗯... 对应 Scene 的一些生命周期函数我个人也不是很了解毕竟我们大部分的时间都在 gameplay 的场景上, 所以这节就暂时咕了(._.)
常见的方法与属性
Scene.Add
: 将一个实体加入到场景中Entity.Add
: 将一个 Component 挂载到实体上Scene.Remove
: 将一个实体移出场景Entity.Remove
: 将一个 Component 移出实体Entity.RemoveSelf
: 将 Entity 自身移出自身所在场景Component.RemoveSelf
: 将 Component 自身移出所在实体Scene.Entities
: 获取当前场景上的实体列表Entity.Components
: 获取当前实体的 Component 列表