函数(Function)
定义
场景中可以定义函数,函数是一些可以被反复调用的动作序列的一种包装,通过将重复使用的动作封装成函数并在场景中使用call
指令进行函数调用,可以避免在场景逻辑中书写大量重复代码。
函数是动态的,它不能被跳转进入,只能通过调用而被执行。场景和函数都可以进行函数调用,并且函数支持递归调用。因此,函数与场景的上下文类型是不同的,函数的上下文在每次发生场景调用时被初始化,如果需要保存函数运算的结果,请使用全局变量。
特别需要注意的是,在(主调用堆栈上)进行场景调用的时候,不应该保存游戏。在保存游戏时,引擎只会保存场景的上下文,函数的上下文不会被写入稳定存档中。
函数的组成
一个函数在运行时拥有以下的组成部分:
- 函数逻辑
由父场景同名的Yuri-IL文件所书写的该函数的业务逻辑,它将被运行时环境解析成函数模板包装SceneFunction,在发生函数调用时,引擎会根据此模板
Fork
一份运行时函数对象并执行。 - 函数上下文 维护着函数调用内部的变量和变量值的包装,这些上下文不能被序列化保存,不能被快照回滚,详见“运行时环境”章节。
- 标签字典 函数内定义的所有标签及其位置的字典,以支持运行时环境执行跳转指令。
- 全局名字 函数在整个游戏逻辑中的唯一标识符,以“__YuriFunc@函数名?父场景名”命名。
- 形参列表 进行函数调用时应该传入的参数列表,以初始化函数上下文。
程序集信息
Property | Value |
---|---|
层次结构 | Yuri.Yuriri.SceneFunction |
最低版本 | 1.0 |
并行安全 | - |