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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

c++中获取蓝图组件_蓝图C++混合编程

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

注意事項

1)模塊接口(API):對于一些需要被模塊外部訪問的函數和類,需要通過 *_API 的宏標記出來。每個被暴露在外的單項都會帶來編譯時間的額外消耗,因此請務必僅暴露出必須暴露的接口。如果外部只需要訪問一個類中的某個函數,那么比起暴露整個類而言,僅暴露出這個函數能夠節省出相當可觀的編譯時間。

2)在最最基本的層面上,任意可以被放置到關卡中的游戲物體都是一個 Actor。所有的 Actor 都是繼承于 AActor 類,該類是所有可生成的游戲對象的基類。

3)Actor類里,PrimaryActorTick.bCanEverTick = true;// 將該Actor設置為每幀調用一次Tick()。如果您沒有這個需要,可以將其關閉來改善性能。

在vc里定義一個能在編輯器下直接訪問的屬性

新建一個c++的Actor類

構造函數中設置上面兩個變量的默認值

在vc里定義一個能被藍圖調用的函數

注:UFUNCTION里的函數不支持重載;

將藍圖里的參數傳遞到C++

name,text,string之間的相互轉換

藍圖中的類型轉換

C++中的類型轉換

C++里調用藍圖里的函數

在C++創建一個能被藍圖調用的算數節點

藍圖里調用C++函數

注:只能在繼承自本C++類的藍圖里調用;

調用時,如果函數里的參數里有結構體,該結構體在定義時需要加上BlueprintType關鍵字,且本函數需要有函數體

自定義枚舉

UE4實例的獲取

創建C++基礎類

選擇gameMode,并保存關卡

gameMode下需要加載的類

gameMode中加載上面創建的類

上圖中的6個類,再加上gameInstance總共7個類,每個類文件里加一個打印函數

獲取到實例后的運行效果如下圖

代碼如下

//?Fill?out?your?copyright?notice?in?the?Description?page?of?Project?Settings.

#include?"TestActor001.h"

#include?"testvcGameModeBase.h"

#include?"PikaPlayerState.h"

#include?"PikaPawn.h"

#include?"PikaGameStateBase.h"

#include?"PikaPlayerController.h"

#include?"PikaHUD.h"

#include?"PikaGameInstance.h"

//?Sets?default?values

ATestActor001::ATestActor001()

{

//?Set?this?actor?to?call?Tick()?every?frame.??You?can?turn?this?off?to?improve?performance?if?you?don't?need?it.

PrimaryActorTick.bCanEverTick?=?true;

}

//?Called?when?the?game?starts?or?when?spawned

void?ATestActor001::BeginPlay()

{

Super::BeginPlay();

EventCurrent();

//通過GetWorld來獲取實例

if?(GetWorld())

{

//GameMode

AtestvcGameModeBase?*pikaqiuGameMode?=?Cast(GetWorld()->GetAuthGameMode());

if?(pikaqiuGameMode)

{

pikaqiuGameMode->pikaPrint("pikaqiuGameMode");

}

//PikaPlayerState

APikaPlayerState?*pikaPlayerStateVar?=?Cast(GetWorld()->GetFirstPlayerController()->PlayerState);

if?(pikaPlayerStateVar)

{

pikaPlayerStateVar->pikaPrint("pikaPlayerState");

}

//PikaPlayerController

APikaPlayerController?*pikaPlayerControllerVar?=?Cast(GetWorld()->GetFirstPlayerController());

if?(pikaPlayerControllerVar)

{

pikaPlayerControllerVar->pikaPrint("pikaPlayerController");

}

//pikaPawn

APikaPawn?*pikaPawnVar?=?Cast(GetWorld()->GetFirstPlayerController()->GetPawn());

if?(pikaPawnVar)

{

pikaPawnVar->pikaPrint("pikaPawn");

}

//pikaHUD

APikaHUD?*pikaHUDVar?=?Cast(GetWorld()->GetFirstPlayerController()->GetHUD());

if?(pikaHUDVar)

{

pikaHUDVar->pikaPrint("pikaHUD");

}

//pikaGameStateBase

APikaGameStateBase?*pikaGameStateBaseVar?=?Cast(GetWorld()->GetGameState());

if?(pikaGameStateBaseVar)

{

pikaGameStateBaseVar->pikaPrint("pikaGameStateBase");

}

//pikaGameInstance

UPikaGameInstance?*pikaGameInstanceVar?=?Cast(GetWorld()->GetGameInstance());

if?(pikaGameInstanceVar)

{

pikaGameInstanceVar->pikaPrint("pikaGameInstance");

}

}

}

