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

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

以上是关于UE 通用小功能代码集合《一》的主要内容,如果未能解决你的问题,请参考以下文章

[UE4]小地图接口设计

开发用到的小功能功能网站等

python 小技巧

UE4小技巧

UE4UE5模型鼠标点击选中边缘高亮(附UE5工程)

[UE4]封装继承多态