UE5 C++(三)— 基本用法(生命周期、日志、基础变量)

news2024/11/27 6:17:11

文章目录

  • 生命周期
  • 日志打印
    • Outlog打印
    • 屏幕打印
  • 基础变量类型
    • FString、FName 和 FText,三者之间的区别
  • 基础数据类型打印

忘记说了每次在Vscode修改后C++脚本后,需要编译一下脚本,为了方便我是点击这里编译脚本
在这里插入图片描述

生命周期

Actor 生命周期官方文档中有详细介绍,这里只介绍常用的。

常用声明周期函数:

  • BeginPlay() :游戏开始时执行一次
  • Tick(float DeltaTime) :游戏运行时每帧执行一次
  • EndPlay(const EEndPlayReason::Type EndPlayReason) :游戏结束或者切换关卡时执行一次

集成自AGameMode实现类AMyGameMode

#pragma once

#include "CoreMinimal.h"
#include "MyGameState.h"
#include "MyHUD.h"
#include "MyPawn.h"
#include "MyPlayerController.h"
#include "MyPlayerState.h"
#include "GameFramework/GameMode.h"
#include "MyGameMode.generated.h"

UCLASS()
class DEMO_API AMyGameMode : public AGameMode
{
	GENERATED_BODY()
	AMyGameMode();

public:
	// 游戏开始时执行一次
	virtual void BeginPlay() override;
	//游戏运行时每帧执行一次
	virtual void Tick(float DeltaTime) override;
	//游戏结束h或者切换关卡时执行一次
	virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
};

#include "MyGameMode.h"

AMyGameMode::AMyGameMode()
{
    DefaultPawnClass = AMyPawn::StaticClass();
    HUDClass = AMyHUD::StaticClass();
    PlayerControllerClass = AMyPlayerController::StaticClass();
    GameStateClass = AMyGameState::StaticClass();
    PlayerStateClass = AMyPlayerState::StaticClass();
}

void AMyGameMode::BeginPlay()
{
    Super::BeginPlay();
}

void AMyGameMode::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);
}

void AMyGameMode::EndPlay(const EEndPlayReason::Type EndPlayReason)
{
    Super::EndPlay(EndPlayReason);
}

日志打印

Outlog打印

void AMyGameMode::BeginPlay()
{
    Super::BeginPlay();

    // LogTemp : 临时日志,不会保存到文件中
    // Warning : 警告日志,黄色 记录级别
    // TEXT : 打印内容
    // 日志级别常用三种:Display、Warning、Error
    UE_LOG(LogTemp, Display, TEXT("Hello World!"));
    UE_LOG(LogTemp, Warning, TEXT("Hello World!"));
    UE_LOG(LogTemp, Error, TEXT("Hello World!"));
}

在这里插入图片描述

屏幕打印

void AMyGameMode::BeginPlay()
{
    Super::BeginPlay();
    //打印到屏幕上
    GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("Hello World!"));
}

在这里插入图片描述

基础变量类型

打开关卡蓝图
在这里插入图片描述
查看变量类型
在这里插入图片描述
在C++脚本中声明

UCLASS()
class DEMO_API AMyGameMode : public AGameMode
{
	GENERATED_BODY()
	AMyGameMode();

public:
	// 游戏开始时执行一次
	virtual void BeginPlay() override;
	// 游戏运行时每帧执行一次
	virtual void Tick(float DeltaTime) override;
	// 游戏结束h或者切换关卡时执行一次
	virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;

	/****** 声明变量类型 ********/
	// 布尔类型
	bool m_IsBool;
	// 整型32位
	int32 m_Int32;
	// 整型64位
	int64 m_Int64;
	// 字节类型
	BYTE m_Byte;
	// FString字符串
	FString m_String;
	// FName字符串
	FName m_Name;
	//FText字符串
	FText m_Text;
	//FVector 向量类型  x,y,z轴
	FVector m_Vector;
	//FRotator 旋转类型  x轴旋转Roll,y轴旋转Pitch,z轴旋转Yaw
	FRotator m_Rotator;
	//FTransform 变换类型  位置(Position)+旋转(Rotation)+缩放(Scale)
	FTransform m_Transform;
};

在这里插入图片描述

FString、FName 和 FText,三者之间的区别

  • FName:表示名称,不区分大小写,不可更改
    • 引擎中的资源名称都是FName类型,

    • 通过一个轻型系统重复使用字符串,FName创建时会根据内容创建一个Hash值,且同样的内容只会存储一次。

    • 通过Hash值在进行FName的查找和访问时速度较快,而在比较的时,也不需要比较字符串内容,直接比较Hash值来区分不同FName字符串。

    • 另外两种字符串到FName的转换(特别注意的是,FText不能直接转换到FName,可先转换为FString,再转换为FName):

