日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

虚幻4C++编程入门(搬运1)

發(fā)布時(shí)間:2024/5/15 c/c++ 76 豆豆
生活随笔 收集整理的這篇文章主要介紹了 虚幻4C++编程入门(搬运1) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先我們將使用虛幻編輯器中的類(lèi)向?qū)苫A(chǔ) C++ 類(lèi)

,以便藍(lán)圖稍后進(jìn)行延展。下圖展示了向?qū)У牡谝徊?- 新建一個(gè) Actor。


這里根據(jù)對(duì)character、pawn和actor的描述,知道了pawn是actor類(lèi)型,而charactor是pawn的一種類(lèi)型。

進(jìn)程中的第二步是告知向?qū)枰深?lèi)的命名。下圖顯示的第二步中使用了默認(rèn)命名。

選擇創(chuàng)建類(lèi)后,向?qū)⑸晌募⒋蜷_(kāi)開(kāi)發(fā)環(huán)境,以便開(kāi)始編輯。這便是生成的類(lèi)定義。如需了解類(lèi)向?qū)У母嘈畔?#xff0c;請(qǐng)查閱此 鏈接 。
這里我們建立了一個(gè)繼承與actor類(lèi)的類(lèi)myactor。然后可以從微軟的VS里面進(jìn)行編寫(xiě)。


就像上面的圖里面的位置,可以找到我們要編寫(xiě)的myactor的.h和.cpp文件。

myactor.h文件:

#include "GameFramework/Actor.h" #include "MyActor.generated.h"UCLASS() class AMyActor : public AActor {GENERATED_BODY()public: // 設(shè)置該 actor 屬性的默認(rèn)值AMyActor();// 游戲開(kāi)始時(shí)或生成時(shí)調(diào)用virtual void BeginPlay() override;// 每幀調(diào)用virtual void Tick( float DeltaSeconds ) override; };

這里的BeginPlay()和Tick( float DeltaSeconds )都是聲明的為虛函數(shù)。

BeginPlay() 是一個(gè)事件,將告知您 Actor 已以可操作狀態(tài)進(jìn)入游戲中。現(xiàn)在便適合開(kāi)始類(lèi)的游戲性邏輯。Tick() 每幀調(diào)用一次,對(duì)應(yīng)的時(shí)間量為自上次調(diào)用傳入的實(shí)際運(yùn)算時(shí)間。在此可創(chuàng)建反復(fù)邏輯。如不需要此功能,最好將其移除,以節(jié)約少量性能開(kāi)銷(xiāo)。如要移除此功能,必須將構(gòu)建函數(shù)中說(shuō)明 tick 應(yīng)該發(fā)生的代碼行刪除。以下構(gòu)建函數(shù)包含討論中的代碼行。

而在構(gòu)造函數(shù)里需要聲明actor 設(shè)為每幀調(diào)用就得用下面的寫(xiě)法:

