函数(Function)

定义

场景中可以定义函数,函数是一些可以被反复调用的动作序列的一种包装,通过将重复使用的动作封装成函数并在场景中使用call指令进行函数调用,可以避免在场景逻辑中书写大量重复代码。
函数是动态的,它不能被跳转进入,只能通过调用而被执行。场景和函数都可以进行函数调用,并且函数支持递归调用。因此,函数与场景的上下文类型是不同的,函数的上下文在每次发生场景调用时被初始化,如果需要保存函数运算的结果,请使用全局变量
特别需要注意的是,在(主调用堆栈上)进行场景调用的时候,不应该保存游戏。在保存游戏时,引擎只会保存场景的上下文,函数的上下文不会被写入稳定存档中。

函数的组成

一个函数在运行时拥有以下的组成部分:

  • 函数逻辑 由父场景同名的Yuri-IL文件所书写的该函数的业务逻辑,它将被运行时环境解析成函数模板包装SceneFunction,在发生函数调用时,引擎会根据此模板Fork一份运行时函数对象并执行。
  • 函数上下文 维护着函数调用内部的变量和变量值的包装,这些上下文不能被序列化保存不能被快照回滚,详见“运行时环境”章节。
  • 标签字典 函数内定义的所有标签及其位置的字典,以支持运行时环境执行跳转指令。
  • 全局名字 函数在整个游戏逻辑中的唯一标识符,以“__YuriFunc@函数名?父场景名”命名。
  • 形参列表 进行函数调用时应该传入的参数列表,以初始化函数上下文。

程序集信息

Property Value
层次结构 Yuri.Yuriri.SceneFunction
最低版本 1.0
并行安全 -