UE4打印信息到屏幕
GEngine->AddOnScreenDebugMessage
(
-1, // 可以理解为屏幕上相同信息显示的行数,一般持续打印时会用到, -1:全部显示, 1: 显示一行
10, // 显示的时间/秒
FColor::Blue, // 显示的颜色
"Hello! UE4" // 输出的信息,类型为FString
);
UE4打印信息到日志
FString Message; // 显示的信息
UE_LOG
(
LogTemp, // 日志的标签
Log, // 日志的类型,Log:普通日志,白色 Warning:警告,黄色 Error:错误,红色
TEXT("%s"), *Message // 输出的信息,类型为FString,%s:FString %i:int %f:float
)
自定义输出调用
/* 引入自定义类的头文件: include"Helper.h"
操作符"/"可以自定义,列如"+", "-", "*", "<<",也可以自定义成c风格输入:
cout << Year << "年." << "PI= " << PI << endl;
*/
// 输出:"2020年.PI= 3.14"
float PI = 3.14;
int Year = 2020;
// 输出到屏幕
Print() / Year / " 年." / "PI = " / PI / End; //相同信息行数:默认,时间:默认,颜色:默认
Print(-1) / Yearr / " 年." / "PI = " / PI / End; //相同信息行数:不限,时间:默认,颜色:默认
Print(-1, 20f) / Year / " 年." / "PI = " / PI / End; //相同信息行数:不限,时间:20秒,颜色:默认
Print(-1, 20f, FColor::Blue) / Year / "年." / "PI= " / PI / End;//相同信息行数:不限,时间:20秒,颜色:蓝色
Print(-1, FColor::Blue) / Year / "年." / "PI= " / PI / End; //相同信息行数:不限,时间:默认,颜色:蓝色
Print(20f, FColor::Blue) / Year / "年." / "PI= " / PI / End; //相同信息行数:默认,时间:20秒,颜色:蓝色
// 输出到日志
PrintLog() / Year / " 年." / "PI = " / PI / End; // 普通
PrintLogWarning() / Year / " 年." / "PI = " / PI / End; // 警告
PrintLogError() / Year / " 年." / "PI = " / PI / End; // 错误
步骤
1. 新建C++类,不继承任何类(None),类名为Helper.
2. 将.h文件和.cpp文件代码清空.
3. 将以下代码写入到.h文件中.
4. 调用时加头文件: include"Helper.h"
#pragma once
#include "CoreMinimal.h"
#include "Engine/Engine.h"
class MAP_CLIENT_API Helper_Print
{
public:
// 控制信息的显示
bool bShowMessage = true;
// Screen
// 显示的个数
int32 Count;
// 显示的时长
float Time;
// 显示的颜色
FColor Color;
// 最终输出的字符串
FString Message;
// log类型
uint8 LogType;
public:
// 构造函数
inline Helper_Print() {}
// 析构函数
~Helper_Print() {}
// 初始化
// screen
inline void Init(int32 Count, float Time, FColor Color)
{
this->LogType = 0;
this->Count = Count;
this->Time = Time;
this->Color = Color;
}
// log
inline void InitLog(int32 LogType)
{
this->LogType = LogType;
}
// 输出
inline void Print()
{
if (!bShowMessage && Message.IsEmpty())
{
return;
}
switch (LogType)
{
case 0:
if (GEngine)
{
GEngine->AddOnScreenDebugMessage(Count, Time, Color, Message);
}
break;
case 1:
UE_LOG(LogTemp, Log, TEXT("%s"), *Message)
break;
case 2:
UE_LOG(LogTemp, Warning, TEXT("%s"), *Message)
break;
case 3:
UE_LOG(LogTemp, Error, TEXT("%s"), *Message)
break;
}
}
// 操作符重写
// 文本
inline Helper_Print operator/ (const char* Info) { Message += Info; return *this; }
inline Helper_Print operator/ (const char Info) { Message.AppendChar(Info); return *this; }
inline Helper_Print operator/ (FString Info) { Message.Append(Info); return *this; };
inline Helper_Print operator/ (FName Info) { Message.Append(Info.ToString()); return *this; }
inline Helper_Print operator/ (FText Info) { Message.Append(Info.ToString()); return *this; }
// 数字
inline Helper_Print operator/ (int32 Info) { Message.Append(FString::FromInt(Info)); return *this; }
inline Helper_Print operator/ (float Info) { Message.Append(FString::SanitizeFloat(Info)); return *this; }
inline Helper_Print operator/ (double Info) { Message.Append(FString::SanitizeFloat(Info)); return *this; }
// 布尔
inline Helper_Print operator/ (bool Info) { Message.Append(Info ? FString("true") : FString("false")); return *this; }
// 结构
inline Helper_Print operator/ (FVector2D Info) { Message.Append(Info.ToString()); return *this; }
inline Helper_Print operator/ (FVector Info) { Message.Append(Info.ToString()); return *this; }
inline Helper_Print operator/ (FRotator Info) { Message.Append(Info.ToString()); return *this; }
inline Helper_Print operator/ (FQuat Info) { Message.Append(Info.ToString()); return *this; }
inline Helper_Print operator/ (FTransform Info) { Message.Append(Info.ToString()); return *this; }
inline Helper_Print operator/ (FMatrix Info) { Message.Append(Info.ToString()); return *this; }
inline Helper_Print operator/ (FColor Info) { Message.Append(Info.ToString()); return *this; }
inline Helper_Print operator/ (FLinearColor Info) { Message.Append(Info.ToString()); return *this; }
// 打印
void operator/ (TSharedPtr<Helper_Print> Record) { this->Print(); }
};
static TSharedPtr<Helper_Print> End;
// 构造对象,并返回,用于后续的操作符的调用
// Screen
FORCEINLINE Helper_Print Print()
{
Helper_Print PrintInfo = Helper_Print();
PrintInfo.Init(-1, 9999, FColor::Blue);
return PrintInfo;
}
FORCEINLINE Helper_Print Print(int Count)
{
Helper_Print PrintInfo = Helper_Print();
PrintInfo.Init(Count, 9999, FColor::Blue);
return PrintInfo;
}
FORCEINLINE Helper_Print Print(float Time)
{
Helper_Print PrintInfo = Helper_Print();
PrintInfo.Init(-1, Time, FColor::Blue);
return PrintInfo;
}
FORCEINLINE Helper_Print Print(FColor Color)
{
Helper_Print PrintInfo = Helper_Print();
PrintInfo.Init(-1, 9999, Color);
return PrintInfo;
}
FORCEINLINE Helper_Print Print(int Count, float Time)
{
Helper_Print PrintInfo = Helper_Print();
PrintInfo.Init(Count, Time, FColor::Blue);
return PrintInfo;
}
FORCEINLINE Helper_Print Print(int Count, FColor Color)
{
Helper_Print PrintInfo = Helper_Print();
PrintInfo.Init(Count, 9999, Color);
return PrintInfo;
}
FORCEINLINE Helper_Print Print(float Time, FColor Color)
{
Helper_Print PrintInfo = Helper_Print();
PrintInfo.Init(-1, Time, Color);
return PrintInfo;
}
FORCEINLINE Helper_Print Print(int Count, float Time, FColor Color)
{
Helper_Print PrintInfo = Helper_Print();
PrintInfo.Init(Count, Time, Color);
return PrintInfo;
}
// log
FORCEINLINE Helper_Print PrintLog()
{
Helper_Print PrintInfo = Helper_Print();
PrintInfo.InitLog(1);
return PrintInfo;
}
FORCEINLINE Helper_Print PrintLogWarning()
{
Helper_Print PrintInfo = Helper_Print();
PrintInfo.InitLog(2);
return PrintInfo;
}
FORCEINLINE Helper_Print PrintLogError()
{
Helper_Print PrintInfo = Helper_Print();
PrintInfo.InitLog(3);
return PrintInfo;
}