ue4-控制台执行方法

  • 直接在控制台中输入方法名和参数,调用c++中的方法 或者 关卡蓝图中的 自定义事件
  • 调出控制台输入:按到 ` 键(数字1键左边)

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的派生类中实测过,如下


  1. 声明控制台可执行标记 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);
    }
  2. 按到 ` 键,输入指令 solname asd 123
    这里写图片描述

  3. 结果
    这里写图片描述


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;
      };
    • 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. 关卡蓝图中的 自定义事件

  1. 关卡蓝图中新建个自定义事件 MyTestEvent
    ue4-控制台执行方法_第1张图片

  2. 按到 ` 键,输入指令 ce MyTestEvent
    这里写图片描述


可以执行的一些命令

  • 断点看下源码就可以找出很多可以控制台执行的命令
    1. LocalPlayer.cpp 中 bool ULocalPlayer::Exec(UWorld* InWorld, const TCHAR* Cmd,FOutputDevice& Ar)
    2. GameViewportClient.cpp 中 bool UGameViewportClient::Exec( UWorld* InWorld, const TCHAR* Cmd,FOutputDevice& Ar)
    3. UnrealEdSrv.cpp 中 bool UUnrealEdEngine::Exec( UWorld* InWorld, const TCHAR* Stream, FOutputDevice& Ar )
    4. EditorServer.cpp 中 bool UEditorEngine::Exec( UWorld* InWorld, const TCHAR* Stream, FOutputDevice& Ar )
    5. UnrealEngine.cpp 中 bool UEngine::Exec( UWorld* InWorld, const TCHAR* Cmd, FOutputDevice& Ar )
    6. Obj.cpp 中 bool StaticExec( UWorld* InWorld, const TCHAR* Cmd, FOutputDevice& Ar )

参考资料

  • https://wiki.unrealengine.com/Exec_Functions
  • https://answers.unrealengine.com/questions/45499/ufunctionexec-from-uactorcomponent.html

你可能感兴趣的:(UnrealEngine4,UnrealEngine4)