FString str = TEXT("Hello world~");
FText txt = LOCTEXT("keyName", "theValue");
FText txtNS = NSLOCTEXT("TextNameSpace", "keyName", "theValue");
 
// FString 转 FName:不可靠,丢失大小写信息
FName name1 = FName(*str);

FString strFromTxt = txt.ToString();
// FText 先转 FString,再转 FName:不可靠,丢失大小写信息,丢失本地化信息可能导致语言转换的潜在风险
FName name2 = FName(*strFromTxt);
  • FString:最接近std::string,着重在于字符串的操作
    • 提供了大量对字符串的操作接口,是三者中唯一可修改的字符串类型,
    • 也正因如此,FString对比其它两种字符串来说消耗更高,性能更低。
    • 另外两种字符串到FString的转换:
FName name = TEXT("I am Frank~");
FText txt = LOCTEXT("keyName", "theValue");
FText txtNS = NSLOCTEXT("TextNameSpace", "keyName", "theValue");

// FName 转 FString:可靠
FString str1 = name.ToString();
// FText 转 FString:不可靠,丢失本地化信息可能导致语言转换的潜在风险
FString str2 = txt.ToString();
  • FText:着重在于显示与本地化,显示可理解玩家能直接看到的信息
    • 本地化即多语言的处理,不可更改。
    • 相较于另外两种类型,FText会更加的臃肿,但提供了优秀的本地化功能。
    • 另外两种字符串到FText的转换:
FString str = TEXT("Hello world~");
FName name = TEXT("I am Hello~");

// FString 转 FText:可靠
FText txt1 = FText::FromString(str);
// FName 转 FText:可靠
FText txt2 = FText::FromName(name);

基础数据类型打印

//基础数据类型的输出打印
int32 MyInt=10;
float MyF1oat=5.0f;
bool MyBool=true;
char MyChar=’A';
FString MyStringl=TEXT("MyStringl");
FVector MyVector=FVector(0,0,0);
//打印
UE_LOG(LogTemp,Warning,TEXT("%d"),MyInt);
UE_LOG(LogTemp,Warning,TEXT("%f"),MyF1oat);
UE_LOG(LogTemp,Warning,TEXT("%d"),MyBoo1);
UE_LOG(LogTemp,Warning, TEXT("%c"),MyChar);
UE_LOG(LogTemp,Warning,TEXT("%s"),*MyString1);
UE_LOG(LogTemp,Warning,TEXT("%s"),*MyVector.ToString());

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

20--Set集合

1、Set集合 1.1 Set集合概述 java.util.Set接口和java.util.List接口一样,同样继承自Collection接口,它与Collection接口中的方法基本一致,并没有对Collection接口进行功能上的扩充,只是比Collection接口更加严格了。与List接口…

wordpress安装之正式开始安装wordpress

1、拉取wordpress镜像 docker pull wordpress 2、启动容器 启动容器,设置容器名为wordpress2并把80端口映射到宿主机的9988端口 docker run -it --name wordpress2 -p 9988:80 -d wordpress 3、查看容器状态 docker ps 4、安装wordpress博客程序 因为我们前面启…

SLAM算法与工程实践——相机篇:传统相机使用(3)

SLAM算法与工程实践系列文章 下面是SLAM算法与工程实践系列文章的总链接,本人发表这个系列的文章链接均收录于此 SLAM算法与工程实践系列文章链接 下面是专栏地址: SLAM算法与工程实践系列专栏 文章目录 SLAM算法与工程实践系列文章SLAM算法与工程实践…

关于找不到XINPUT1_3.dll,无法继续执行代码问题的5种不同解决方法

一、xinput1_3.dll的作用 xinput1_3.dll是Windows操作系统中的一款动态链接库文件,主要用于支持游戏手柄和游戏输入设备。这款文件属于Microsoft Xbox 360兼容性库,它包含了与游戏手柄和其他输入设备相关的功能。在游戏中,xinput1_3.dll负责…

计算机操作系统-第十八天

目录 进程调度时机 补充知识 进程调度的方式 非剥夺调度方式 剥夺调度方式 进程的切换与过程 本节思维导图 进程调度时机 进程调度(低级调度),即按照某种算法从就绪队列中选择一个进程为其分配处理机。 共有两种需要进行进程调度与…

CCNP课程实验-OSPF-CFG

目录 实验条件网络拓朴需求 配置实现基础配置1. 配置所有设备的IP地址 实现目标1. 要求按照下列标准配置一个OSPF网络。 路由协议采用OSPF,进程ID为89 ,RID为loopback0地址。3. R4/R5/R6相连的三个站点链路OSPF网络类型配置成广播型,其中R5路…

PMP项目管理 - 资源管理

系列文章目录 PMP项目管理 - 质量管理 PMP项目管理 - 采购管理 PMP项目管理 - 资源管理 PMP项目管理 - 风险管理 现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in…

