虛幻學習筆記11—C++結構體、枚舉與藍圖的通信

一、前言

? ? ? ? 結構體的定義和枚舉類似,枚舉的定義有兩種方式。區別是結構體必須以“F”開頭命名,而枚舉不用。

? ? ? ? 額外再講了一下藍圖生成時暴露變量的方法。

二、實現

2.1、結構體

?1、定義結構體

?代碼如下,注意這個定義的代碼一定要在“UCLASS()”的前面,否則會編譯報錯。另外結構體的命名也必須以“F”開頭,否在也會編譯報錯。通過如下定義的結構體,在藍圖中可以創建一個新的變量,如圖2.1.1所示,然后可以選中剛創建的類型變量。


USTRUCT(BlueprintType)
struct FMyStruct//必須以F開頭
{GENERATED_USTRUCT_BODY()UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyStruct")int32 Health;UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyStruct")FString MyName;
};UCLASS()
圖2.1.1
2、再定義結構體變量

? ? ? ? 通過如下代碼定義一個上述結構體類型的變量,在藍圖中可以編輯和使用該類型的變量,如圖2.1.2所示,為面板中的變量。圖2.1.3為藍圖中調用該定義的變量。

	//結構體UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="MyStruct")FMyStruct MyStructValue;
圖2.1.2
圖2.1.3

3、結構體和數據表格進行綁定

在代碼中創建一個新的結構體,該結構體繼承數據表類,創建完后需要將所需的頭文件添加到Including中,鼠標懸浮在”FTableRowBase"中通常會出現自動添加的提示按鈕,編譯。

USTRUCT(BlueprintType)
struct FDataStruct :public FTableRowBase
{GENERATED_USTRUCT_BODY()UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyDataStruct")int32 Age;UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyDataStruct")FString MyName;
};

然后在編輯器中創建數據表格,并選中剛剛創建的類型,如圖2.1.4所示,打開數據表格即可看到

圖2.1.4

結構體的具體變量,在添加一個新的行數據后可以對變量進行賦值,如圖2.1.5所示

圖2.1.5

還有一種創建CSV格式的文件,在文件中定義相同變量名的列數據,如圖2.1.6所示為CSV格式的

圖2.1.6

表格數據,將其直接拖動到虛幻引擎中的內容處,會自動彈出數據表格的創建窗口,如圖2.1.7所示,在行類型中選中剛剛創建的結構體,然后點擊應用,這個就會將剛剛CSV表中的數據填充到此時創建的數據表中,如圖2.1.8所示。

圖2.1.7
圖2.1.8

2.2、定義一個枚舉

1、第一種方式

首先定義一個宏,代碼如下,生成枚舉的反射數據,通過反射將枚舉暴露給藍圖,實現C++和藍圖的通信,BlueprintType的作用是可以在藍圖創建變量的時候也可以作為選項。其中UMETA是操作變量的屬性更改,代碼中修改最終展示的名字。

enum class MyCustomEnum1 :uint8
{OneType UMETA(DisplayName = "One"),TwoType UMETA(DisplayName = "Two"),ThreeType UMETA(DisplayName = "Three"),
};

通過以下代碼可以實現在各類面板和藍圖中使用該變量

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyEnum")MyCustomEnum1 MyEnum1;

2、第二種方式

?第二種定義枚舉的方式代碼如下,這種定義的MyEnumType里只能定義一個,超出會編譯報錯。

UENUM(BlueprintType)//生成枚舉的反射數據,通過反射將枚舉暴露給藍圖,實現C++和藍圖的通信,BlueprintType的作用是可以在藍圖創建變量的時候也可以作為選項
namespace MyEnumType
{enum MyCustomEnum{Type1,Type2,Type3,};
}

3、在藍圖中的呈現

如圖2.2.1所示為第二種方式創建的變量在創建藍圖新變量時可以選中該枚舉作為變量類型。

圖2.2.1

同時,在藍圖中也可以調用該枚舉,如圖2.2.2所示:

圖2.2.2
通過以下代碼可以實現在各類面板和藍圖中使用該變量
	//枚舉UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyEnum")TEnumAsByte<MyEnumType::MyCustomEnum> MyCustomEnum;

同時也可以在藍圖中調用和編輯該變量,如圖2.2.3所示

圖2.2.3

2.3、藍圖生成時暴露

定義一個變量如下所示,在ExposeOnSpawn后面可以賦值也可以如下所示,不會影響后續的操作

	/// <summary>/// 生成藍圖時暴露的變量/// </summary>UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyExposeOnSpawn", meta = (ExposeOnSpawn))float myExposeOnSpawnValue;

