UE4 打印信息到屏幕/日志 + 自定义简化输出工具

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;
}
发布了1 篇原创文章 · 获赞 1 · 访问量 37

猜你喜欢

转载自blog.csdn.net/qq_41644751/article/details/104707155