本文章由cartzhang編寫,轉載請註明出處。 所有權利保留。
文章鏈接: http://blog.csdn.net/cartzhang/article/details/78867455
作者:cartzhang
記錄一些,幾乎沒人都會用到一些小的功能。
以後還會有一些吧,所以先寫個《一》,也有很長時間沒有管理和更新了。
1. 打印到屏幕
FString DebugString;
DebugString += "sockte name is ......";
DebugString += SocketItem.WindowSocketList[0].SocketName;
if (GEngine)
{
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Blue, DebugString);
}
2. Set Timer. 定時器
設置Timer,帶循環的調用:CZ_SETTIMER_LOOP
設置Timer,不帶循環的調用:CZ_SETTIMER_UNLOOP
清理Timer:CZ_CLEARTIMER
檢測Timer是否激活:CZ_ISTIMERACTIVE
/************************************************************************/
/* Set Timer by handle. */
/************************************************************************/
#define CZ_SETTIMER_LOOP(handle, param1, param2) CZ_SETTIMER(handle, param1, param2, true)
#define CZ_SETTIMER_UNLOOP(handle, param1, param2) CZ_SETTIMER(handle, param1, param2, false)
#define CZ_SETTIMER(handle, param1, param2, param3)\
if (!GetWorldTimerManager().IsTimerActive(handle) && (param2) >= 0.0f)\
{\
GetWorldTimerManager().SetTimer(handle, this, ¶m1, param2, param3); \
}
#define CZ_CLEARTIMER(handle) (GetWorldTimerManager().ClearTimer(handle))
#define CZ_ISTIMERACTIVE(handle) (GetWorldTimerManager().IsTimerActive(handle))
3. 單獨記錄,寫入文件的一個宏定義
/************************************************************************/
/* LOG to file */
/************************************************************************/
#define CZ_LOG_S(FileName,InputString) \
{ \
static bool IsNewLog = true; \
FString SaveDirectory = FPaths::ProjectSavedDir(); \
SaveDirectory.Append("Logs/CZSave/"); \
FString TmpFileName = FileName; \
TmpFileName.Append(".log"); \
\
/** CreateDirectoryTree returns true if the destination directory existed prior to call or has been created during the call.*/ \
IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile(); \
CA_CONSTANT_IF(!PlatformFile.DirectoryExists(*SaveDirectory)) \
PlatformFile.CreateDirectoryTree(*SaveDirectory); \
\
/** Get absolute file path*/ \
FString AbsoluteFilePath = SaveDirectory + "/" + TmpFileName; \
FFileHelper::EEncodingOptions EncodingOptions = FFileHelper::EEncodingOptions::AutoDetect; \
IFileManager* FileManager = &IFileManager::Get(); \
uint32 WriteFlags = (uint32)(EFileWrite::FILEWRITE_Append); \
/** if file already exist,change name and save it.*/ \
CA_CONSTANT_IF(PlatformFile.FileExists(*AbsoluteFilePath) && IsNewLog) \
{ \
IsNewLog = false; \
FString AbsoluteDestinationPath = SaveDirectory + "/" + FDateTime::Now().ToString() + "-" + TmpFileName; \
PlatformFile.MoveFile(*AbsoluteDestinationPath, *AbsoluteFilePath); \
PlatformFile.DeleteFile(*AbsoluteFilePath); \
} \
{ \
FString TextToSave = FDateTime::Now().ToString(); \
TextToSave.Append("-"); \
TextToSave.Append(InputString); \
TextToSave.Append("\r\n"); \
FFileHelper::SaveStringToFile(TextToSave, *AbsoluteFilePath, EncodingOptions, FileManager, WriteFlags); \
} \
\
}
//
static FORCEINLINE void CZ_LOG(FString FileName, const TCHAR* Format, ...)
{
#if UE_BUILD_DEBUG || UE_EDITOR || WITH_EDITOR
TCHAR TempStr[1024];
va_list Ptr;
va_start(Ptr, Format);
FCString::GetVarArgs(TempStr, ARRAY_COUNT(TempStr), ARRAY_COUNT(TempStr) - 1, Format, Ptr);
va_end(Ptr);
CZ_LOG_S(FileName, FString(TempStr));
#endif
}
這個用法距離,與UE的UE_LOG一模一樣的。
舉例:
PW_LOG_S("CZLog", "Hello Marco");
PW_LOG("CZLog", TEXT(" MACRO this is just call string no format"));
PW_LOG("CZLog", TEXT("current health %f, character name is : %s"), Health, *GetFName().ToString());
文件會存在Ue的Saved/Logs下面。
這個好處是可以通過一個來屏蔽所有輸出和Log,並且到單獨某個文件中,方便各種查閱。
4. ….
暫時這樣。
多謝瀏覽,謝謝理解。