阿赵UE引擎C++编程学习笔记——信息打印输出

  大家好,我是阿赵。
  在之前介绍HelloWorld的时候,使用了一个打印的命令,把HelloWorld输出到输出日志里面。
  对于我们编写程序代码来说,有2个手段是对程序差错非常重要的,一个是断点,另外一个是输出日志。通过输出日志,我们可以知道程序运行的情况,并且检查程序的问题。这里来看看UE里面是怎样输出日志的。

一、 蓝图打印

  如果使用蓝图来输出打印,常用的有2种节点,分别是Print String另外一种是Log String
在这里插入图片描述

1、 Print String

  这个节点的功能会比较多,可以指定输出的打印内容,可以选择输出到屏幕和输出到日志输出(Log),可以指定输出到屏幕时的字体颜色和持续时间。

2、 Log String

  这个节点的功能就比较少了,只有输出字符串到日志输出(Log)

  屏幕输出指的是在运行时在屏幕的左上角出现打印信息:
在这里插入图片描述

  输出日志指的是下面输出日志框里面输出文字:
在这里插入图片描述

  那么接下来就看看,在不用蓝图,而改成C++之后,要怎样实现这些打印输出。

二、 控制台日志输出

  如果只是输出到日志,那么使用的方法是:

UE_LOG(CategoryName, Verbosity, Format, ...)

  简单举例就是:

UE_LOG(LogTemp, Display, TEXT("Start level1 from CPP"));

  这个方法实际上类似于蓝图的Log String功能,比较简单,也是传入字符串然后输出到日志。
在这里插入图片描述

不过这里多了一些参数:
  第一个参数是打印的对象类型,对应的选项是这一些:

ENGINE_API DECLARE_LOG_CATEGORY_EXTERN(LogPath, Warning, All);
ENGINE_API DECLARE_LOG_CATEGORY_EXTERN(LogController, Warning, All);
ENGINE_API DECLARE_LOG_CATEGORY_EXTERN(LogPhysics, Warning, All);
ENGINE_API DECLARE_LOG_CATEGORY_EXTERN(LogBlueprint, Warning, All);
ENGINE_API DECLARE_LOG_CATEGORY_EXTERN(LogBlueprintUserMessages, Log, All);
ENGINE_API DECLARE_LOG_CATEGORY_EXTERN(LogAnimation, Warning, All);
ENGINE_API DECLARE_LOG_CATEGORY_EXTERN(LogRootMotion, Warning, All);
ENGINE_API DECLARE_LOG_CATEGORY_EXTERN(LogLevel, Log, All);
ENGINE_API DECLARE_LOG_CATEGORY_EXTERN(LogSkeletalMesh, Log, All);
ENGINE_API DECLARE_LOG_CATEGORY_EXTERN(LogStaticMesh, Log, All);
ENGINE_API DECLARE_LOG_CATEGORY_EXTERN(LogNet, Log, All);
ENGINE_API DECLARE_LOG_CATEGORY_EXTERN(LogNetSubObject, Log, All);
ENGINE_API DECLARE_LOG_CATEGORY_EXTERN(LogRep, Log, All);
ENGINE_API DECLARE_LOG_CATEGORY_EXTERN(LogNetPlayerMovement, Warning, All);
ENGINE_API DECLARE_LOG_CATEGORY_EXTERN(LogNetTraffic, Warning, All);
ENGINE_API DECLARE_LOG_CATEGORY_EXTERN(LogRepTraffic, Warning, All);
ENGINE_API DECLARE_LOG_CATEGORY_EXTERN(LogNetDormancy, Warning, All);
ENGINE_API DECLARE_LOG_CATEGORY_EXTERN(LogSkeletalControl, Warning, All);
ENGINE_API DECLARE_LOG_CATEGORY_EXTERN(LogSubtitle, Log, All);
ENGINE_API DECLARE_LOG_CATEGORY_EXTERN(LogTexture, Log, All);
ENGINE_API DECLARE_LOG_CATEGORY_EXTERN(LogTextureUpload, Log, All);
ENGINE_API DECLARE_LOG_CATEGORY_EXTERN(LogPlayerManagement, Error, All);
ENGINE_API DECLARE_LOG_CATEGORY_EXTERN(LogSecurity, Warning, All);
ENGINE_API DECLARE_LOG_CATEGORY_EXTERN(LogEngineSessionManager, Log, All);
ENGINE_API DECLARE_LOG_CATEGORY_EXTERN(LogViewport, Log, All);

  第二个参数Verbosity。这个参数是指定打印级别的,对应的枚举是:

