UE4命令行参数解析
转自:https://blog.csdn.net/u012999985/article/details/53544389
一 .命令行参数简述
命令行参数是一连串的关键字字符串,当运行可执行文件时可以通过命令行或者可执行文件的快捷方式将其传入。它们的目的是自定义引擎运行的方式,以便符合开发人员或用户的需要。一般用途如下,注:命令行不区分大小写
第一,这可以使得运行编辑器而不运行游戏变得很简单(只要加上几个字符即可,见图1-1)。第二,可以更方便的配置客户端IP,服务器以及其他更丰富的运行信息。第三,它也可以更加复杂。玩家可以自定义命令行参数,并在代码中解析与使用,比如使用某个特定的地图在指定的分辨率和帧频率下启动游戏。图1-1是4个bat批处理文件,用来打开不同的游戏端(编辑器,本地游戏,游戏客户端以及专有服务器),游戏工程名后面的都是命令行参数。我们也可以直接在程序的快捷方式里面添加,如图1-2。
图 1-1 通过Bat文件打开不同游戏端的命令行参数
图 1-2在快捷方式里传入命令行参数
总体上来说,命令行参数其实分为两类,一类是UE4引擎提供的参数,比如配置地图名称,IP地址,是否开启服务器等。(想了解更多参数可以参考官方文档)另一类就是玩家自定义的参数,用来给开发者提供另一种配置游戏的方式。玩家其实可以随意添加参数,但是如果没有在代码中解析,这些无意义的参数不会有任何影响。
1.1理解URL、URL参数及命令行参数的区别
在UE4中,我们需要理解URL,URL参数与命令行参数的关系。URL参数属于命令行参数的一部分,同时命令行参数会被解析多个部分, URL参数的那部分会作为部分信息存入到URL内部结构里。也就是说,URL内部信息不仅仅来源于命令行,URL与命令行参数有交集,交集就是URL参数。
URL参数除了负责传入地图信息,IP地址外,还可以通过“?PlayerNum=6”这样的形式传入其他信息,这也就是我们通过命令行参数获取配置信息的重要途径。(图1-3画横线的字符就是URL参数)
图 1-3 Url参数示意图
二. 参数的提取
在UE4的代码中,命令行参数对应的类是FCommandLine。URL对应的类是FURL。如下图2-1,图2-2,图2-3所示。
图 2-1 URL信息对应类
图 2-2 引擎4.8前命令行信息对应类
图 2-3 引擎4.9以后命令行信息对应类
有了上面的类,我们知道了两个类的内部数据的结构布局。对于FCommandLine来说,信息的存储很简单,所有命令行信息直接放在CmdLine里面(受版本影响,见下文)。而FUrl除了存储地图,Options(自定义参数)外,还有端口号port,协议名称protocol等。这里给出一个例子,下面的字符串是一个通过命令行参数启动的专有服务器的bat文件内容。
Start Engine\Binaries\Win64\UE4Editor.exe"Game/Game.uproject"MapName?MaxSizeAllowed=1?StartTime=6300.0 -game -server -log
我们通过执行代码const TCHAR* commandTest = FCommandLine::Get();可以获取图2-4的字符串。发现结果是,"Game/Game.uproject"MapName? -NoSuperCrates -game -server -log
注意:4.9版本的FCommandLine函数添加了OriginalCmdLine属性与对应的Get方法(图2-3)。也就是说在4.5版本的情况下的Get与4.9以后版本的GetOriginal得到的结果是相同的。4.9以后的版本的Get(),获取的是不带工程名称与路径的命令行参数。
可以看出,CommandTest获取的就是启动命令后所有的字符串信息。那么我们的URL信息怎么提取呢?我们可以在UGameInstance::StartGameInstance()函数里面通过上面的方法获取整个命令行参数。然后构造新的FURL对象,读取本地的配置信息完成初始化,像端口号,Protocol等信息我们可以在\Engine\Config 的BaseEngine.ini获取,如图2-4。
图 2-4 BaseEngine中URL相关配置
随后,通过LoadURLConfig(TEXT("DefaultPlayer"),GGameIni);可以读取其他相关的配置信息,通过FParse::Token等一系列步骤可以将命令行参数里面的URL参数部分取出来。这时候的URL如图2-5所示。
图2-5 URL内部信息
上面的Op数组,其实就是我们在参数里面传入的MaxSizeAllowed等3个参数。到这里,我们URL参数的信息就提取出来了,接下来我们要在游戏开始前合适的位置将这些参数应用到游戏中。
UE4命令行参数解析的更多相关文章
- python命令行参数解析模块argparse和docopt
http://blog.csdn.net/pipisorry/article/details/53046471 还有其他两个模块实现这一功能,getopt(等同于C语言中的getopt())和弃用的o ...
- gflags命令行参数解析
gflags库是google开源的命令行参数解析工具. 安装 官方没有提供二进制库,但是Debian/Ubuntu平台本身提供了二进制库,可以直接git clone https://github.co ...
- [Go] 命令行参数解析包(flag 包)使用详解
Go 的 flag 包可以解析命令行的参数. 一.命令行语法 命令行语法主要有以下几种形式: cmd -flag // 只支持bool类型 cmd -flag=xxx cmd -flag ...
- $命令行参数解析模块argparse的用法
argparse是python内置的命令行参数解析模块,可以用来为程序配置功能丰富的命令行参数,方便使用,本文总结一下其基本用法. 测试脚本 把以下脚本存在argtest.py文件中: # codin ...
- Google开源命令行参数解析库gflags
Google开源命令行参数解析库gflags http://blog.csdn.net/lming_08/article/details/25072899 CMDLINE的解析 http://blog ...
- PHP 命令行参数解析工具类
<?php/** * 命令行参数解析工具类 * @author guolinchao * @email luoyecb@163.com */class CommandLine{ // store ...
- golang-flag - 命令行参数解析
flag - 命令行参数解析 在写命令行程序(工具.server)时,对命令参数进行解析是常见的需求.各种语言一般都会提供解析命令行参数的方法或库,以方便程序员使用.如果命令行参数纯粹自己写代码解析, ...
- Python命令行参数解析模块getopt使用实例
Python命令行参数解析模块getopt使用实例 这篇文章主要介绍了Python命令行参数解析模块getopt使用实例,本文讲解了使用语法格式.短选项参数实例.长选项参数实例等内容,需要的朋友可以参 ...
- python命令行参数解析OptionParser类用法实例
python命令行参数解析OptionParser类用法实例 本文实例讲述了python命令行参数解析OptionParser类的用法,分享给大家供大家参考. 具体代码如下: from opt ...
随机推荐
- IDEA 调试 JAVA ConcurrentLinkedQueue
调试ConcurrentLinkedQueue 源码 poll() 方法时 ,出现了比较奇怪的现象,当时队列里有两个元素,如下截图, 但执行完 p.casItem(item, null)后,出现了令人 ...
- 记一次删除ocr与dbfile的恢复记录
自己造成的一个案例: 场景:ocr磁盘组被我dd掉了,dbfile磁盘组也被我dd掉了.Rac起不来.之前ocr的DATA磁盘组被替换到了ABC磁盘.所幸的是有备份. 重新加载OCR磁盘 [root@ ...
- centos下直接使用命令备份mysql数据库
mysqldump -u root -p 要备份的数据库名> /home/mysql/backup/db/back/数据库名.sql
- 国内不fq安装K8S四: 安装过程中遇到的问题和解决方法
目录 4 安装过程中遇到的问题和解决方法 4.1 常见问题 4.2 常用的操作命令 4.3 比较好的博客 国内不fq安装K8S一: 安装docker 国内不fq安装K8S二: 安装kubernet 国 ...
- ansible自动化运维02
ansible清单管理 inventory文件通常用于定义要管理主机的认证信息,例如:ssh登录用户名,密码,以及key相关信息. 举个例子:定义清单组 注意:组名为pro,关键字段children表 ...
- Python实现感知器的逻辑电路(与门、与非门、或门、异或门)
在神经网络入门回顾(感知器.多层感知器)中整理了关于感知器和多层感知器的理论,这里实现关于与门.与非门.或门.异或门的代码,以便对感知器有更好的感觉. 此外,我们使用 pytest 框架进行测试. p ...
- vue - 基础(1)
Vue基本用法 在学习Vue的基本用法之前,我们先简单的了解一些es6的语法 let: 特点:1.局部作用域 2.不会存在变量提升 3.变量不能重复声明 const: 特点:1.局部作用域 2.不会存 ...
- 接口测试:postman
测试接口,postman和jmeter是用得最频繁的工具. 下面主要介绍postman测试http协议接口的用法,包含get,post(form-data,json,上传文件,cookie). pos ...
- woocommerce隐藏breadcrumb面包屑导航
woocommerce已经集成比较完善的组件,当然也包含breadcrumb面包屑导航,但是我们如果调整一下breadcrumb的位置要如何操作呢?首先要先把woocommerce隐藏breadcru ...
- 09-赵志勇机器学习-k-means
(草稿) k-means: 1. 随机选取n个中心 2. 计算每个点到各个中心的距离 3. 距离小于阈值的归成一类. 4. 计算新类的质心,作为下一次循环的n个中心 5. 直到新类的质心和对应本次循环 ...