AMyActor::AMyActor() {// 將此 actor 設(shè)為每幀調(diào)用 Tick()。不需要時(shí)可將此關(guān)閉,以提高性能。PrimaryActorTick.bCanEverTick = true;}

構(gòu)造函數(shù)是你在調(diào)用這個(gè)類(lèi)時(shí)就會(huì)默認(rèn)去調(diào)用的,比如你用這個(gè)類(lèi)建立一個(gè)對(duì)象,然后就會(huì)自動(dòng)調(diào)用構(gòu)造函數(shù)去進(jìn)行初始化。

下面是介紹把屬性出現(xiàn)在虛幻編輯器中,這就要用到宏定義

現(xiàn)在即可創(chuàng)建一些屬性(設(shè)計(jì)師可在虛幻編輯器中設(shè)置這些屬性)。使用特殊宏 UPROPERTY() 即可輕松將屬性公開(kāi)到虛幻編輯器。只需在屬性聲明之前使用 UPROPERTY(EditAnywhere) 宏即可,如以下類(lèi)所示。

UCLASS() class AMyActor : public AActor {GENERATED_BODY()UPROPERTY(EditAnywhere)//可以在任何地方編輯。int32 TotalDamage;... };

執(zhí)行這些操作后,即可在編輯器中對(duì)數(shù)值進(jìn)行編輯。有多種方式控制其編輯方法和位置。為 UPROPERTY() 宏傳入更多信息可完成此操作。例如:如需 TotalDamage 屬性和相關(guān)屬性出現(xiàn)在一個(gè)部分中,可使用分類(lèi)功能。以下屬性聲明對(duì)此進(jìn)行演示。

UPROPERTY(EditAnywhere, Category=”Damage”)
int32 TotalDamage;
用戶(hù)需要編輯此屬性時(shí),它將和其他屬性(這些屬性已以此類(lèi)型命名標(biāo)記)一同出現(xiàn)在 Damage 標(biāo)題之下。這可將常用設(shè)置放置在一起,便于設(shè)計(jì)師進(jìn)行編輯。

現(xiàn)在讓我們將相同屬性對(duì)藍(lán)圖公開(kāi)。

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=”Damage”)
int32 TotalDamage;
如您所見(jiàn),存在一個(gè)藍(lán)圖特有的參數(shù)。正是此參數(shù)使屬性為可讀取和可編寫(xiě)狀態(tài)。還存在一個(gè)單獨(dú)選項(xiàng) - BlueprintReadOnly。可通過(guò)此選項(xiàng)使屬性在藍(lán)圖中被識(shí)別為常量。此外還有多個(gè)選項(xiàng)可控制屬性對(duì)引擎公開(kāi)的方式。

繼續(xù)討論以下部分之前,我們來(lái)添加一些屬性到這個(gè)示例類(lèi)。已有屬性對(duì)此 actor 輸出的傷害總量進(jìn)行控制。我們更進(jìn)一步,實(shí)現(xiàn)隨時(shí)間輸出傷害。以下代碼添加了一個(gè)設(shè)計(jì)師可進(jìn)行設(shè)置的屬性,和另一個(gè)設(shè)計(jì)師可查看但無(wú)法進(jìn)行更改的屬性。

UCLASS() class AMyActor : public AActor {GENERATED_BODY()UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Damage")int32 TotalDamage;UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Damage")float DamageTimeInSeconds;UPROPERTY(BlueprintReadOnly, VisibleAnywhere, Transient, Category="Damage")float DamagePerSecond;... };

DamageTimeInSeconds 是設(shè)計(jì)師可進(jìn)行修改的屬性。DamagePerSecond 屬性是使用設(shè)計(jì)師設(shè)置的計(jì)算值(詳見(jiàn)下一部分)。VisibleAnywhere 標(biāo)記意味著屬性在虛幻編輯器中為可見(jiàn)狀態(tài),但不可進(jìn)行編輯。Transient 標(biāo)記意味著無(wú)法從硬盤(pán)對(duì)其進(jìn)行保存或加載;它應(yīng)該為一個(gè)派生的非持久值。下圖將屬性顯示為類(lèi)默認(rèn)的部分。

在構(gòu)建函數(shù)中設(shè)置默認(rèn)值

在構(gòu)建函數(shù)中設(shè)置屬性默認(rèn)值和典型 C++ 類(lèi)方法一致。以下是在構(gòu)建函數(shù)中設(shè)置默認(rèn)值的兩個(gè)例子,它們?cè)诠δ苌舷嗤?/p> AMyActor::AMyActor() {TotalDamage = 200;DamageTimeInSeconds = 1.f; }AMyActor::AMyActor() :TotalDamage(200),DamageTimeInSeconds(1.f) { }

下圖是在構(gòu)建函數(shù)中添加默認(rèn)值后的屬性視圖。

為支持設(shè)計(jì)師對(duì)每個(gè)實(shí)例設(shè)置屬性,數(shù)值也從給定對(duì)象的實(shí)例數(shù)據(jù)中加載。此數(shù)據(jù)應(yīng)用在構(gòu)建函數(shù)之后。與 PostInitProperties() 調(diào)用鏈掛鉤即可基于設(shè)計(jì)師設(shè)置的數(shù)值創(chuàng)建默認(rèn)值。此處的進(jìn)程范例中,TotalDamage 和 DamageTimeInSeconds 為設(shè)計(jì)師指定的數(shù)值。即時(shí)這些數(shù)值為設(shè)計(jì)師指定,您仍然可以為它們提供恰當(dāng)?shù)哪J(rèn)值,正如我們?cè)谏侠袌?zhí)行的操作。

如未向?qū)傩蕴峁┠J(rèn)值,引擎將自動(dòng)把屬性設(shè)為零(指針類(lèi)設(shè)為 nullptr)。

void AMyActor::PostInitProperties() {Super::PostInitProperties();DamagePerSecond = TotalDamage / DamageTimeInSeconds; }

下圖是添加以上 PostInitProperties() 代碼后的屬性視圖。

總結(jié)

以上是生活随笔為你收集整理的虚幻4C++编程入门(搬运1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。