Unreal學習筆記1-打印輸出

1. 概述

相比各種打斷點調試的辦法,還是更習慣使用打印輸出來進行調試。

2. 詳論

2.1. 代碼

這裏寫了三個函數:分別是輸出到屏幕,輸出到警告日誌,輸出錯誤日誌。

Output.h:

#pragma once

namespace Output
{
	void PrintScreen(const char* lpszFormat, ...);

	void PrintLogWarning(const char* lpszFormat, ...);

	void PrintLogError(const char* lpszFormat, ...);
};

Output.cpp:

#include "Output.h"

#include <Engine.h>
#include <Logging/LogMacros.h>

#include <array>

namespace Output
{
	void PrintScreen(const char* lpszFormat, ...)
	{
		char szInfo[512];

		va_list argList;
		va_start(argList, lpszFormat);
		vsnprintf(szInfo, 512, lpszFormat, argList);
		va_end(argList);

		//GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, FString::Printf(TEXT("Print Message this is %f"), 2.3f));
		GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, FString(UTF8_TO_TCHAR(szInfo)));
	}

	void PrintLogWarning(const char* lpszFormat, ...)
	{
		char szInfo[512];

		va_list argList;
		va_start(argList, lpszFormat);
		vsnprintf(szInfo, 512, lpszFormat, argList);
		va_end(argList);
		
		UE_LOG(LogTemp, Warning, TEXT("%s"), UTF8_TO_TCHAR(szInfo));
	}

	void PrintLogError(const char* lpszFormat, ...)
	{
		char szInfo[512];

		va_list argList;
		va_start(argList, lpszFormat);
		vsnprintf(szInfo, 512, lpszFormat, argList);
		va_end(argList);

		GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, FString(UTF8_TO_TCHAR(szInfo)));
		UE_LOG(LogTemp, Error, TEXT("%s"), UTF8_TO_TCHAR(szInfo));
	}
	
};

2.2. 解析

  • 打印輸出信息我認爲還是C語言的格式化輸出比較方便(類似printf("個數:%d", num);),使用格式化佔位符來拼接字符串。

  • UE的字符串類FString管理的是TCHAR字符串,TCHAR是char與wchar_t的封裝,在ANSI本地編碼中是char,在Unicode國際化編碼中是wchar_t。

  • UTF8_TO_TCHAR宏會將UTF8字符串轉換成TCHAR字符串。這段輸出打印代碼如果要輸出中文,需要把代碼文件的編碼更改爲UTF8編碼。

  • 輸出日誌可以顯示在“輸出日誌”面板:窗口->開發者工具->輸出日誌。

代碼地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章