//?Called?every?frame

void?ATestActor001::Tick(float?DeltaTime)

{

Super::Tick(DeltaTime);

}

float?ATestActor001::pikaFloat(float?pika1,?float?pika2)

{

return?false;

}

actor實例之間的相互獲取

從PikaActorA里獲取PikaActorB和PikaActorC的實例

創建三個c++的actor類,并為每個acotr創建一個基于本類的藍圖類

PikaActorB和PikaActorC里各加兩個打印函數

注:GEngine需要包含Engine.h頭文件;

藍圖的加載方式里,需要在藍圖里指定要獲取的實例

運行效果如下:

加了迭代后的效果如下:

PikaActorA里的代碼如下:

//?Fill?out?your?copyright?notice?in?the?Description?page?of?Project?Settings.

#pragma?once

#include?"CoreMinimal.h"

#include?"GameFramework/Actor.h"

#include?"PikaActorB.h"

#include?"PikaActorC.h"

#include?"PikaActorA.generated.h"

UCLASS()

class?PIKAQIUTEST_API?APikaActorA?:?public?AActor

{

GENERATED_BODY()

public:

//?Sets?default?values?for?this?actor's?properties

APikaActorA();

protected:

//?Called?when?the?game?starts?or?when?spawned

virtual?void?BeginPlay()?override;

public:

//?Called?every?frame

virtual?void?Tick(float?DeltaTime)?override;

//從pikaActorA中獲取pikaActorB和pikaActorC的實例

//方法一

UPROPERTY(EditAnywhere,?BlueprintReadWrite,?Category?=?UI)

APikaActorB?*pikaActorBvar;

//方法二

TSubclassOf?getInstanceForC;

//APikaActorC?*pikaActorCvar;

//通過迭代來獲取場景中的實例

void?GetInstanceFor();

void?pikaPrint(FString?pikaStr);

void?pikaPrintSelf();

};

-------------------上面的PikaActorA.h文件,下面的PikaActorA.cpp文件

//?Fill?out?your?copyright?notice?in?the?Description?page?of?Project?Settings.

#include?"PikaActorA.h"

#include?"Engine.h"

//?Sets?default?values

APikaActorA::APikaActorA()

{

//?Set?this?actor?to?call?Tick()?every?frame.??You?can?turn?this?off?to?improve?performance?if?you?don't?need?it.

PrimaryActorTick.bCanEverTick?=?true;

static?ConstructorHelpers::FClassFinder?pikaActorCTemp(TEXT("/Game/MyPikaActorC"));

getInstanceForC?=?pikaActorCTemp.Class;

}

//?Called?when?the?game?starts?or?when?spawned

void?APikaActorA::BeginPlay()

{

Super::BeginPlay();

if?(GetWorld())

{

//從pikaActorA中獲取pikaActorB的實例,該方法需要在藍圖下指定要獲取的實例

if?(pikaActorBvar)

{

APikaActorB?*pikaActorBInstance?=?Cast(pikaActorBvar);

if?(pikaActorBInstance)

{

pikaActorBInstance->pikaPrintSelf();

}

}

//從pikaActorA中獲取pikaActorC的實例,需要在上面的構造函數里獲取pikaActorC實例的路徑

AActor?*pikaActorCvar?=?GetWorld()->SpawnActor(getInstanceForC,?FVector::ZeroVector,?FRotator::ZeroRotator);

if?(pikaActorCvar)

{

APikaActorC?*pikaActorCInstance?=?Cast(pikaActorCvar);

if?(pikaActorCInstance)

{

pikaActorCInstance->pikaPrintSelf();

}

}

}

//調用迭代獲取實例的函數

GetInstanceFor();

}

//?Called?every?frame

void?APikaActorA::Tick(float?DeltaTime)

{

Super::Tick(DeltaTime);

}

void?APikaActorA::GetInstanceFor()

