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.hqwc.cn/news/276615.html

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

相关文章

【每日一题】反转二叉树的奇数层

文章目录 Tag题目来源题目解读解题思路方法一:广度优先搜索方法二:深度优先搜索 写在最后 Tag 【深度优先搜索】【广度优先搜索】【二叉树】【2023-12-15】 题目来源 2415. 反转二叉树的奇数层 题目解读 反转二叉树奇数层的节点。 解题思路 对于二叉…

基于Modis的遥感数据的地表温度的获取解决方案----以京津唐为例

1.背景与技术路线 地表温度(LST)是区域和全球尺度地表物理过程中的一个关键因子,也是研究地表和大气之间物质交换和能量交换的重要参数。许多应用如干旱、高温、林火、地质、水文、植被监测,全球环流和区域气候模型等都需要获得 LST。本方案以北京为例采用星载传感器的红外通道…

智慧工地防盗新手段:TSINGSEE青犀工地智能监控防盗系统方案

工地监控大家都很了解,主要是利用视频监控摄像头全方位无死角地对工地场所进行监控,并在汇聚平台(如:安防监控系统EasyCVR平台)上进行统一汇聚与分发。不过随着科技的发展,智能视频监控在工地监管方面又有了…

12.14_黑马数据结构与算法笔记Java

目录 120 二叉搜索树 min max 121 二叉搜索树 put 122 二叉搜索树 前任后任1 123 二叉搜索树 前任后任2 124 二叉搜索树 删除1 125 二叉搜索树 删除2 126 二叉搜索树 删除3 127 二叉搜索树 删除 递归1 128 二叉搜索树 删除 递归2 129 二叉搜索树 范围查询 130 二叉搜…

外汇天眼:如果美元开始降息,会为市场带来哪些影响?

一、美元降息的影响 美元一旦开始降息,将对全球经济产生重要影响。 降息政策将带动美国内部的消费和投资增长。 透过降低借贷成本,鼓励个人和企业增加支出,刺激经济活动。 以最新数据为例,美国的消费者信心指数正在上升&#xff…

HTML如何使用图片链接

文章目录 图片链接的使用常见图片类型PNGJPGGIFBMP 图片链接的使用 在 HTML 中&#xff0c;图像由 标签定义。 是空标签&#xff0c;意思是说&#xff0c;它只包含属性&#xff0c;并且没有闭合标签。 语法&#xff1a; <img src”图片路径" title“鼠标悬浮在图片上…

基于STM32的智能小区环境监测

一、概述 本系统应用STM32F407VET6单片机为控制处理器&#xff0c;加上外设备组成单片机最小系统。配以输入输出部分&#xff0c;通过采集温湿度、甲醛、PM2.5等数据在LCD液晶上显示&#xff0c;内加单独时钟晶振电路&#xff0c;保护断电后时间参数不变&#xff0c;外接5v电源…

HarmonyOS应用元服务上架

HarmonyOS应用/元服务上架 概述 当您开发、调试完HarmonyOS应用/元服务&#xff0c;就可以前往AppGallery Connect申请上架&#xff0c;华为审核通过后&#xff0c;用户即可在华为应用市场获取您的HarmonyOS应用/元服务。 HarmonyOS会通过数字证书与Profile文件等签名信息来…

未命名文章分布式系统理论基础: 时间、时钟和事件顺序

目录 物理时钟 vs 逻辑时钟 Lamport timestamps Vector clock Version vector 小结 转自&#xff1a;https://www.cnblogs.com/bangerlee/p/5448766.html 该系列博文会告诉你什么是分布式系统&#xff0c;这对后端工程师来说是很重要的一门学问&#xff0c;我们会逐步了解分布式…

代码随想录二刷 | 二叉树 | 110.平衡二叉树

代码随想录二刷 &#xff5c; 二叉树 &#xff5c; 110.平衡二叉树 题目描述解题思路递归迭代 代码实现递归法迭代法 题目描述 110.平衡二叉树 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉…

软实力篇---第二篇

系列文章目录 文章目录 系列文章目录前言一、必知必会的几点二、必须了解的两大法则三、项目经历怎么写前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一、必知必…

IP代理如何影响网站的速度?代理ip服务器有哪些作用?

目录 前言 一、如何影响速度 二、代理服务器的作用 1. 隐藏真实IP地址 2. 绕过访问限制 3. 分布式访问 4. 数据缓存和加速 总结 前言 IP代理是一种通过在用户和目标网站之间引入代理服务器来访问目标网站的方式。代理服务器充当中间人&#xff0c;将用户的请求转发给目…