Top > EQS-テスト自作

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

参考

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

作り方

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

エラー

テストを有効にしても正常に反映されない時

Output Logにエラーメッセージ出てる。
eqs_create_test04.png

Tips

テストの詳細欄にパラメーターを出す

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

eqs_create_test_tips_param01.png


添付ファイル: fileeqs_create_test_tips_param01.png 296件 [詳細] fileeqs_create_test04.png 310件 [詳細] fileeqs_create_test03.png 311件 [詳細] fileeqs_create_test02.png 311件 [詳細] fileeqs_create_test01.png 298件 [詳細]

リロード   新規 編集 凍結 差分 添付 複製 名前変更   ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: 2016-11-24 (木) 16:26:12 (2702d)