uworld

更新时间:2023-04-17 15:47:12 阅读: 评论:0


2023年4月17日发(作者:牛老板下载)UE4控制台命令使⽤
UE4控制台命令使⽤
官⽅⽂档
请先⾷⽤官⽅⽂档,再阅读本⽂。
1. 概览
UE4 对⾃定义内置的控制台命令提供了多种⽀持,如下图进⾏简单的汇总。
控制台变量和控制台命令应该尽早的注册给引擎(最好是全局变量),这样引擎才能提供控制台输⼊⾃动提⽰的功能,以及帮助⽂本
的显⽰
Exec 接⼝是不提供⾃动提⽰和帮助⽂本的⽀持
UObject 的 exec 标记⽀持⾃动提⽰ 但是没有帮助⽂本
2. 控制台变量
控制台变量官⽅⽂档说的很详细,下⾯只补充⼏个不太好理解的点
2.1 加载控制台变量

2.1.1
这是唯⼀⼀个允许加载标记为ECVF_Cheat的cvars的ini⽂件。当编译UE_BUILD_SHIPPING或UE_BUILD_TEST时,这个⽂件不会加载。
这个⽂件主要是⽅便开发⼈员在启动是指定作弊变量,避免每次都要把这些变量在控制台输⼊⼀遍。
这个⽂件可屁股长痣代表什么 以放在⼯程的Config⽬录
[Startup]
=1
2.1.2 其他加载⽅式
在项⽬ 中使⽤
; 游戏的系统设置
[SystemSettings]
= 2
; 带编辑器情况下的系统设置 覆盖[SystemSettings]的值
[SystemSettingsEditor]
= 3
使⽤其他配置来指定,可以在配置编辑器中设置
UPROPERTY(config, EditAnywhere, Category=Optimizations, meta=(
ConsoleVariable="PassMovable",DisplayName="Movables in early Z-pass",
ToolTip="是否在早Z阶段渲染可移动对象。需要重新加载关卡!"))
uint32 bEarlyZPassMovable:1;
2.2 ⽤法⽰例
static TAutoConsoleVariable CVarTest(
TEXT(""),
TEXT("1"),
TEXT("⽤来测试"),
ECVF_Cheat
);
void test()
{
FString var = ueOnGameThread();
}
控制台变量的修改,是可以注册⼀个回调来检测的,但是不推荐这么⽤。⽤法官⽅有说明。
3. 控制台命令
控制台命令是可以在控制台输⼊命令,然后执⾏⼀个回调。
// 回调只带有⼀个 world 参数
FAutoConsoleCommandWithWorld
// 回调带有⼀个World ⽤户输⼊的参数
FAutoConsoleCommandWithWorldAndArgs
// 回调带有⼀个World ⽤户输⼊的参数 ⼀个输出设备
FAutoConsoleCommandWithWorldArgsAndOutputDevice
3.1 ⽰例
这个为例,读者可根据实际情况选⽤不同的类型。
FAutoConsoleCommandWithWorldArgsAndOutputDevice

static FAutoConsoleCommandWithWorldArgsAndOutputDevice CCommandTest(
TEXT("d"),
TEXT("⽤来测试命令⾏")
TEXT("arg: arg1 敌⼈数量"),
FConsoleCommandWithWorldArgsAndOutputDeviceDelegate::CreateLambda(
[](const TArray& argList, UWorld* w, FOutputDevice& out){
if (() != 1)
{
(ELogVerbosity::Type::Error, TEXT("参数不对,需要1个参数"));
return;
}
int32 enemyNum = FCString::Atoi(*argList[0]);
// todo ...
(ELogVerbosity::Log, TEXT("设置敌⼈数量成功, %d"), enemyNum);
}),
ECVF_Cheat
);
3.2 在运⾏时注册存在的问题以及解决办法
问题: 对于控制台命令,有时候希望能够绑定⼀个对象的⽅法,这就需要运⾏时注册。但是运⾏时注册控制台变量有个问题就是,⽆法使
⽤在控制避孕套广告 台⾃动提⽰的功能风寒风热感冒 ,帮助提⽰也没有。
解决办法是对 进⾏⼀下封装。
FAutoConsoleCommandWithWorldArgsAndOutputDevice

