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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++中获取蓝图组件_C++和蓝图

發布時間:2023/12/20 c/c++ 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++中获取蓝图组件_C++和蓝图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C++和藍圖

概述

藍圖可以繼承C++類,從而使得程序員可以在代碼中創建新的游戲性類,而關卡設計人員可以使用藍圖來繼承該類并對其進行修改。

有很多種修飾符可以改變C++類和藍圖系統間交互方式,其中某些修飾符會在本示例中突出介紹。

類設置

在類設置的第一部分中,使用C++類向導

創建一個名稱為LightSwitchBoth 的類。

LightSwitchBoth類中的大部分代碼設置都和 僅使用C++的LightSwitch示例

類似。盡管您可以讓一個藍圖繼承LightSwitchCodeOnly類,

但藍圖圖表并不能訪問該類中創建的組件、屬性及函數。該示例將使用 UPROPERTY() 和 UFUNCTION() 修飾符,這兩個修飾符使得LightSwitchBoth作為繼承它的藍圖的模板。

您會發現首先參考下 僅使用C++的LightSwitch示例

是有用的,這樣您可以看下如何設置頭文件及源文件

來創建LightSwitchComponent、SphereComponent、DesiredBrightness屬性及OnOverlap函數。

這個頭文件是從 僅使用C++的LightSwitch示例

改編而來,添加了以下功能:PointLightComponent和SphereComponent是BlueprintReadOnly(僅藍圖可讀的),并且將顯示在 我的藍圖 選卡中的 Switch Components(切換組件) 類目中。

OnOverlap現在是一個BlueprintNativeEvent,將會顯示在 我的藍圖 選卡中的 Switch Functions(切換函數) 類目中。

DesiredBrightness是BlueprintReadWrite(藍圖可讀寫的),將顯示在 我的藍圖 選卡中的 Switch Properties(切換屬性) 類目中。

DesiredBrightness現在是EditAnywhere(隨處可編輯的),而不是VisibleAnywhere(隨處可見的)。

UCLASS() 宏有個 Blueprintable 修飾符。在這個示例中,該修飾符不是必須的,因為LightSwitchBoth直接繼承Actor,而Actor是Blueprintable(可藍圖化的),所以LightSwitchBoth會繼承該修飾符。

加上 UPROPERTY() 和 UFUNCTION() 宏中的額外修飾符,LightSwitchBoth類的頭文件如下所示:

LightSwitchBoth.h

// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.

#pragma once

#include "LightSwitchBoth.generated.h"

/**

*

*/

UCLASS()

class ALightSwitchBoth : public AActor

{

GENERATED_UCLASS_BODY()

/** point light component */

UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Switch Components")

TSubobjectPtr PointLight1;

/** sphere component */

UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Switch Components")

TSubobjectPtr Sphere1;

/** called when something overlaps the sphere component */

UFUNCTION(BlueprintNativeEvent, Category="Switch Functions")

void OnOverlap(class AActor* OtherActor, class UPrimitiveComponent* OtherComp, int32 OtherBodyIndex);

/** the desired brightness for the light */

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Switch Properties")

float DesiredBrightness;

};

在LightSwitchBoth的源文件中,構造器仍然是一樣的。但是,需要對 OnOverlap 函數做一點修改。這個函數現在是一個BlueprintNativeEvent。這意味著

在繼承這個類的藍圖中,可以放置一個覆蓋 OnOverlap 的事件,當正常調用該函數時會執行此事件。如果該事件不存在,那么則是執行那個函數的

C++實現。要想使這個設置正常工作,該C++函數需要重命名為 OnOverlap_Implementation 。稍后在本示例中將介紹這個藍圖設置。對 OnOverlap 函數

進行了修改后,LightSwitchBoth 的源文件如下所示:

LightSwitchBoth.cpp

// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.

#include "BasicClasses.h"

#include "LightSwitchBoth.h"

ALightSwitchBoth::ALightSwitchBoth(const FObjectInitializer& ObjectInitializer)

: Super(ObjectInitializer)

{

DesiredBrightness = 15.0f;

PointLight1 = ObjectInitializer.CreateDefaultSubobject(this, "PointLight1");

PointLight1->Brightness = DesiredBrightness;

PointLight1->bVisible = true;

RootComponent = PointLight1;

Components.Add(PointLight1);

Sphere1 = ObjectInitializer.CreateDefaultSubobject(this, TEXT("Sphere1"));

Sphere1->InitSphereRadius(250.0f);

Sphere1->OnComponentBeginOverlap.AddDynamic(this, &ALightSwitchBoth::OnOverlap); // set up a notification for when this component overlaps something

Sphere1->OnComponentEndOverlap.AddDynamic(this, &ALightSwitchBoth::OnOverlap); // set up a notification for when this component overlaps something

Sphere1->AttachParent = RootComponent;

Components.Add(Sphere1);

}

void ALightSwitchBoth::OnOverlap_Implementation(AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex)

{

if ( OtherActor && (OtherActor != this) && OtherComp )

{

PointLight1->ToggleVisibility();

}

}

當創建類時,新的 UCLASS() 、UFUNCTION() 和/或 UPROPERTY() 宏意味著該代碼必須在Visual Studio 或Xcode中進行編譯,然后使用虛幻編輯器重新加載它們。

關閉虛幻編輯器,在Visual Studio 或Xcode中編譯該項目,然后打開編輯器并重新加載該項目,以確保正確地重新加載該游戲模塊。同時,需要注意的一點是,

要確保 Build Configuration(版本配置) 和您打開該項目使用的虛幻編輯器可執行文件的版本一致。 請在

