最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

五、藍圖訪問C++變量(UPROPERTY)

2022-11-24 18:48 作者:愛玩UE5的小哥哥  | 我要投稿

一.從C++角度解讀藍圖變量

1.創(chuàng)建或者打開一個父類為Actor的藍圖類

本篇用的是我們之前創(chuàng)建的那個BP_Actor的藍圖類

分別將Rendering類別里面的變量拖到藍圖空白處,做對比

引擎只允許獲取這個變量而不能修改這個變量

引擎既能獲取這個變量又能修改這個變量

為什么會出現(xiàn)這樣的問題呢?有的變量只能get不能set,有的變量既能get又能set,那我能只能走進基類Actor的C++源碼中看一下區(qū)別

Parent Class:父類

2.走進父類Actor的C++源碼

①猜測問題:為什么有的變量只能get不能set,有的變量既能get又能set?

Ctrl+F搜索Actor Hidden In Game與Editor Billboard Scale變量



仔細觀察這兩個變量找出自認為能夠解釋清楚這個問題的理由:有的變量只能get不能set,有的變量既能get又能set?

Actor Hidden In Game:BlueprintReadOnly,?Category=Rendering

Editor Billboard Scale:BlueprintReadWrite,Category=Rendering

嘿嘿嘿,恭喜你你猜對了,用你的蹩腳英文解釋一下

Actor Hidden In Game:藍圖只讀(只能get),類別=Rendering

Editor Billboard Scale:藍圖讀寫(能get能set),類別=Rendering

二、言歸正傳解釋問題:為什么有的變量只能get不能set,有的變量既能get又能set?

UPROPERTY()宏(后面簡稱UP宏)是用來修飾UE C++中的變量的;

UPROPERTY()宏搭配變量說明符可以賦予變量極大地靈活性,比如:

控制變量在藍圖中的讀寫權限;控制變量在藍圖中哪些地方可以被編輯;

控制變量在藍圖中顯示的名字;控制變量屬于那個類別等等?

UE4 C++使用UPROPERTY(屬性)說明符賦予屬性不同的特性,最常用的包括可見性(Visible),可編輯性(Edit),可讀寫性(Read/Write).通過使用不同的屬性說明符,屬性將在藍圖中具有不同的效果。

本篇還是基于上面的Cpp_Actor? C++類為測試!

1.可見性(Visible)說明符

①VisibleDefaultsOnly(在藍圖中的默認類可見)

這里的Default表示class defaults?

測試代碼:

在UE編輯器中為Cpp_Actor C++類派生一個BP_Cpp_Actor的藍圖類

②VisibleInstanceOnly(僅在實例中可見:將藍圖類放置到關卡中即為實例化 )

測試代碼:

③VisibleAnywhere(任何地方可見)

VisibleAnywhere=VisibleDefaultsOnly+VisibleInstanceOnly(可以這么簡單理解)?

測試代碼:

可見性(Visible)的完整代碼(.h文件)

2.可編輯(Edite)說明符

可見性和可編輯性說明符不能同時使用,同一個屬性,只能進行一種說明(可見or可編輯) ?。。。。。。?/span>

①EditDefaultsOnly(在藍圖的默認類中可編輯)

測試代碼:

②EditInstanceOnly(僅在實例可編輯)?

測試代碼:


③EditAnywhere(任意地方可被編輯)

測試代碼:

可編輯性(Edit)的完整代碼(.h文件)

3.可讀寫(ReadWrite)說明符(get? set說明符)

讀寫說明符與可編輯性說明符區(qū)別:?

讀寫說明符用于控制屬性能否在Variables面板和EventGraph被訪問,而可編輯性說明符用來控制屬性被配置的場景,讀寫說明符更多傾向于屬性能不能用于參與邏輯編寫(讀取/寫入),而可編輯性說明符則有點像配置文件,用于配置默認值之類.?

用最簡單的方式可以理解為下圖:


①BlueprintReadOnly(藍圖只可讀--可get不可set)

測試代碼:

我們是在Cpp_Actor的C++類中寫的代碼,基于這個C++類派生了一個藍圖類BP_Cpp_Actor;這個BluePrintReadOnlyValue變量屬于父類,子類也已經繼承父類的變量,要想在子類中找到這個變量,那我們必須在子類中顯示繼承變量(BluePrintReadOnlyValue

②BlueprintReadWrite(藍圖讀寫--可get可set)

測試代碼:

可讀寫(ReadWrite)的完整代碼(.h文件)

4.Category(類別)

測試代碼:

5.meta說明符_屬性

meta修飾符用于說明被修飾對象(可以是屬性,函數(shù),類,結構體)與虛幻引擎和關卡編輯器等多方面的互動方式.

DisplayName(顯示名字-----別名)

DisplayName不會改變屬性的顯示名稱,而是用于作為搜索的關鍵詞,可以將名字比較長或者拼寫比較麻煩的屬性的DisplayName設為容易搜索的關鍵詞,提高查找效率.?

測試代碼:

三、兩個小案例有助于理解

1.BlueprintReadOnly

測試代碼:(.h文件)


測試結果:



分析代碼:

此邏輯為Time_Mix隨著Tick增加,其數(shù)值被限制在0和Time_Max之間.

由于Time_Max為BlueprintReadOnly,所以在運行狀態(tài)下,Time_Max的值無法被修改,Time_Mix的數(shù)值將始終無法超過Time_Max.

這個例子解釋了BlueprintReadOnly的設計思路,即:被修飾的變量的數(shù)值不允許在運行狀態(tài)下(通過代碼)被修改.

2.EditInstanceOnly

測試代碼:(.h文件)

分析代碼:

EditInstanceOnly使每個對象都具備不同的數(shù)值,對象可以根據(jù)自身專有的數(shù)值執(zhí)行對應的邏輯.

此說明符適合場景中大量存在且對象之間有差異的情況,比如場景中多個公交站牌,每個站牌可以配置唯一的站牌名稱.

五、藍圖訪問C++變量(UPROPERTY)的評論 (共 條)

分享到微博請遵守國家法律
五指山市| 自治县| 土默特左旗| 姚安县| 和静县| 万载县| 科尔| 浦县| 弋阳县| 安西县| 鄢陵县| 平凉市| 扬中市| 永福县| 涞水县| 亳州市| 读书| 大化| 沾益县| 衡水市| 吴旗县| 烟台市| 乌拉特中旗| 娱乐| 西平县| 桃江县| 定结县| 南澳县| 祁东县| 双流县| 濮阳市| 神池县| 汶上县| 行唐县| 当涂县| 巴彦淖尔市| 紫阳县| 资溪县| 咸宁市| 延川县| 五指山市|