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, &param1, 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. ….

暂时这样。
多谢浏览,谢谢理解。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页