一、屏幕日志输出
调用全局变量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格式
04、添加
如果“文件” 的地方找不到 “高级保存选项” 这选项,需要添加:
这样就有“高级保存选项”啦。
三、 控制台日志输出
使用宏UE_LOG进行控制台日志输出(日志会写入本地缓存)
01、设置控制台时输出得日志分类
日志类型冗余度,分为:
Fatal(会终止进程)致命问题
Error(会终止进程)错误问题
Warning、Display、Log(较常用的日志分类项)
Verbose (将日志详细信息记录到日志文档,但不向控制台输出)
VeryVerbose(将日志详细信息记录到日志文档,但不向控制台输出)
02、控制台输出信息
在 MyGameModeBase.cpp 文件中重写 BeginPlay()函数(和上面一样),使用宏UE_LOG进行控制台日志输出
void AMyGameModeBase::BeginPlay()
{
Super::BeginPlay();
UE_LOG(LogTemp, Log, TEXT("你好!!!"));
}
这样就可以在控制台打印了
四、 自定义日志分类
-
前面的日志LogTemp都是系统给的,开发大型项目的时候可以自己定义日志分类,方便更快捷的查询自己想要的消息
-
使用宏进行自定义日志输出
//-------------在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("自定义日志分类"));
}
运行结果如下:
五、 格式化日志
通过占位符,传参输出
-
%d 整数输出
-
%f 浮点数输出
-
%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); }
运行结果如下:
总结
以上就是今天要说的内容,本文仅仅简单介绍了虚幻引擎中的日志输出使用。