獨立游戲《星塵異變》UE5 C++程序開發日志2——創建并編寫一個C++類

在本篇日志中,我們將要用一個C++類來實現一個游戲內的物品,同時介紹UCLASS、USTRUCT、UPROPERTY的使用

一、創建一個C++類

我們在UE5的"內容側滑菜單"中,在右側空白中右鍵選擇"新建C++類",然后可以選擇一個想要的父類,這里我們要實現的是物品,所以選擇Object類作為父類

在"類的類型"中選擇公共,使其能夠被其他模塊調用

二、在.h文件中聲明變量

在VS中打開我們剛剛生成的.h文件,"#pragma once"表示這個.h無論被包含多少次,都只會編譯一次,"第三個頭文件是必須最后一編譯的頭文件,所以如果要新添頭文件,必須放在這個頭文件前面。

#pragma once#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "Stardust.generated.h"

接著在下面可以看到一個"UCLASS"宏,表明接下來所聲明的類將會暴露給UE5的反射系統。

"Blueprintable"表示這個c++類可以派生出藍圖類。

"GENERATED_BODY()"表示不繼承父類的構造函數,要想繼承父類的構造函數,需要替換為"GENERATED_UCLASS_BODY()"

UCLASS(Blueprintable)
class ASTROMUTATE_2_API UStardust : public UObject
{GENERATED_BODY()
public:};

接下來我們創建一個結構體來表示物品的各個屬性,在結構提前用USTRUCT宏將該結構體暴露給反射。

"BlueprintType"表示該結構體可以作為藍圖中的一種數據類型。

暴露給反射系統的結構體名稱必須以F開頭,在UE編輯器中該結構體的名稱將不包含首字母F,同時須使用"GENERATED_USTRUCT_BODY"宏。

USTRUCT(BlueprintType)
struct FStardustTable 
{//星塵數據GENERATED_USTRUCT_BODY()FStardustTable();UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "StardustStruct")FString StardustName;//名稱UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "StardustStruct")EStardustFormEnum StardustForm;//形態UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "StardustStruct")int StardustStackLimit;//堆疊上限
//為增加可讀性,這里只展示了物品的部分屬性
};

接下來我們先聲明一個構造函數,用于在物品生成時初始化屬性。

要聲明暴露給反射系統的變量,需要使用"UPROPERTY"宏。

"EditAnywhere"表示該變量在編輯器中的類默認設置和實例化細節面板中都可以被編輯,"Edit"也可以替換成"Visible",表示該變量只讀。

"BlueprintReadWrite"表示該變量在藍圖中可以獲取和設置,可將"ReadWrite"替換為"ReadOnly"表示該變量在藍圖中盡可獲取。

"Category"可以設置該變量所處的目錄。

第一個聲明的變量為FString,該數據類型與stl中的string類似,為可修改的字符串。

第二個聲明的變量是一個枚舉,枚舉的定義同樣需要先使用"UENUM"宏將其暴露給反射。

"BlueprintType"表示該枚舉可以作為藍圖中的數據類型。

"UMETA"中可以定義枚舉內容在藍圖中顯示的名稱。

UENUM(BlueprintType)
enum class EStardustFormEnum//形態
{Empty UMETA(DisplayName = "Empty"),Type1 UMETA(DisplayName = "Type1"),Type2 UMETA(DisplayName = "Type2"),Type3 UMETA(DisplayName = "Type3"),
};

未完待續

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/718262.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718262.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718262.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python70-Python的函數入門,了解下函數

函數是執行特定任務的一段代碼,程序通過將一段代碼定義成函數,并為該函數指定一個函數名,這樣即可在需要的時候多次調用這段代碼。因此,函數是代碼復用的重要手段。學習函數需要重點掌握定義函數、調用函數的方法。 與函數緊密相關的另一個知識點是lambda表達式。lamda表達…

Spring AOP(Aspect-Oriented Programming,面向切面編程)介紹

Spring AOP(Aspect-Oriented Programming,面向切面編程)是Spring框架的一個重要模塊,它提供了一種強大的方式來幫助開發者實現橫切關注點(cross-cutting concerns)的模塊化。橫切關注點是指那些影響多個模塊…

Linux設備模型(十一) - platform設備

一,platform device概述 在Linux2.6以后的設備驅動模型中,需關心總線、設備和驅動這3個實體,總線將設備和驅動綁定。在系統每注冊一個設備的時候, 會尋找與之匹配的驅動;相反的,在系統每注冊一個設備的時…

【Redis】實際應用 - 緩存

文章目錄 1. 緩存的基本概念2. Redis作為緩存的優勢2.1 內存存儲2.2 持久性選項2.3 數據結構豐富 3. Redis緩存的使用3.1 安裝和配置Redis3.2 連接到Redis3.3 存儲和獲取數據3.4 設置過期時間 4. 緩存策略4.1 LRU(最近最少使用)4.2 數據失效4.3 主動刷新…

可讓照片人物“開口說話”阿里圖生視頻模型EMO,高啟強普法

3 月 1 日消息,阿里巴巴研究團隊近日發布了一款名為“EMO(Emote Portrait Alive)”的 AI 框架,該框架號稱可以用于“對口型”,只需要輸入人物照片及音頻,模型就能夠讓照片中的人物開口說出相關音頻&#xf…

PDN分析及應用系列二-簡單5V電源分配-Altium Designer仿真分析-AD