編譯游戲項目

文檔中閱讀關于編譯配置及編譯項目的更多信息。

當重新打開虛幻編輯器并重新打開您的項目后,便可以創建

一個新的類藍圖

了。

在本示例中,選擇LightSwitchBoth作為該藍圖的父類,藍圖名稱為 LightSwitchBoth_BP 。

在 C++代碼中添加的PointLightComponent和SphereComponent 也會顯示在 Blueprint Editor(藍圖編輯器) 的 組件模式

中的 Components(組件) 選卡內。

它們的圖標是深藍色,表示它們是從父類LightSwitchBoth類繼承而來的原生組件。而剛剛添加到 LightSwitchBoth_BP 藍圖中的新組件的圖標

是淺藍色的。關于使用 Components(組件) 選卡添加及排列組件的更多信息,請參照 組件

選卡文檔。

Blueprint Editor(藍圖編輯器) 的 圖表模式

是藍圖編輯的核心。在 Graph Mode(圖表) 模式中,您可以在我的藍圖

選卡中添加新變量

函數

及宏

。您也可以訪問該類藍圖中包含的

所有 圖表

。在這些圖表中,各種節點

連接到一起,來創建由類屬性、游戲事件、甚至Actor的周邊環境

驅動的設計及游戲功能。

在 Graph Mode(圖標模式) 中, My Blueprint(我的藍圖) 選卡顯示了在C++中添加到LightSwitchBoth類中的 PointLightComponent 和SphereComponent 。這是因為 BlueprintReadOnly 修飾符存在的緣故。

通過在 我的藍圖 選卡中點擊并拖拽這些組件的名稱到圖表中,可以將這些組件的節點添加到圖表中。然后,您可以把這些節點連接到改變像可見性

或光源顏色這樣屬性的節點上。DesiredBrightness 屬性也會出現在 我的藍圖 選卡中。因為它是一個屬性,而不是一個組件,所以可以使用 BlueprintReadWrite

修飾符。這意味著在藍圖圖表中可以創建節點來獲取及設置 DesiredBrightness 的值。請參照 我的藍圖

文檔來獲得一般的應用信息。

默認情況下,可能不會顯示父類LightSwitchBoth的組件和屬性。因為當選中 我的藍圖 選卡底部的 Show user-created variables only(僅顯示用戶創建的變量) 復選框時,

會隱藏從父類繼承的屬性。顯示所有變量

僅顯示用戶創建的變量

有兩個圖表用于設置 LightSwitchBoth_BP 類的行為。第一個是構造腳本

圖表,它包含了一個專用的 Construction Script(構建腳本)

事件。如果沒有該 Construction Script 設置,那么新的 LightSwitchBoth_BP Actor 將僅使用LightSwitchBoth的構造函數。然而,當Actor在關卡中移動時,及當

Desired Brightness 發生改變時,都會執行 Construction Script 。使用 Construction Script 意味著,可以輕松地改變暴露給藍圖的Actor屬性,

并且可以快速地看到這些修改的效果。

在 LightSwitchBoth_BP 類中, Construction Script 事件連接到了 Set Brightness 節點上,以便當在關卡中添加或移動Actor時或者 Desired Brightness 發生改變時,將 Point Light 1 (PointLightComponent) 的亮度設置為

Desired Brightness 的值。

LightSwitch_BPOnly 類中設置的另一個圖表是 事件圖表

。EventGraph的執行是由事件觸發的。在這個示例中,

任何時候當調用C++函數 OnOverlap 時, OnOverlap 就會執行。在LightSwitchBoth的源文件中,設置了代理,以便當一個Actor進入或離開SphereComponent時會執行 OnOverlap 。

Sphere1->OnComponentBeginOverlap.AddDynamic(this, &ALightSwitchBoth::OnOverlap); // set up a notification for when this component overlaps something

Sphere1->OnComponentEndOverlap.AddDynamic(this, &ALightSwitchBoth::OnOverlap); // set up a notification for when this component overlaps something

OnOverlap 事件節點連接到了 Set Light Color 節點上。任何時候當執行該事件時,它都將會把PointLightComponent的光源顏色設置為一個隨機顏色。這覆蓋了

源碼文件中用于切換的PointLightComponent可見性的 OnOverlap_Implementation 函數。

關于事件及處理圖表的更多信息,請參照事件

、 事件圖表

和事件模式

文檔。

在變量的設置中, DesiredBrightness 變量設置為 EditAnywhere (隨處可編輯) ,所以在 藍圖編輯器 的默認模式

中它是可見的,并且可以進行編輯。

這意味著對于類的每個實例,這個變量是可以變化的,所以每個Actor可以有其自己的 DesiredBrightness 。因為 DesiredBrightness 也是 BlueprintReadWrite(藍圖可讀寫) 的,且

Construction Script 中使用了它,所以更新它還會導致再次執行 Construction Script 。

其他Class Blueprints(類藍圖)可以繼承由藍圖創建的類,通過以下兩種方式實現:使用 Class Viewer(類別查看器) 中的類附近的下拉列表按鈕來創建一個新藍圖,

或者通過右擊該藍圖并選擇 Create New Blueprint Based on This(基于此藍圖創建一個新藍圖) 。

類藍圖 LightSwitchBoth_BP 位于 內容瀏覽器

中,您可以從那里將其拖拽到關卡內。它也存在于 類別查看器

中。

關于使用 內容瀏覽器 或 類別查看器 在關卡放置Actor的更多信息,請參照放置Actor

文檔。

總結

以上是生活随笔為你收集整理的c++中获取蓝图组件_C++和蓝图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。