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

文章目录

  • 生命周期
  • 日志打印
    • 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、ErrorUE_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轴旋转YawFRotator 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.mzph.cn/news/229305.shtml

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

相关文章

年底总结-基于战略落地的年度经营计划

到了年底,今年不管经济如何,形势多么不好,这个月也要结束2023年了,在这个阶段最关键的是做好今年的总结以及明年的计划。 总结是为了更好地做明年的计划和形势的预判。 借用数据表作为工具,科学理性地对自身公司的经…

基于Java+Swingt学生信息管理系统

基于JavaSwing学生信息管理系统 一、系统介绍二、功能展示四、其他系统实现五、获取源码 一、系统介绍 1.用户登陆:在帮助按钮处,可以查看登陆账号及密码: 账号admin,密码123456 在未输入的情况下,会提示用户名不能为空&#xff…

广受好评的开源基础大模型最全梳理,你最钟意哪一个?

2023 年即将过去。一年以来,各式各样的大模型争相发布。当 OpenAI 和谷歌等科技巨头正在角逐时,另一方「势力」悄然崛起 —— 开源。 开源模型受到的质疑一向不少。它们是否能像专有模型一样优秀?是否能够媲美专有模型的性能? 迄…

C#实现MQTT over WebSocket

如何在网页端实现MQTT消息的发布和订阅? 实现MQTT功能,可以发布和订阅主题通过WebSocket协议将MQTT消息转发给对应的网页端 带着这个实现思路,采用C#控制台程序实现MQTT服务端功能,web端可以直接使用websocket插件与服务端双向通…

第7章 排序

前言 在这一章,我们讨论数组元素的排序问题。为简单起见,假设在我们的例子中数组只包含整数,虽然更复杂的结构显然也是可能的。对于本章的大部分内容,我们还假设整个排序工作能够在主存中完成,因此,元素的个…

计算机网络知识点

计算机网络中的OSI模型 OSI模型是指“国际标准化组织(SO)”提出的使各种计算机在世界范围内互通互联的网络标准框架简称开放系统互联参考模型 (OSI)。 七层模型:应用层、表示层、会话层、传输层、网络层(IP协议、RARP协议、ARP协议、CIDR协议&#xff0…

kafka学习笔记--Topic 数据的存储机制

本文内容来自尚硅谷B站公开教学视频,仅做个人总结、学习、复习使用,任何对此文章的引用,应当说明源出处为尚硅谷,不得用于商业用途。 如有侵权、联系速删 视频教程链接:【尚硅谷】Kafka3.x教程(从入门到调优…

docker小白第五天

docker小白第五天 docker的私有库 有些涉密的信息代码不能放在阿里云的镜像仓库,因此需要构建一个个人内网专属的私有库,将镜像或者容器代码进行推送保存。 下载镜像docker registry 执行代码docker pull registry,用于搭建私服前的准备。…

Linux系统log日志简单清理

系统空间告急 清理log日志 找出当前目录中文件最大的10个文件: cd /var/log du -s ./* | sort -nr | head 系统日志log文件: ll -h /var/log/journal 只保留100MB的日志 journalctl --vacuum-size100M 系统暴力爆破SSH日志: ll -h /var/lo…

初级数据结构(六)——堆

文中代码源文件已上传&#xff1a;数据结构源码 <-上一篇 初级数据结构&#xff08;五&#xff09;——树和二叉树的概念 | NULL 下一篇-> 1、堆的特性 1.1、定义 堆结构属于完全二叉树的范畴&#xff0c;除了满足完全二叉树的限制之外&#xff0c;还满…

SolidWorks二次开发 C#-读取基于Excel的BOM表信息

SolidWorks二次开发 C#-读取基于Excel的BOM表信息 问题点来源解决方案及思路相关引用链接 问题点来源 这是一位粉丝问的一个问题&#xff0c;他说到: 老师&#xff0c;请问Solidworks二次开发工程图中"基于Excel的材料明细表"怎么读取里面的数据&#xff1f; Ps:这…

leetcode刷题日志-383赎金信

思路&#xff1a;分别用两个map记录ransomNote和magazine中的字符以及出现的次数。最后遍历记录ransomNote的map&#xff0c;如果ransomNote的map中出现的magazine的map中没有出现或者出现的次数小于ransomNote的map则返回false&#xff0c;否则返回true&#xff1b; class So…

arcgis api for js 图层标注文本不显示

在打包arcgis api for js 项目后&#xff0c;更新到现场所有地图文本要素不显示的时候。 可能就是环境设置问题了&#xff0c;需要配置iis或者ngixs里边配置如下类型 iis发布的项目 1、打开iis中发布的网站 2、找到网站的MIME类型如下图 3、添加一下类型&#xff08;一个都不…

机器学习项目精选 第一期:超完整数据科学资料合集

大噶吼&#xff0c;不说废话&#xff0c;分享一波我最近看过并觉得非常硬核的资源&#xff0c;包括Python、机器学习、深度学习、大模型等等。 1、超完整数据科学资料合集 地址&#xff1a;https://github.com/krishnaik06/The-Grand-Complete-Data-Science-Materials Pytho…

【Linux API 揭秘】container_of函数详解

我的圈子&#xff1a; 高级工程师聚集地 我是董哥&#xff0c;高级嵌入式软件开发工程师&#xff0c;从事嵌入式Linux驱动开发和系统开发&#xff0c;曾就职于世界500强企业&#xff01; 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; …

1852_bash中的find应用扩展

Grey 全部学习内容汇总&#xff1a; https://github.com/GreyZhang/toolbox 1852_bash中的find应用扩展 find这个工具我用了好多年了&#xff0c;但是是不是真的会用呢&#xff1f;其实不然&#xff0c;否则也不会出现这种总结式的笔记。其实&#xff0c;注意部分小细节之后…

liunx之Samba服务器

环境&#xff1a;虚拟机CENTOS 7和 测试机相通 一、Samba服务器_光盘共享&#xff08;匿名访问&#xff09; 1.在虚拟机CENTOS 7安装smb服务&#xff0c;并在防火墙上允许samba流量通过 2. 挂载光盘 3.修改smb.conf配置文件&#xff0c;实现光盘匿名共享 4. 启动smb服务 5.在…

手麻、腿麻、麻痛…背后竟隐藏7大疾病!多一个人知道,少一个悲剧!

手脚麻木背后的7大病症&#xff1a;骨病、脑梗、肿瘤…… 1、神经问题 上图四只手上橙色的区域代表了麻木感&#xff0c;如果您的手麻集中在无名指和小指的区域&#xff0c;您可以拿一张纸&#xff0c;用五个手指分别试着夹住&#xff0c;检验您的五个手指力量&#xff1b;您还…

(5)shell命令以及Linux的权限

写在前面 本章我们将重点讲解 Linux 权限&#xff0c;这是 Linux 基础部分中非常重要的一部分。内容比较干&#xff0c;我会稍稍正经些去讲解。话不多说&#xff0c;我们直接切入正题。 shell 命令及运行原理 严格意义上说的是一个操作系统&#xff0c;我们称之为 —— &…

Logstash访问安全访问Elasticsearch集群

生成logstash证书: opensal pkcs12 -in elastic-stack-ca.p12 -clcerts -nokeys > logafash.cer openssl x509 -in logstash.cer -out logstash.pem 编排配置文件