PDN分析及應用系列二 —— 案例1:簡單5V電源分配 預模擬DC網絡識別 當最初為PCB設計打開PDN分析儀時,它將嘗試根據公共電源網絡命名法從設計中識別所有直流電源網絡。 正確的DC網絡識別對于獲得最準確的模擬結果非常重要。 在示例項目中已經識別出主DC網絡以簡化該過程。 …

Vulnhub靶機:Bellatrix

一、介紹 運行環境:Virtualbox 攻擊機:kali(10.0.2.4) 靶機:Bellatrix(10.0.2.9) 目標:獲取靶機root權限和flag 靶機下載地址:https://www.vulnhub.com/entry/hogwa…

Leetcode 3070. Count Submatrices with Top-Left Element and Sum Less Than k

Leetcode 3070. Count Submatrices with Top-Left Element and Sum Less Than k 1. 解題思路2. 代碼實現 題目鏈接:3070. Count Submatrices with Top-Left Element and Sum Less Than k 1. 解題思路 這一題就是一個二維的累積數組的問題,我們直接求一…

網絡學習:MPLS技術基礎知識

目錄 一、MPLS技術產生背景 二、MPLS網絡組成(基本概念) 1、MPLS技術簡介:Multiprotocol Lable Switching,多協議標簽交換技術 2、MPLS網絡組成 三、MPLS的優勢 四、MPLS的實際應用 一、MPLS技術產生背景 1、IP采用最長掩碼…

Power BI vs Superset BI 調研報告

調研結論 SupersetPower BI價格開源①. Power BI Pro 每人 $10/月($120/年/人) ②. Power BI Premium 每人 $20/月($240/年/人) ③. Power BI Embedded:4C10G $11W/年 權限基于角色的訪問控制,支持細粒度的訪問: 表級別、庫級別、圖表級別,看板級別,用戶級別 基于角色…

每天一個數據分析題(一百八十五)

給定下述Python代碼段,試問哪個選項正確描述了該代碼段的功能? data_raw[‘gender’] data_raw[‘gender’].map({‘Male’: 1, ‘Female’: 0}) A. 代碼中對gender變量進行了獨熱編碼(One-Hot Encoding),并將gender中的缺失值填充為類別平…

深度學習API——keras初學

keras定義: Keras是一個深度學習API(人工神經網絡庫),使用Python語言編寫的github開源項目,主要開發者為谷歌工程師。Keras底層可調用不同的機器學習平臺,如TensorFlow、Theano或micsoft-CNTK。 作用&…

Tomcat的配置文件

Tomcat的配置文件詳解 一.Tomcat的配置文件 Tomcat的配置文件默認存放在$CATALINA_HOME/conf目錄中,主要有以下幾個: 1.server.xml: Tomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主組件的相關配置信息&#x…

【推薦】免費AI論文寫作神器-「智元兔 AI」

還在為寫論文焦慮?免費AI寫作大師來幫你三步搞定! 智元兔AI是ChatGPT的人工智能助手,并且具有出色的論文寫作能力。它能夠根據用戶提供的題目或要求,自動生成高質量的論文。 不論是論文、畢業論文、散文、科普文章、新聞稿件&…

#WEB前端(浮動與定位)

1.實驗&#xff1a; 2.IDE&#xff1a;VSCODE 3.記錄&#xff1a; float、position 沒有應用浮動前 應用左浮動和右浮動后 應用定位 4.代碼&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><me…

pyqt5怎么返回錯誤信息給頁面(警告窗口)

在軟件設計中&#xff0c;我們可能會遇到對異常的處理&#xff0c;有些異常是用戶需要看到的&#xff0c;比如說&#xff0c;當我們登錄出錯的時候&#xff0c;后端需要給我們返回響應的錯誤信息&#xff0c;就像下圖實現的這樣。 類似這種效果&#xff0c;我們該如何實現&…

javaWebssh題庫管理系統myeclipse開發mysql數據庫MVC模式java編程計算機網頁設計

一、源碼特點 java ssh題庫管理系統是一套完善的web設計系統&#xff08;系統采用ssh框架進行設計開發&#xff09;&#xff0c;對理解JSP java編程開發語言有幫助&#xff0c;系統具有完整的源代碼和數據庫&#xff0c;系統主要采用B/S模式開發。開發環境為TOMCAT7.0,Mye…

「MySQL」基本操作類型

&#x1f387;個人主頁&#xff1a;Ice_Sugar_7 &#x1f387;所屬專欄&#xff1a;數據庫 &#x1f387;歡迎點贊收藏加關注哦&#xff01; 數據庫的操作 創建、顯示數據庫 使用 create 創建一個數據庫 create database goods;然后可以用 show databases 來查看已經創建的數…

我們如何知道人工智能系統有多智能?

1967 年&#xff0c;人工智能 &#xff08;AI&#xff09; 領域的創始人馬文明克西 &#xff08;Marvin Minksy&#xff09; 做出了一個大膽的預測&#xff1a;“在一代人之內…創造’人工智能’的問題將得到實質性解決。假設一代人大約是 30 年&#xff0c;明斯基顯然過于樂觀…

javaWebssh網上超市銷售管理系統myeclipse開發mysql數據庫MVC模式java編程計算機網頁設計

一、源碼特點 java ssh網上超市銷售管理系統是一套完善的web設計系統&#xff08;系統采用ssh框架進行設計開發&#xff09;&#xff0c;對理解JSP java編程開發語言有幫助&#xff0c;系統具有完整的源代碼和數據庫&#xff0c;系統主要采用B/S模式開發。開發環境為TOMCA…