然后在藍圖中可以在生成該類型的類的時候講上述定義的變量暴露出來,如圖2.3.1所示

圖2.3.1

這個和藍圖中定義的普通變量勾選”生產時公開“是一樣的邏輯和道理。

三、總結

3.1、所有的定義都應該放在“UCLASS()”后面,否則會編譯報錯“Found 'USTRUCT' when expecting class while parsing class”。

3.2、結構體的命名必須以“F”開頭,否則會編譯報錯“Struct 'MyStruct' has an invalid Unreal prefix, expecting 'FMyStruct”,枚舉的命名不用任何固定開頭。

3.3、兩種枚舉定義的方式不同,在C++代碼中聲明定義后的變量方式也不同。

3.4、結構體和數據表的關系。

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

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

相關文章

從零構建屬于自己的GPT系列6:模型本地化部署2(文本生成函數解讀、模型本地化部署、文本生成文本網頁展示、代碼逐行解讀)

&#x1f6a9;&#x1f6a9;&#x1f6a9;Hugging Face 實戰系列 總目錄 有任何問題歡迎在下面留言 本篇文章的代碼運行界面均在PyCharm中進行 本篇文章配套的代碼資源已經上傳 從零構建屬于自己的GPT系列1&#xff1a;數據預處理 從零構建屬于自己的GPT系列2&#xff1a;模型訓…

ThinkPHP連接ORACLE數據庫教程

目錄 概念基本步驟詳細操作問題排除參考 概念 要連接Oracle數據庫&#xff0c;必須有兩個東西&#xff0c;一個PHP官方寫的擴展&#xff0c;一個Oracle官方寫的客戶端PHP是通過擴展去操作oralce客戶端連接的服務端數據庫&#xff0c;所以兩個都不能少&#xff0c;而且版本必須…

【數組】-Lc34-在排序數組中查找元素的第一個和最后一個位置(二分查找 + 兩邊擴展)

寫在前面 最近想復習一下數據結構與算法相關的內容&#xff0c;找一些題來做一做。如有更好思路&#xff0c;歡迎指正。 目錄 寫在前面一、場景描述二、具體步驟1.環境說明2.代碼 寫在后面 一、場景描述 給定一個按照升序排列的整數數組 nums&#xff0c;和一個目標值 target。…

大數據講課筆記1.4 進程管理

文章目錄 零、學習目標一、導入新課二、新課講解&#xff08;一&#xff09;進程概述1、基本概念2、三維度看待進程3、引入多道編程模型&#xff08;1&#xff09;CPU利用率與進程數關系&#xff08;2&#xff09;從三個視角看多進程 4、進程的產生和消亡&#xff08;1&#xf…

5V低壓步進電機驅動芯片GC6150,應用于攝像機,機器人 醫療器械等產品中。具有低噪聲、低振動的特點

GC6150是雙通道5V低壓步進電機驅動器&#xff0c;具有低噪聲、低振動的特點&#xff0c;特別適用于相機變焦對焦系統、萬向架、搖頭機等精度、低噪聲STM控制系統&#xff0c;該芯片為每個通道集成了一個256微步的驅動器。通過SPI & T2C接口&#xff0c;客戶可以方使地調整驅…

Python+Appium自動化測試之元素等待方法與重新封裝元素定位方法

在appium自動化測試腳本運行的過程中&#xff0c;因為網絡不穩定、測試機或模擬器卡頓等原因&#xff0c;有時候會出現頁面元素加載超時元素定位失敗的情況&#xff0c;但實際這又不是bug&#xff0c;只是元素加載較慢&#xff0c;這個時候我們就會使用元素等待的方法來避免這種…

C++ c_str()用法

標準庫的string類提供了3個成員函數來從一個string得到c類型的字符數組&#xff1a;c_str()、data()、copy(p,n)。 c_str()是Borland封裝的String類中的一個函數&#xff0c;它返回當前字符串的首字符地址。換種說法&#xff0c;c_str()函數返回一個指向正規C字符串的常量指針(…

下降路徑最小和/最小路徑和(dp問題)

1.狀態表示 2.狀態轉移方程 3.初始化 4.填表 從上往下 5.返回值 dp表最后一行的最小值 ------------------------------------------------------------------------------------------------------------------------------- 1.狀態表示 2.狀態轉移方程 3.初始化 4.填表 上…

【CVPR 2022】解讀 Controllable Animation of Fluid Elements in Still Images:光流法視頻生成

Diffusion Models視頻生成-博客匯總 前言:用戶輸入箭頭,就能讓圖像動起來,這是經典的Animating任務。CVPR 2022中的一篇經典論文《Controllable Animation of Fluid Elements in Still Images》使用光流法做這種image-to-video任務,很多做法值得借鑒,這篇博客詳細這篇論文…

