脚本
脚本组件是附加在实体上的可执行脚本,可以用来实现各种游戏功能。在《霸主》中,很多游戏逻辑都是通过脚本组件来编写的。例如椅子、掉落的武器、攻城器械。有很多不同的回调函数,可以被继承并填充在这些脚本组件中。
回调函数
- Constructor: 在构造函数中,我们需要给它的公有变量分配默认值(可以被场景制作者改变的变量)。在构造函数中,脚本组件不会被分配给实体或场景。另外,不要在这里写任何有副作用的逻辑,因为即使创建了脚本组件,由于升级等级系统的原因,一旦打开场景,脚本组件就可能会被删除。
- OnPreInit: 当脚本组件被分配给场景中的所有者实体后,这个回调被调用。一旦你进入了这个回调,那么该脚本实例中的用户定义变量就被设置了。然而,其他实体的脚本组件可能还没有被分配。因此,在预初始化中,不应该有任何依赖于其他脚本组件的逻辑代码。例如,在预初始化中, ManagedObject 将自己注册到当前任务实例中的托管对象数组。
- OnInit: 当任务被加载且所有实体的脚本组件被初始化,这个回调就会被立刻调用。你可以在这个回调里面使用任何类型的逻辑代码。运行时实例化的脚本也会得到这个回调的调用。
- OnEditorInit: OnInit 的编辑器版本,在从编辑器加载场景时被调用。当场景从编辑器中加载时,它会被调用。确保编辑器中没有任务或游戏状态。
- OnTick: 对于每个脚本组件,该任务在同一线程的任务的每个帧中都被调用。
- OnEditorTick: OnTick 的编辑器版本。
- IsOnlyVisual: 如果你有一个脚本组件,只是可视化的,没有任何应该在服务器版本上运行的逻辑代码,你应该在这个函数中返回 true 。这确保了这种类型的脚本不会在服务器版本上运行。
- OnEditorVariableChanged: 在编辑器中,每当用户改变该脚本组件中的公有变量时,就会调用这个回调。如果艺术家需要在编辑器场景中得到即时反馈,这个回调可以用于任何视觉-逻辑状态的改变。
- OnRemoved: 当实体或脚本组件被移除时调用。如果你有任何已分配内存的对象被存储在其他地方(例如静态容器),你可以使用这个回调来确保它们被回收,避免泄露内存。