struct FMyAutoCmd
{
public:
FMyAutoCmd(const TCHAR* Name, const TCHAR* Help, uint32 flags)
{
m_cmd = MakeShared(
Name,
Help,
FConsoleCommandWithWorldArgsAndOutputDeviceDeleg金和木 ate::CreateLambda(
[this](const TArray& argList, UWorld* w, FOutputDevice& out) { m_eIfBound(argList, w, out); })
);
}
FConsoleCommandWithWorldArgsAndOutputDeviceDelegate& getDelegateRef()
{
return m_myDelegate;
}
private:
FConsoleCommandWithWorldArgsAndOutputDeviceDelegate m_myDelegate;
TSharedPtr m_cmd;
};
static FMyAutoCmd CCo两德 mmandMyTest(
TEXT("Cmd"),
TEXT("⽤来测试命令⾏")
TEXT("arg: arg1 敌⼈数量"),
ECVF_Cheat
);
void ATestGameModeBa::initConsolCmd()
{
egateRef().BindWeakLambda(
this,
[this](const TArray& argList, U对联手抄报 World* w, FOutputDevice& out) {
if (() != 1)
{
(ELogVerbosity::Type::Error, TEXT("参数不对,需要1个参数"));
return;
}
i公共场所英语 nt32 enemyNum = FCString::Atoi(*argList[0]);

this->tEnemyNumber(enemyNum);
(ELogVerbosity::Log, TEXT("设置敌⼈数量成功, %d"), enemyN抗过敏 um);
});
}
void ATestGameModeBa::tEnemyNumber(int32 number)
{
// todo
}
封装之后,既可以保证⾃动提⽰的功能正确,⼜可以动态的绑定回调。
4. Exec 接⼝
Exec接⼝是⼀种⽐较原始的⽅式,没有提供⾃动提⽰和帮助提⽰。

struct FTestExec
: public FSelfRegisteringExec
{
virtual bool Exec(class UWorld* InWorld, const TCHAR* Cmd, FOutputDevice& Ar) override
{
if (FPar::Command(&Cmd, TEXT("testExec")))
{
FString arg1 = FPar::Token(Cmd, fal);
(ELogVerbosity::Log, TEXT("arg1 : %s"), *arg1);
FString value;
if (FPar::Value(Cmd, TEXT("value="), value))
{
(ELogVerbosity::Log, TEXT("value=%s"), *value);
}
return true;
}
return fal;
}
};
static FTestExec execTest;
5. UObject
5.1 默认⽀持的对象
UObject 可以把某个函数标记为可执⾏
UFUNCTION(exec)
然后可以直接在控制台输⼊命令 和 参数 执⾏
默认只有以下对象⽀持这个功能:
UPlayerInput
APlayerController
APawn
AHUD
AGameModeBa
UCheatManager
AGameStateBa
APlayerCameraManager
UCLASS()
class TESTREFCET_API ATestRefcetGameModeBa : public AGameModeBa
{
GENERATED_BODY()
public:
UFUNCTION(Exec)
void testUfunction(int32 value);
};

引擎是在 UPlayer::Exec 中对这些默认⽀持的对象进⾏处理的
5.2 如何给其他对象加⼊这个功能
UCLASS()
class TESTREFCET_API ATestGameModeBa
: public AActor
, public FSelfRegisteringExec
{
GENERATED_BODY()
public:
UFUNCTION(Exec)
void testUObjectExec(int32 value);
virtual bool Exec(class UWorld* InWorld, const TCHAR* Cmd, FOutputDevice& Ar) override
{
bool bReturnVal = fal;
if (GetClass()->GetDefaultObject() != this)
{
bReturnVal = ProcessConsoleExec(Cmd, Ar, NULL);
}
return bReturnVal;
}
};
UObjectProcessConsoleExec
提供了⼀个 函数来处理被标记 Exec 的函数, 只要有⼀个合适的时机调⽤这个函数处理输⼊的命令即可。
6. 关卡蓝图中的事件调⽤

在控制台中输⼊ 便可提⽰出所有的事件
ce


本文发布于:2023-04-17 15:47:12,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/501003.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:角平分线
下一篇:阿兹亚基节杖
标签:uworld
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图