UE 4.14.0ではEQSのテストはBlueprintで作成出来ない。 C++が必要になるのでその手順メモ。
エンジンのソースコードの下記辺りに既存のテストclassが有る Engine\Source\Runtime\AIModule\Classes\EnvironmentQuery\Tests\
UCLASS() class UMyEnvQueryTest : public UEnvQueryTest { GENERATED_UCLASS_BODY() // テストを行う virtual void RunTest(FEnvQueryInstance& QueryInstance) const override; virtual FText GetDescriptionTitle() const override; virtual FText GetDescriptionDetails() const override; };
#include "EnvironmentQuery/Items/EnvQueryItemType_VectorBase.h" UMyEnvQueryTest::UMyEnvQueryTest(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { // testのコスト? Cost = EEnvTestCost::Low; // アイテムは何のパラメーターを受け取れるか。多分。 ValidItemType = UEnvQueryItemType_VectorBase::StaticClass(); } void UMyEnvQueryTest::RunTest(FEnvQueryInstance& QueryInstance) const { // オーナーが居ない UObject* QueryOwner = QueryInstance.Owner.Get(); if (QueryOwner == nullptr) { return; } FloatValueMin.BindData(QueryOwner, QueryInstance.QueryID); float MinThresholdValue = FloatValueMin.GetValue(); FloatValueMax.BindData(QueryOwner, QueryInstance.QueryID); float MaxThresholdValue = FloatValueMax.GetValue(); // アイテムの数だけブン回す float score = 0.0f; // いい感じにする for (FEnvQueryInstance::ItemIterator It(this, QueryInstance); It; ++It) { score += 0.05f; // いい感じにする It.SetScore(TestPurpose, FilterType, score, MinThresholdValue, MaxThresholdValue); } } FText UMyEnvQueryTest::GetDescriptionTitle() const { return Super::GetDescriptionTitle(); } FText UMyEnvQueryTest::GetDescriptionDetails() const { return DescribeFloatTestParams(); }
UPROPERTY(EditDefaultsOnly, Category=TestValue) TSubclassOf<UEnvQueryContext> Query;
#include "EnvironmentQuery/Contexts/EnvQueryContext_Querier.h"
Query = UEnvQueryContext_Querier::StaticClass();
// クエリからActorのリストを取得する TArray<AActor*> ContextActors; if (!QueryInstance.PrepareContext(Query, ContextActors)) { // Actorが1つも無かった return; }
for (int32 ContextIndex = 0; ContextIndex < ContextActors.Num(); ContextIndex++) { }