目錄
簡單的多流程制作
取消除流程外,原本的藍(lán)圖執(zhí)行線【如果要進(jìn)行異步執(zhí)行可以不取消看效果】
結(jié)果
代碼:
繼承FTickableGameObject,時(shí)刻判斷是否結(jié)束,來執(zhí)行不同引腳
結(jié)果:
代碼:
在之前筆者講解了通過枚舉的方式去制作“因?yàn)槟吃驁?zhí)行不同情況的執(zhí)行線” 的節(jié)點(diǎn),以及多個引腳的輸入和輸出的相關(guān)文章:
UE4/5c++如何創(chuàng)建有多個輸出執(zhí)行的函數(shù)(不同情況不同執(zhí)行線)_ue4 同時(shí)執(zhí)行_多方通行8的博客-CSDN博客
UE4/5c++如何創(chuàng)建有多個輸出變量(引腳)的函數(shù)_c++函數(shù)輸出多個變量_多方通行8的博客-CSDN博客
簡單的多流程制作
首先筆者將講解不同流程是如何制作的:
首先是繼承于BlueprintAsyncActionBase類,做一個多播,如果不理解什么是多播可以看:
UE4/5C++:Delegate(委托or代理?)的使用_c++代理和委托_多方通行8的博客-CSDN博客
之后我們做一個函數(shù),這個函數(shù)的作用是輸入值,并修改內(nèi)部的值,為的是更好的為我們使用virtual void Activate() override;
取消除流程外,原本的藍(lán)圖執(zhí)行線【如果要進(jìn)行異步執(zhí)行可以不取消看效果】
在UCLASS寫上:UCLASS(meta = (HideThen = true))
結(jié)果
這里隨便創(chuàng)建一個actor類:
寫完后,我們會獲得兩種函數(shù),上面的就是通過?virtual void Activate() override;的多流程函數(shù),雖然上面加入了時(shí)間,但你如果沒有寫,實(shí)際上是不會發(fā)生等待之類的。
代碼:
頭文件文章來源:http://www.zghlxwxcb.cn/news/detail-573483.html
#pragma once
#include "CoreMinimal.h"
#include "Kismet/BlueprintAsyncActionBase.h"
#include "MyBAA.generated.h"
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMyBAADelegate, int, Ret);
/**
*
*/
UCLASS(meta = (HideThen = true))
class METAHUMANTEST_API UMyBAA : public UBlueprintAsyncActionBase
{
GENERATED_BODY()
public:
UPROPERTY(BlueprintAssignable)
FMyBAADelegate yes;
UPROPERTY(BlueprintAssignable)
FMyBAADelegate no;
//暴露給藍(lán)圖
UFUNCTION(BlueprintCallable, Category = "DelayAction")
static UMyBAA* JudeNum(int waitTime);
protected:
// 繼承自父類的虛函數(shù)
virtual void Activate() override;
private:
UPROPERTY(EditAnywhere)
float DelayTime;
};
cpp文件:
#include "MyBAA.h"
UMyBAA* UMyBAA::JudeNum(int waitTime)
{
// 創(chuàng)建UMyBAA對象
UMyBAA* DelayAction = NewObject<UMyBAA>();
DelayAction->DelayTime = waitTime;
//返回
return DelayAction;
}
void UMyBAA::Activate()
{
if (DelayTime <5)
{
DelayTime++;
yes.Broadcast(DelayTime);
}
else
{
no.Broadcast(DelayTime);
}
}
繼承FTickableGameObject,時(shí)刻判斷是否結(jié)束,來執(zhí)行不同引腳
在原來的基礎(chǔ)上,我們再基礎(chǔ)一個FTickableGameObject類【這里可以把原來的Activate的邏輯可以去除掉了,雖然只執(zhí)行一次,但是可能會和tick中的邏輯發(fā)生沖突,需要自己去進(jìn)行判斷】
其實(shí)就是多寫幾行代碼,值得注意的是tick的接口和頭文件的加入,這個函數(shù)可以時(shí)時(shí)刻刻通過tick來判斷數(shù)值是否【這里我將UCLASS中的meta = (HideThen = true)去掉了】
結(jié)果:
代碼:
頭文件
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Kismet/BlueprintAsyncActionBase.h"
#include "Tickable.h"
#include "MyBAA.generated.h"
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMyBAADelegate, int, Ret);
/**
*
*/
UCLASS(/*meta = (HideThen = true)*/)
class METAHUMANTEST_API UMyBAA : public UBlueprintAsyncActionBase,public FTickableGameObject
{
GENERATED_BODY()
public:
UPROPERTY(BlueprintAssignable)
FMyBAADelegate yes;
UPROPERTY(BlueprintAssignable)
FMyBAADelegate no;
UFUNCTION(BlueprintCallable, Category = "DelayAction")
static UMyBAA* JudeNum(int waitTime);
protected:
// 繼承自父類的虛函數(shù)
virtual void Activate() override;
// tick接口
virtual void Tick(float DeltaTime);
virtual TStatId GetStatId() const;
private:
UPROPERTY(EditAnywhere)
float DelayTime;
};
cpp文件:文章來源地址http://www.zghlxwxcb.cn/news/detail-573483.html
// Fill out your copyright notice in the Description page of Project Settings.
#include "MyBAA.h"
UMyBAA* UMyBAA::JudeNum(int waitTime)
{
// 創(chuàng)建UMyBAA對象
UMyBAA* DelayAction = NewObject<UMyBAA>();
DelayAction->DelayTime = waitTime;
//返回
return DelayAction;
}
void UMyBAA::Activate()
{
//if (DelayTime <5)
//{
// DelayTime++;
// yes.Broadcast(DelayTime);
//}
//else
//{
// no.Broadcast(DelayTime);
//}
}
void UMyBAA::Tick(float DeltaTime)
{
if (DelayTime > 0)
{
DelayTime--;
yes.Broadcast(DelayTime);
if (DelayTime == 0)
{
no.Broadcast(DelayTime);
RemoveFromRoot();
}
}
}
TStatId UMyBAA::GetStatId() const
{
return TStatId();
}
到了這里,關(guān)于UE4/5c++基于BlueprintAsyncActionBase和FTickableGameObject的異步節(jié)點(diǎn)【多流程的創(chuàng)建、異步執(zhí)行】的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!