/** 
 * Enum that defines the verbosity levels of the logging system.
 * Also defines some non-verbosity levels that are hacks that allow
 * breaking on a given log line or setting the color.
**/
namespace ELogVerbosity
{
	enum Type : uint8
	{
		/** Not used */
		NoLogging		= 0,

		/** Always prints a fatal error to console (and log file) and crashes (even if logging is disabled) */
		Fatal,

		/** 
		 * Prints an error to console (and log file). 
		 * Commandlets and the editor collect and report errors. Error messages result in commandlet failure.
		 */
		Error,

		/** 
		 * Prints a warning to console (and log file).
		 * Commandlets and the editor collect and report warnings. Warnings can be treated as an error.
		 */
		Warning,

		/** Prints a message to console (and log file) */
		Display,

		/** Prints a message to a log file (does not print to console) */
		Log,

		/** 
		 * Prints a verbose message to a log file (if Verbose logging is enabled for the given category, 
		 * usually used for detailed logging) 
		 */
		Verbose,

		/** 
		 * Prints a verbose message to a log file (if VeryVerbose logging is enabled, 
		 * usually used for detailed logging that would otherwise spam output) 
		 */
		VeryVerbose,

		// Log masks and special Enum values

		All				= VeryVerbose,
		NumVerbosity,
		VerbosityMask	= 0xf,
		SetColor		= 0x40, // not actually a verbosity, used to set the color of an output device 
		BreakOnLog		= 0x80
	};
}

稍微改一下打印的参数,看看效果:

UE_LOG(LogAnimation, Warning, TEXT("Start level1 from CPP"));
UE_LOG(LogActor, Error, TEXT("Start level1 from CPP"));

在这里插入图片描述

可以看到,第一个参数会出现在输出的前面,可以方便我们用过滤器来过滤打印,然后不同的打印级别,还会出现不同的颜色。

三、 屏幕输出

  如果需要在屏幕,调用的是

UEngine::AddOnScreenDebugMessage(int32 Key, float TimeToDisplay, FColor DisplayColor, const FString& DebugMessage, bool bNewerOnTop, const FVector2D& TextScale)

比如这样:

GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("Start level1 from CPP"));

在这里插入图片描述

这里有多个参数
第一个参数是这个log的key
比如我这样打印:

GEngine->AddOnScreenDebugMessage(1, 5.0f, FColor::White, TEXT("Start level1 from CPP"));
	GEngine->AddOnScreenDebugMessage(1, 5.0f, FColor::White, TEXT("Start level1 from CPP 2"));
	GEngine->AddOnScreenDebugMessage(2, 5.0f, FColor::White, TEXT("Start level1 from CPP 3"));
	GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::White, TEXT("Start level1 from CPP 4"));
	GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::White, TEXT("Start level1 from CPP 5"));

相同的key的打印,会互相顶掉,所以同样是1作为key的两条打印,第二条就把第一条顶掉了。但如果key是-1,那么就不会互相顶掉:
在这里插入图片描述

第二个参数是打印的持续时间:
因为需要显示在屏幕上,如果一直出现,会导致屏幕很花,所以在屏幕打印的时候,需要指定一个持续时间,过了时间之后,打印就会消失

第三个参数是打印的颜色:

GEngine->AddOnScreenDebugMessage(1, 5.0f, FColor::White, TEXT("Start level1 from CPP 2"));
GEngine->AddOnScreenDebugMessage(2, 5.0f, FColor::Yellow, TEXT("Start level1 from CPP 3"));
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("Start level1 from CPP 4"));
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Green, TEXT("Start level1 from CPP 5"));

