UE 通用小功能代码集合《一》
Posted cartzhang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UE 通用小功能代码集合《一》相关的知识,希望对你有一定的参考价值。
本文章由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. ….
暂时这样。
多谢浏览,谢谢理解。
以上是关于UE 通用小功能代码集合《一》的主要内容,如果未能解决你的问题,请参考以下文章