DISC-MedLLM—中文医疗健康助手

文章目录 DISC-MedLLM 项目介绍数据集构建重构AI医患对话知识图谱生成问答对医学图谱构建图谱生成QA对 人类偏好引导的对话样例其他数据MedMCQA通用数据 模型微调评估评估方式评估结果 总结 DISC-MedLLM 项目介绍 DISC-MedLLM 是一个专门针对医疗健康对话式场景而设计的医疗领…

「斗破年番」小医仙黑皇城遭调戏,五品丹换药材,获取菩提涎消息

Hello,小伙伴们,我是拾荒君。 《斗破苍穹年番》的第75集已经更新了,喜欢这部国漫的小伙伴应该都去观看了吧,拾荒君也是看了看这一集。在这一集中,萧炎成功地帮助吴昊等人摆脱了鹰爪老人的围困,然后便前往了黑皇城。 黑…

openGauss学习笔记-163 openGauss 数据库运维-备份与恢复-导入数据-使用COPY FROM STDIN导入数据-简介

文章目录 openGauss学习笔记-163 openGauss 数据库运维-备份与恢复-导入数据-使用COPY FROM STDIN导入数据-简介163.1 关于COPY FROM STDIN导入数据163.2 CopyManager类简介163.2.1 CopyManager的继承关系163.2.2 构造方法163.2.3 常用方法 openGauss学习笔记-163 openGauss 数…

torch中张量与数据类型的介绍

PyTorch张量的定义介绍 PyTorch最基本的操作对象是张量,它表示一个多维数组,类似NumPy的数组,但是前者可以在GPU上加速计算 初始化张量 ttorch.tensor([1,2]) # 创建一个张量 print(t) t.dtype #打印t的数据类型为torch.int…

Vue 指定class区域增加水印显示(人员姓名+时间)

效果 代码,存放位置 /utils/waterMark.js //waterMark.js文件let waterMark {}let setWaterMark (str,str1) > {let id 1.23452384164.123412416;if (document.getElementById(id) ! null) {//ui-table是table上的一个样式,一般水印显示在这个tab…

visual stdio code运行js没有输出

visual code运行js没有输出 先Debug file 然后右键直接run code就会输出了 插件的安装 visual stdio code插件安装 c qt wordle游戏实现

RK3568平台(网络篇)添加网络交换芯片RTL8306M

一.硬件原理图 分析: 该交换芯片支持I2C、SPI、mdio通信,但是看ast1520的uboot代码采用的是mdio去通信phy芯片的,所以暂时也先采用mdio的方式,需要配置相应的引脚才可以配置成mdio通信模式,具体的配置硬件工程师解决。…

代码随想录算法训练营Day4 | 24.两两交换链表中的节点、19.删除链表的倒数第 N 个节点、面试题. 链表相交、142.环形链表II

LeetCode 24 两两交换链表中的节点 本题要注意的条件: 遍历终止条件改变引用指向的时候,需要保存一些节点记录 为了更好的操作链表,我定义了一个虚拟的头节点 dummyHead 指向链表。如下图所示 既然要交换链表中的节点,那么肯定…

Ribbon使用

Ribbon :处理客户端负载均衡和容错的解决方案 配置Ribbon的负载均衡 Rule接口: 定义客户端负载均衡的规则 RandomRule :随机选择RoundRobinRuleZoneAvoidanceRule 配置ribbon的负载均衡策略 在配置文件中配置 user-center:ribbon:NFLoadBalancerRul…

网络安全项目实战(六)--报文检测

11. NTP应用协议报文解析 目标 了解NTP协议了解NTP包基本捕获方式了解NTP协议探测(解析)方法(简单方法) 11.1. 使用ntpdate同步网络时间 安装 $ sudo apt-get install ntpdate对时服务 查看时间 $ date #date可以查看当前系…

Jupyter Notebook: 交互式数据科学和编程工具

Jupyter Notebook: 功能强大的交互式编程和数据科学工具 简介 Jupyter Notebook是一个开源的Web应用程序,广泛用于数据分析、科学计算、可视化以及机器学习等领域。它允许创建和共享包含实时代码、方程式、可视化和解释性文本的文档。总而言之,我认为它…

PLC、RS485、变频器通讯接线图详解

plc与变频器两者是一种包含与被包含的关系,PLC与变频器都可以完成一些特定的指令,用来控制电机马达,PLC是一种程序输入执行硬件,变频器则是其中之一。 但是PLC的涵盖范围又比变频器大,还可以用来控制更多的东西&#x…

excel可视化看板【动态关联公司、部门、人员、及时间】

昨天网友花钱定制了一个可视化报表,花了一整天时间,做了这份酷炫的可视化报表,右边按钮控件可以动态关联可视化图表 做这种这重要是数据的统计,只要能统计到,剩下的只是如何展示,慢慢的调整,美…