在这里插入图片描述

第三个参数就是字符串的内容
第四个参数是控制新的内容是不是在最上面
在这里插入图片描述

第五个参数是控制打印内容的缩放:

GEngine->AddOnScreenDebugMessage(1, 5.0f, FColor::White, TEXT("Start level1 from CPP"));
GEngine->AddOnScreenDebugMessage(1, 5.0f, FColor::White, TEXT("Start level1 from CPP 2"));
GEngine->AddOnScreenDebugMessage(2, 5.0f, FColor::Yellow, TEXT("Start level1 from CPP 3"), true, {3,2});
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("Start level1 from CPP 4"));
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Green, TEXT("Start level1 from CPP 5"));

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/606527.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

地下水位自动监测设备:矿井水文监测系统

TH-DSW2地下水位自动监测设备具有实时性、连续性和自动化等特点,广泛应用于地下水深井水位测量、矿山深井水位测量、地热井水位测量。可以实现对地下水位的24小时不间断监测。它在城市供水和水资源管理、农业灌溉、地质和地下探测等领域具有广泛的应用。 在城市供水…

【python】基于岭回归算法对学生成绩进行预测

前言 在数据分析和机器学习领域,回归分析是一种预测连续数值的监督学习技术。当数据特征与目标变量之间存在线性关系时,线性回归模型尤其有用。然而,当特征数量多于样本数量,或者特征之间存在多重共线性时,普通最小二…

液压阀比例电磁铁控制放大器

液压阀比例电磁铁控制放大器是一种将电信号精确转换为液压动力的技术,用于实现对液压系统的精细控制。与传统的开关型电磁铁不同,比例电磁铁可以实现连续控制,允许进行微调以适应不同的控制需求。比例液压阀包括比例压力阀、比例流量阀等&…

融知财经:期货交易原理是怎样的?期货交易有哪些特征?

期货的原理是基于对某期货品种未来走势的判断而形成对其合约的买卖交易,因此期货可以解释为买涨或买跌。买涨,即看多交易,预期某期货品种未来价格上涨而进行的买入开仓交易;买跌,即看空交易,预期某期货品种…

【Python深度学习(第二版)(4)】神经网络的基本数据结构-张量概念、阶数、使用NumPy操作张量、张量种类、样本轴等概念

文章目录 一. 张量概念二. 张量的阶数1. 标量(0阶张量)2. 向量(1阶张量)2. 矩阵(2阶张量)3. 3阶张量与更高阶的张量 三. 张量属性及操作张量1. 张量的关键属性2. 在NumPy中操作张量2.1. 选择某个图片数据2.…

班级综合测评|基于Springboot+vue的班级综合测评管理系统(源码+数据库+文档)

目录 基于Springbootvue的“智慧食堂”系统 一、前言 二、系统设计 三、系统功能设计 1 管理员功能模块 2学生功能模块 3教师功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大…

Python应用:让生活更智能

随着科技的进步,Python已成为一种非常受欢迎的编程语言,它在数据分析、人工智能、Web开发等领域有着广泛的应用。今天,我们将探讨一个Python应用的例子,这个应用将帮助我们更智能地管理日常生活。 应用名称:智能生活助…

Kubernetes最小单元Pod的生命周期

1.1 Pod生命周期 1.1.1 过程及状态 Pod 的生命周期管理是 Kubernetes 集群中非常重要的一部分,它涉及到 Pod 从创建到销毁的整个过程。下面是 Pod 生命周期中各个阶段的简要说明: Pod 创建过程:当一个 Pod 被创建时,Kubernetes 会…

三层架构实验

交换部分 第一个步骤配 Eth-Trunk,目的是:将两条线绑在一起 sw和1sw2上配置 [sw1]interface Eth-Trunk 0 //创建隧道 [sw1-Eth-Trunk0]q [sw1]int g 0/0/2 [sw1-GigabitEthernet0/0/2]eth-trunk 0 //进入接口划分隧道 [sw1-GigabitEthernet0/0/2]…