{

AActor?*tempPointer?=?NULL;

//TObjectIterator它可以獲取的到我們場景里面的Object實例

int?pikaInt?=?0;

for?(TObjectIteratorIt;It;++It)

{

tempPointer?=?*It;

if?(tempPointer)

{

APikaActorA?*pikaActorAInstance?=?Cast(tempPointer);

if?(pikaActorAInstance)

{

pikaActorAInstance->pikaPrintSelf();

}

APikaActorB?*pikaActorBInstance?=?Cast(tempPointer);

if?(pikaActorBInstance)

{

pikaActorBInstance->pikaPrintSelf();

}

APikaActorC?*pikaActorCInstance?=?Cast(tempPointer);

if?(pikaActorCInstance)

{

pikaActorCInstance->pikaPrintSelf();

}

}

++pikaInt;

}

pikaPrint(FString::FromInt(pikaInt));

};

void?APikaActorA::pikaPrint(FString?pikaStr)

{

if?(GEngine)

{

GEngine->AddOnScreenDebugMessage(-1,?10.0f,?FColor::Red,?pikaStr);

}

};

void?APikaActorA::pikaPrintSelf()

{

pikaPrint("PikaActorA");

}

寫一個能被藍圖調用的C++類

1)創建一個藍圖函數類

總結

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

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

主站蜘蛛池模板: 在线国产91 | 在线 日本 制服 中文 欧美 | 日本三区视频 | av电影中文字幕 | 一区二区三区在线视频播放 | 99国产揄拍国产精品 | 色88久久久久高潮综合影院 | 午夜免费观看视频 | 国精品无码人妻一区二区三区 | 国产一级片子 | 国产情侣自拍av | 狠狠艹| 天天摸天天舔天天操 | 91视频影院 | 免费在线观看成年人视频 | 免费一区二区三区 | 亚洲男人天堂2019 | 亚洲免费色视频 | 国产中文 | 男女视频一区二区 | 一区二区视频免费在线观看 | 桃花久久 | 91网国产 | 无码任你躁久久久久久久 | 精品国产户外野外 | 亚洲熟妇av一区二区三区漫画 | 涩涩99| 影音先锋在线观看视频 | 三级国产在线 | 天堂网av中文字幕 | 久久精品黄aa片一区二区三区 | 激情久久免费视频 | 欧美日一区二区三区 | 免费的黄色av | 男女黄网站 | 中文字幕22页 | 国产三级短视频 | 超碰人操 | 国产理论| 青青青国产 | 欧美 变态 另类 人妖 | av尤物在线 | 成年人视屏 | 深夜福利视频在线 | 日本极品丰满ⅹxxxhd | 91天天操| 亚洲精品白浆高清久久久久久 | 亚洲激情在线视频 | 鲁鲁久久| 成人小视频在线播放 | 亚洲超碰在线 | 四虎永久在线观看 | 无码免费一区二区三区免费播放 | 动漫一区二区三区 | 爽爽淫人 | 免费看黄色的视频 | 三女警花合力承欢猎艳都市h | 国产免费视频一区二区三区 | 在线观看免费视频一区 | 91丝袜国产在线观看 | 五月激情av| 麻豆传媒在线看 | 欧美一级免费黄色片 | 青青青视频在线 | 老女人性视频 | 免费香蕉视频 | 亚洲av无码电影在线播放 | 重口另类 | 欧美精品在线一区 | 91成人天堂久久成人 | 亚洲国产免费av | 欧美精产国品一二三 | 亚洲天堂成人av | 国产精品揄拍100视频 | 日韩伊人| 一级黄大片 | 日本亚洲黄色 | 99精品国自产在线 | 青青草视频在线免费观看 | 色撸撸在线视频 | 午夜久久久久久久久 | 快色在线 | 欧美精品一区二区免费看 | 欧美日韩精品一二三区 | 青草视频免费看 | 伊人66| 日本www网站| 亚洲色偷精品一区二区三区 | 岛国精品在线播放 | 一区二区三区视频在线播放 | 国产夜夜操 | 浪漫樱花在线观看高清动漫 | 国际av在线 | 操操网站 | 91av亚洲 | 中文字幕在线播放一区二区 | 亚洲欧美激情另类校园 | 久久精品日韩无码 | 日本一级三级三级三级 |