UE4-开发常用笔记

多线程注意事项

不能游戏线程(GameThread)之外的线程中不能做以下事,否则会导致异常。

  • 创建/修改/删除游戏对象(UObjects / AActors)
  • 使用定时器(TimerManager)
  • 使用任何绘制接口,例如DrawDebugLine。

非要做的话,可以通过异步的方式,如下:

#include "Async.h"
AsyncTask(ENamedThreads::GameThread, [=]()
{
    // 这里可以做上面不能做的事了
});

自定义控制台变量

在调试运行时,使用自定义的控制台变量可以方便的在控制台中随时设置值,从而控制业务逻辑,而且不会出现在最终发布版本中。

例如FAutoConsoleVariable,支持bool、int32、float和const TCHAR*变量类型。

示例:

static FAutoConsoleVariable isShowExplodeRange(TEXT("c.isShowExplodeRange"), false, TEXT("isShowExplodeRange"), ECVF_Cheat);
if (isShowExplodeRange->GetBool())
{
    // 业务代码
}

程序调试运行时,通过(`)或(~)键打开控制台,输入c.isShowExplodeRange 1c.isShowExplodeRange 0即可修改这个bool值。

日志

1、在当前屏幕打印。

GEngine->AddOnScreenDebugMessage(-1, 2.f, FColor::Red, TEXT("XXXX"));

对应蓝图的Print String。首参数-1,表示无需更新或刷新此消息,第二个参数表示持续时间。

2、在编辑器的“输出日志”窗口打印。

UE_LOG(LogTemp, Log, TEXT("XXXX"));
UE_LOG(LogTemp, Log, TEXT("XXXX:%d"), 233); // 格式化输出

留下评论