自定义控制台变量:
https://docs.unrealengine.com/4.27/zh-CN/ProductionPipelines/DevelopmentSetup/Tools/ConsoleManager/
”Stat“类的
如"Stat fps"
1. GEngine->Exec(GetWorld(), TEXT("stat fps"));
2. TArray<FString> EnabledStats;
EnabledStats.Add("fps");
World->GetGameViewport()->SetEnabledStats(EnabledStats);
"Show"类的
如"show shadercomplexity"
FOutputDevice& Out = *GLog;
UWorld* World = GetWorld();
World->GetGameViewport()->HandleViewModeCommand(TEXT("SHADERCOMPLEXITY"), Out, World);
1. 引擎单例派生类可直接调用方法
以下类的派生类中可以通过在方法上标记 UFUNCTION(Exec) 直接调用方法
Pawns, Player Controllers, Player Input, Cheat Managers, Game Modes, Game Instances, overriden Game Engine classes, and Huds should all work by just adding the standard UFUNCTION markup
我只在Game Mode的派生类中实测过,如下
声明控制台可执行标记 UFUNCTION(Exec)
UFUNCTION(Exec)
virtual void solname(FString _str, int32 _num);
void AMyGameMode::solname(FString _str, int32 _num)
{
FString str = FString::Printf(TEXT("--- %s - %d"), *_str, _num);
UE_LOG(LogMyTest, Warning, TEXT("--- %s - %d"), *_str, _num);
}
按到 ` 键,输入指令 solname asd 123
结果
2. 自定义类调用方法
自定义类
MyActor.h
#pragma once
#include "MyActor.generated.h"
UCLASS()
class MYTEST_API AMyActor : public AActor
{
GENERATED_BODY()
public:
AMyActor();
virtual ~AMyActor();
void SetInfo(FString name);
UFUNCTION(Exec)
void Say();
private:
FString mName;
};1234567891011121314151617181920212223
MyActor.cpp
#include "MyTest.h"
#include "MyActor.h"
AMyActor::AMyActor()
{
}
AMyActor::~AMyActor()
{
}
void AMyActor::SetInfo(FString name)
{
mName = name;
}
void AMyActor::Say()
{
UE_LOG(LogMyTest, Warning, TEXT("name:%s, Say hello"), *mName);
}
如果不加点手段,在控制台输入 Say 是不会掉用对应的方法,所以在派生自 UGameInstance (只要是 引擎单例派生类 都可)中扩展类中,重写 ProcessConsoleExec 方法,(下面 生成实例的方法就不贴了)
bool UMyGameInstance::ProcessConsoleExec(const TCHAR* Cmd, FOutputDevice& Ar, UObject* Executor)
{
bool ret = Super::ProcessConsoleExec(Cmd, Ar, Executor);
if (!ret)
{
for (AMyActor* actor : mActorVec)
ret = actor->ProcessConsoleExec(Cmd, Ar, Executor);
}
UE_LOG(LogMyTest, Warning, TEXT("--- Cmd:%s exec:%d"), Cmd, (int32)ret);
return ret;
}
3
如何构建自己的控制台指令呢?
我们将要使用到UFUNCTION宏中的指令Exec,这条指令可以帮助我们在控制台构建指令函数,指令名即为函数名称。格式如下:
UFUNCTION(Exec)
void TestCmd(参数表)
使用时,只需要在运行阶段,使用按键~,打开控制台,然后搜寻TestCmd指令,输入对应参数,即可调用TestCmd函数,非常的简单!
注意,并不是所有的类都支持加入Exec指令,只有Possessed Pawns(拥有操控权pawn), Player Controllers,Player Input, Cheat Managers, Game Modes, Game Instances, 引擎重写类, HUD。