JavaScript算法描述【排序与搜索】六大经典排序|搜索旋转排序数组|在排序数组中查找元素的第一个和最后一个位置、数组中的第K个|

🐧主页详情:Choice~的个人主页 文章目录 搜索旋转排序数组方法一 二分查询最大最小值思路详解代码方法二 二分查询中间数 在排序数组中查找元素的第一个和最后一个位置、数组中的第K个最大元素和颜色分类在排序数组中查找元素的第一个和最后一个位置方法…

【LeetCode刷题】153. 寻找旋转排序数组中的最小值

1. 题目链接2. 题目描述3. 解题方法4. 代码 1. 题目链接 153. 寻找旋转排序数组中的最小值 2. 题目描述 3. 解题方法 根据题目分析,可以明确一点,无论该数组如何旋转,都会有这样的一个性质,就是nums[0] > nums[n-1]&#xf…

CST软件的界面快捷键汇总与操作窗口【入门基础】

CST界面操作快捷键 利用鼠标和键盘快捷键的GUI操作 View > Mouse Control 本章节介绍,使用鼠标和键盘快捷键,操作CST软件的2D/3D GUI (Graphical User Interface图形用户界面)的方法。为了快速方便地操作2D/3D Model,建议熟悉本章节的内…

springcloud报错:Failed to start bean‘webServerStartStop‘

如果你正在使用nacos进行服务注册,然后报一下错误: 那就说明的nacos没有打开,所以找到你的下载nacos的文件夹 好了,错误完美解决~

eNSP Pro 最新版安装实践

目录 写在前面什么是eNSP Pro版本配置需求 安装流程宿主机环境安装步骤 写在前面 最近听到说,华为的eNSP Pro不再限制账号使用了,马上尝试了一下。 官网下载链接: https://support.huawei.com/enterprise/zh/enterprise-professional-servic…

鸿蒙内核源码分析(环境脚本篇) | 编译鸿蒙原来如此简单

很香的 Docker 如果只是为了编译鸿蒙,初级的接触鸿蒙,docker是很香的,从第一次接触docker就对它爱不释手, 脏活累活它干了,少了太多的麻烦. docker 编译鸿蒙看编译环境篇就行了, L1 和 L2 都编译通过了.如果要深入的了解鸿蒙,比如调试鸿蒙的代码或编译工具,就需要另辟蹊径了. …

区块链的可扩展性三难问题

这个词是由以太坊的联合创始人Vitalik Buterin创造的,并提出了理想的区块链需要具备的三个特征:去中心化、可扩展性和安全性。 Vitalik还提出,区块链几乎不可能很好地实现所有这三个特征,所以会出现权衡。 因此,今天…

linux 使用intel oneapi报错报错

使用intel oneapi 2024.1.0 时经常报这个错误 因为当前 intel2024.1.0没有在使用 需要改回2024.0.0并安装适配的torch的包来运行

XN297 2.4GHz 单片高速无线收发芯片

概述 XN297是一款工作在2.400~2.483GHz世界通用ISM频段的单片无线收发芯片。该芯片集成 射频收发器、频率发生器、晶体振荡器、调制解调器等功能模块,并且支持一对多组网和带 ACK的通信模式。发射输出功率、工作频道以及通信数据率均可配置。 主要特性 1、低功…

三星硬盘好还是西数硬盘好?硬盘数据丢失怎么找回

在数字化时代,硬盘作为数据存储的核心组件,其品质与性能直接关系到用户的数据安全与使用体验。在众多硬盘品牌中,三星与西数无疑是两个备受关注的名字。那么,究竟是三星硬盘更胜一筹,还是西数硬盘更受用户青睐&#xf…

【项目】使用Yolov8 + tesseract 实现“营业执照”信息解析(OCR) + 输入可为图片或者pdf + 完整代码 + 整体方案 + 全网首发

本项目可用于毕业设计参考、实验等,营业执照分为横版和竖版,整体检测+识别效果如下所示: 说明:图片来源于网络,如有侵权,请联系作者删除。 目录