虚幻引擎基础入门(C++) — 【日志输出篇 03】

一、屏幕日志输出

        调用全局变量GEngine指针调用函数 AddOnScreenDebugMessage节点,进行屏幕输出

void AddOnScreenDebugMessage{
	int32 Key,
	float TimeToDisplay,
	FColor Di splayColor,
	const FString & DebugMessage,
	bool bNewerOnTop,
	const FVector2D & TextScale
}

Key = -1时,则添加新的消息,不会覆盖旧有消息(当key为-1时,bNewerOnTop有效,直接添加到队列最上层)
Key不是-1时,则更新现有消息,效率更高


二、打印过程

01、重写

        引入库在 MyGameModeBase C++文件中重写 BeginPlay()函数,借助全局变量GEngine指针调用函数 AddOnScreenDebugMessage

//在MyGameModeBase.h 文件
UCLASS()
class UE_C_API AMyGameModeBase : public AGameModeBase
{
    GENERATED_BODY()
    
public:
    //重写 BeginPlay()函数
    virtual void BeginPlay()
};
//在 MyGameModeBase.cpp 文件

void AMyGameModeBase::BeginPlay()
{
    //void UEngine::AddOnScreenDebugMessage(int32 Key, float TimeToDisplay, FColor DisplayColor, const FString & DebugMessage, bool bNewerOnTop, const FVector2D & TextScale)
    GEngine->AddOnScreenDebugMessage(-1, 10, FColor::Blue, TEXT("HI"));
}
02、打印

        把 MyGameModeBase 挂载到游戏模式重载里面,再运行就可以看到打印在屏幕上的内容了

03、乱码

        如果出现中文乱码的情况:高级保存选项 -> 将编码设置为UTF-8格式

虚幻引擎基础入门(C++) — 【日志输出篇 03】_第1张图片

虚幻引擎基础入门(C++) — 【日志输出篇 03】_第2张图片

04、添加

        如果“文件” 的地方找不到 “高级保存选项” 这选项,需要添加:

虚幻引擎基础入门(C++) — 【日志输出篇 03】_第3张图片

虚幻引擎基础入门(C++) — 【日志输出篇 03】_第4张图片

这样就有“高级保存选项”啦。

三、 控制台日志输出

使用宏UE_LOG进行控制台日志输出(日志会写入本地缓存)

01、设置控制台时输出得日志分类

虚幻引擎基础入门(C++) — 【日志输出篇 03】_第5张图片

日志类型冗余度,分为:

        Fatal(会终止进程)致命问题
        Error(会终止进程)错误问题
        Warning、Display、Log(较常用的日志分类项)
        Verbose (将日志详细信息记录到日志文档,但不向控制台输出)
        VeryVerbose(将日志详细信息记录到日志文档,但不向控制台输出)


02、控制台输出信息

        在 MyGameModeBase.cpp 文件中重写 BeginPlay()函数(和上面一样),使用宏UE_LOG进行控制台日志输出

void AMyGameModeBase::BeginPlay()
{
    Super::BeginPlay();
    UE_LOG(LogTemp, Log, TEXT("你好!!!"));
}

这样就可以在控制台打印了

四、 自定义日志分类

  1. 前面的日志LogTemp都是系统给的,开发大型项目的时候可以自己定义日志分类,方便更快捷的查询自己想要的消息
  2. 使用宏进行自定义日志输出
//-------------在MyGameModeBase.h文件:

//1.声明日志分类(宏)
//DECLARE_LOG_CATEGORY_EXTERN(自定义日志分类名称(Log开头), 日志默认级别(一般使用Log), 日志编译级别(高于此级别的不会被编译,一般用All));
DECLARE_LOG_CATEGORY_EXTERN(LogProjectName, Log, All);


UCLASS()
class UE_C_API AMyGameModeBase : public AGameModeBase
{
    GENERATED_BODY()

    virtual void BeginPlay();
};
//------------在MyGameModeBase.cpp文件:

//2.定义日志分类
//DEFINE_LOG_CATEGORY(CategoryName),放外面的 LogProjectName变成全局类型名
DEFINE_LOG_CATEGORY(LogProjectName);

void AMyGameModeBase::BeginPlay()
{

    //3.打印到控制台和日志文件
    UE_LOG(LogProjectName, Log, TEXT("自定义日志分类"));

}

运行结果如下:

五、 格式化日志

通过占位符,传参输出
  1. %d 整数输出
  2. %f 浮点数输出
  3. %s 输出UE类型字符串(非对象型字符串FString)
    //在MyGameModeBase.cpp文件:
    
    void AMyGameModeBase::BeginPlay()
    {
        int32 A = 10;  //整数参数
        float B = 3.14;  //浮点参数
        FString C = TEXT("abc");  //非对象型字符串FString
    
        //传参
        UE_LOG(LogTemp, Log, TEXT("格式化日志输出:%d,%f,%s"), A, B, *C);
    }

    运行结果如下:

总结

        以上就是今天要说的内容,本文仅仅简单介绍了虚幻引擎中的日志输出使用。

你可能感兴趣的:(UC++,虚幻,c++,游戏引擎)