前言

启动指令是软件设计者为了在启动软件时,提供一些预设置,以达到启动配置的目的。启动指令有点类似于函数的传入参数,通过启动指令,可以让软件在启动时知道一些执行指令,以达到调整软件状态的目的。

说明

启动指令本质就是一段文本串,在启动软件后获取到文本串,通过解析串得到一些参数值。

在虚幻引擎中,配置的启动指令有两种:一种服务软件,一种是服务游戏。两者是分开的,我们也分开来说一下。

启动指令(软件)

基于软件的启动指令更多的是为了调整软件启动时的一些配置,例如语言版本,分辨率等。

1、指令格式

下面是一段是虚幻引擎编辑器中,独立进程启动的指令串:

/Game/NewMap -game -PIEVIACONSOLE -Multiprocess GameUserSettingsINI=PIEGameUserSettings0 -MultiprocessSaveConfig -forcepassthrough -messaging -SessionName="Play in Standalone Game" -windowed -ResX=1280 -ResY=720

注意:指令标记之间使用空格做为分隔符

通过分析,大概我们可以得到指令格式规则如下:

  • 布尔值:分为带前缀减号和不带
    • 带前缀,例如:-game
    • 不带前缀,样例中没有,可以自己写,例如:OpenFair
  • 键值型:分为带前缀减号和不带
    • 带前缀,例如:-ResX=1280
    • 不带前缀,例如:GameUserSettingsINI=PIEGameUserSettings0(引擎中解析时是将不带有减号前缀的键值标记当作普通文本串来处理,参照解析指令参数说明)
  • 路径值:/内容,例如:/Game/NewMap

你也可以设计自己的指令标记格式,但是解析就需要自己编写了(建议使用引擎的规则)。

2、配置指令

启动指令配置分为打包前和打包后。

  • 开发模式中配置(只能用于开发使用,发布后无法使用),可以到编辑器偏好设置-播放中找到,参照下图。
    编辑器中配置
    编辑器中配置
  • 打包后配置

a. 通过控制台启动项目(CMD),加入指令(注意指令和项目中间需要空格分隔)

控制台启动项目
控制台启动项目
b. 通过创建快捷方式,在快捷方式中配置
创建快捷方式
创建快捷方式
创建完快捷方式后,右键属性配置,在快捷方式的目标窗口中填入指令(注意空格)
右键快捷方式属性配置
右键快捷方式属性配置

3、读取与解析指令

读取指令: 在蓝图中可以通过节点“GetCommandLine”,返回指令字符串

获取启动指令
获取启动指令
解析指令: 蓝图中提供了指令的解析函数
解析指令函数
解析指令函数
参数说明:

  • In Cmd Line:启动指令,一般通过“GetCommandLine”获取
  • Out Tokens:返回指令中,不带有减号前缀的所有指令标记,例如:“/Game/NewMap”,“GameUserSettingsINI=PIEGameUserSettings0”,“OpenFair”
  • Out Switches:返回指令中,带有减号的,非键值类型标记,例如:“game”,“PIEVIACONSOLE”,“Multiprocess”等,注意返回结果不带有减号。
  • Out Params:返回指令中,带有减号的键值类型标记,例如“-SessionName="Play in Standalone Game"”将被解析为键是“SessionName”,值是“Play in Standalone Game”

蓝图中还有连个节点函数用于解析指令“Parse Param”和“Parse Param Value”使用可以函数说明。

启动指令(游戏)

1、添加指令

虚幻引擎也允许在启动游戏地图时,追加一段指令文本,例如启动监听服务器,需要加后缀“listen”,添加位置如下:

游戏指令配置
游戏指令配置

2、读取指令

指令获取可以在gamemode中拿到,如下截图:

获取指令
获取指令

3、解析指令

引擎提供的解析指令串方法,要求指令格式中的指令标记用问号做为分隔符,例如“?listen=100?hero=122?np”

当然,依旧可以自己写格式,但是解析也同样需要自己写,建议使用引擎的。

解析参照如下:

解析函数
解析函数

  • Options:指令串
  • Key和In Key:要查找或是解析的键
  • 第一个节点返回:100
  • 第二个节点返回:true

结语

只要记住指令是一段文本串,引擎对于指令提供的输入方式分为两种,至于解析方法,引擎提供的方法需要遵守指令格式。如果你想要自己设计指令解析标记方式也可以,但是需要自己编写解析方法。

对于C++中的使用,可以参照蓝图的方法找到C++源码。

引擎版本:5.2