• 追加された行はこの色です。
  • 削除された行はこの色です。
#contents

----

UE 4.14.0ではEQSのテストはBlueprintで作成出来ない。
C++が必要になるのでその手順メモ。

* 参考 [#xd5b71b4]
エンジンのソースコードの下記辺りに既存のテストclassが有る
Engine\Source\Runtime\AIModule\Classes\EnvironmentQuery\Tests\


* 作り方 [#z058c67d]
+ C++クラスを作成する
&ref(eqs_create_test01.png,,70%);
+ 右上の「Show All Classes」にチェック、親クラスを「EnvQueryTest」を指定する。
&ref(eqs_create_test02.png,,70%);
+ そのまま作成を進めてC++ファイルを追加する。Visual Studioで開かれる。
+ ヘッダーは下記のように。
 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();
 }
+ エディターに戻ってCompile.
+ コンパイルに成功したら、EQSのテスト欄に追加されているハズ。
&ref(eqs_create_test03.png,,70%);

* エラー [#l8b25381]
** テストを有効にしても正常に反映されない時 [#u04ec8f4]
Output Logにエラーメッセージ出てる。
&ref(eqs_create_test04.png,,70%);

* Tips [#yd0cdcf7]
** テストの詳細欄にパラメーターを出す [#hac2d047]
+ ヘッダーに下記追加で、「TestValue」項目に「QueryContext」型のQuery変数を表示する
 UPROPERTY(EditDefaultsOnly, Category=TestValue)
 TSubclassOf<UEnvQueryContext> Query;
+ ソースコード側。
++ コンテキストのヘッダ
 #include "EnvironmentQuery/Contexts/EnvQueryContext_Querier.h"
++ コンストラクタに初期化
 Query = UEnvQueryContext_Querier::StaticClass();
++ RunTestメソッド内で取得。PrepareContextには各Transform取得メソッドも有るのでQueryInstanceクラス参照。
 // クエリからActorのリストを取得する
 TArray<AActor*> ContextActors;
 if (!QueryInstance.PrepareContext(Query, ContextActors))
 {
 	// Actorが1つも無かった
 	return;
 }
++ こんな感じでブン回せる
 for (int32 ContextIndex = 0; ContextIndex < ContextActors.Num(); ContextIndex++)
 {
 }

&ref(eqs_create_test_tips_param01.png,,70%);


    ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS