最近在學(xué)習(xí)用C++復(fù)刻YouTube上的一個藍(lán)圖庫存系統(tǒng),其中在從背包中丟棄槍械,然后在世界中生成一個槍械A(chǔ)ctor的時候遇到了問題,由于這個生成函數(shù)是在幾個不同的類中復(fù)用的,YouTube原版的做法是把這個函數(shù)寫在了GameState
類里面,以實現(xiàn)隨處調(diào)用,但我思考了一下覺得把它用C++寫在UBlueprintFunctionLiberary
子類里是一種更合適的做法。而問題也就在這時候出現(xiàn),在UBlueprintFunctionLiberary
子類中一般都是使用靜態(tài)函數(shù),這就導(dǎo)致如果按一般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è)計的函數(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)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
當(dāng)前題目:UE4C++如何在靜態(tài)函數(shù)中SpawnActor-創(chuàng)新互聯(lián)
文章源于:http://muchs.cn/article2/dpisic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、網(wǎng)站策劃、網(wǎng)站營銷、網(wǎng)站設(shè)計公司、ChatGPT、移動網(wǎng)站建設(shè)
聲明:本網(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)容