ue4-控制台执行方法

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);
}12345678
按到 ` 键,输入指令 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);
}12345678910111213141516171819202122232425
如果不加点手段,在控制台输入 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;
}1234567891011
输入指令结果: 
--------------------- 
作者:君为红颜醉_ 
来源:CSDN 
原文:https://blog.csdn.net/yangxuan0261/article/details/53969564 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/qq173681019/article/details/85017623