最近在學習用C++復刻YouTube上的一個藍圖庫存系統(tǒng),其中在從背包中丟棄槍械,然后在世界中生成一個槍械Actor的時候遇到了問題,由于這個生成函數(shù)是在幾個不同的類中復用的,YouTube原版的做法是把這個函數(shù)寫在了GameState
類里面,以實現(xiàn)隨處調(diào)用,但我思考了一下覺得把它用C++寫在UBlueprintFunctionLiberary
子類里是一種更合適的做法。而問題也就在這時候出現(xiàn),在UBlueprintFunctionLiberary
子類中一般都是使用靜態(tài)函數(shù),這就導致如果按一般C++中SpawnActor的方法寫會有錯誤
GetWorld()->SpawnActor(Params...)
在靜態(tài)函數(shù)中使用GetWorld()
操作非靜態(tài)成員變量會報錯call to non-static member function without an object argument
,所以我們需要其他方法來SpawnActor,而這個方法就是UGamePlayStatic
類中的BeginDeferredActorSpawnFromClass()
函數(shù)以及FinishSpawningActor()
函數(shù),以我在上述內(nèi)容中需要設計的函數(shù)為例,使用如下
.h
static AActor* SpawnActorFromItemObject(UItemObject* ItemObject, AActor* OriginLocationActor);
.cpp
AActor* UHelperFunctionLibrary::SpawnActorFromItemObject(UItemObject* ItemObject, AActor* OriginLocationActor)
{if (ItemObject && OriginLocationActor)
{FVector SpawnLocation = OriginLocationActor->GetActorLocation() + OriginLocationActor->GetActorForwardVector() * 150;
FTransform SpawnTransform(FRotator::ZeroRotator, SpawnLocation);
//該函數(shù)向世界中注冊一個新Actor但不執(zhí)行Actor的初始化
AActor* Actor = UGameplayStatics::BeginDeferredActorSpawnFromClass(OriginLocationActor->GetWorld(), ItemObject->ItemClass, SpawnTransform, ESpawnActorCollisionHandlingMethod::AdjustIfPossibleButAlwaysSpawn);
return UGameplayStatics::FinishSpawningActor(Actor, SpawnTransform);//該函數(shù)完成Actor的初始化
}
return nullptr;
}
這樣就可以實現(xiàn)通過靜態(tài)函數(shù)在世界中SpawnActor
第一次寫,主要用于個人記錄,語言啰嗦,有大佬看到請見諒
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
當前題目:UE4C++如何在靜態(tài)函數(shù)中SpawnActor-創(chuàng)新互聯(lián)
文章源于:http://aaarwkj.com/article2/dpisic.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設、網(wǎng)站策劃、網(wǎng)站營銷、網(wǎng)站設計公司、ChatGPT、移動網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容