【教程】app備案流程簡單三部曲即可完成

APP備案流程包括以下步驟&#xff1a; 1. 開發者實名認證&#xff1a;在提交備案申請之前&#xff0c;開發者需要通過移動應用開發平臺進行實名認證。這個步驟需要提供身份證號碼、姓名、聯系方式等信息&#xff0c;并上傳相關證件照片或掃描件。 2. 應用信息登記&#xff1a…

使用 PyTorch 完全分片數據并行技術加速大模型訓練

本文&#xff0c;我們將了解如何基于 PyTorch 最新的 完全分片數據并行 (Fully Sharded Data Parallel&#xff0c;FSDP) 功能用 Accelerate 庫來訓練大模型。 動機 隨著機器學習 (ML) 模型的規模、大小和參數量的不斷增加&#xff0c;ML 從業者發現在自己的硬件上訓練甚至加…

小程序域名SSL證書能用免費的嗎?

眾所周知&#xff0c;目前小程序要求域名強制使用https協議&#xff0c;否則無法上線。但是對于大多數開發者來說&#xff0c;為每一個小程序都使用上付費的SSL證書&#xff0c;也是一筆不小的支出。那么小程序能使用免費的SSL證書嗎&#xff1f; 答案是肯定的。目前市面上可選…

HCIP---RSTP/MSTP

文章目錄 目錄 文章目錄 前言 一.RSTP誕生背景 二.RSTP對比STP的快速收斂機制 端口角色變化 接口狀態變化 RSTP-BPDU 指定端口- P/A機制 BPDU發送變化 端口狀態快速切換 優化拓撲變更機制 三.MSTP MSTP誕生背景 MSTP相關概念 MSTP配置 總結 前言 STP協議雖然能夠解決環…

TypeScript中的函數注釋

一. 概覽 函數注釋主要分為顯示注釋、類型推斷、隱式的any&#xff0c;現在來詳細總結下 二. 顯示注釋 舉個例子 let str1: string hello,jacklet intArr: number[] [1,2,3] let strArr&#xff1a;Array<string> [1,2,3]function test(a: number,b: number): num…

記錄 | xftp遠程連接兩臺windows

1、打開openssh 設置 -> 應用 -> 可選功能 -> 添加功能 -> OpenSSH 客戶端&#xff0c;將 ssh 客戶端安裝將兩臺電腦的 ssh 開啟&#xff0c;cmd 中輸入 net start sshd2、配置 win10 賬號密碼 3、進行 xftp 連接

MATLAB安裝

親自驗證有效&#xff0c;多謝這位網友的分享&#xff1a; https://blog.csdn.net/xiajinbiaolove/article/details/88907232

租一臺服務器多少錢決定服務器的價格因素有哪些

租一臺服務器多少錢決定服務器的價格因素有哪些 大家好我是艾西&#xff0c;服務器這個名詞對于不從業網絡行業的人們看說肯定還是比較陌生的。在21世紀這個時代發展迅速的年代服務器在現實生活中是不可缺少的一環&#xff0c;平時大家上網瀏覽自己想要查詢的信息等都是需要服…

加減乘除簡單嗎?不,一點都不,利用位運算實現加減乘除(代碼中不含+ - * /)

文章目錄 &#x1f680;前言&#x1f680;異或運算以及與運算&#x1f680;加法的實現&#x1f680;減法的實現&#x1f680;乘法的實現&#x1f680;除法的實現 &#x1f680;前言 這也是阿輝開的新專欄&#xff0c;知識將會很零散不成體系&#xff0c;不過絕對干貨滿滿&…

華為鴻蒙HarmonyOS應用開發者高級認證試題及答案

判斷 1只要使用端云一體化的云端資源就需要支付費用&#xff08;錯&#xff09; 2所有使用Component修飾的自定義組件都支持onPageShow&#xff0c;onBackPress和onPageHide生命周期函數。&#xff08;錯&#xff09; 3 HarmonyOS應用可以兼容OpenHarmony生態&#xff08;對…

多維時序 | MATLAB實現SAO-CNN-BiGRU-Multihead-Attention多頭注意力機制多變量時間序列預測

多維時序 | MATLAB實現SAO-CNN-BiGRU-Multihead-Attention多頭注意力機制多變量時間序列預測 目錄 多維時序 | MATLAB實現SAO-CNN-BiGRU-Multihead-Attention多頭注意力機制多變量時間序列預測預測效果基本介紹模型描述程序設計參考資料 預測效果 基本介紹 MATLAB實現SAO-CNN-B…