EQS-テスト自作
をテンプレートにして作成
[
ホーム
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
#contents
----
UE 4.14.0ではEQSのテストはBlueprintで作成出来ない。
C++が必要になるのでその手順メモ。
* 参考 [#xd5b71b4]
エンジンのソースコードの下記辺りに既存のテストclassが有る
Engine\Source\Runtime\AIModule\Classes\EnvironmentQuery\T...
* 作り方 [#z058c67d]
+ C++クラスを作成する
&ref(eqs_create_test01.png,,70%);
+ 右上の「Show All Classes」にチェック、親クラスを「EnvQu...
&ref(eqs_create_test02.png,,70%);
+ そのまま作成を進めてC++ファイルを追加する。Visual Studi...
+ ヘッダーは下記のように。
UCLASS()
class UMyEnvQueryTest : public UEnvQueryTest
{
GENERATED_UCLASS_BODY()
// テストを行う
virtual void RunTest(FEnvQueryInstance& QueryInstance) ...
virtual FText GetDescriptionTitle() const override;
virtual FText GetDescriptionDetails() const override;
};
+ ソースコードもいい感じに
#include "EnvironmentQuery/Items/EnvQueryItemType_Vector...
UMyEnvQueryTest::UMyEnvQueryTest(const FObjectInitialize...
{
// testのコスト?
Cost = EEnvTestCost::Low;
// アイテムは何のパラメーターを受け取れるか。多分。
ValidItemType = UEnvQueryItemType_VectorBase::StaticCla...
}
void UMyEnvQueryTest::RunTest(FEnvQueryInstance& QueryIn...
{
// オーナーが居ない
UObject* QueryOwner = QueryInstance.Owner.Get();
if (QueryOwner == nullptr)
{
return;
}
FloatValueMin.BindData(QueryOwner, QueryInstance.QueryI...
float MinThresholdValue = FloatValueMin.GetValue();
FloatValueMax.BindData(QueryOwner, QueryInstance.QueryI...
float MaxThresholdValue = FloatValueMax.GetValue();
// アイテムの数だけブン回す
float score = 0.0f; // いい感じにする
for (FEnvQueryInstance::ItemIterator It(this, QueryInst...
{
score += 0.05f; // いい感じにする
It.SetScore(TestPurpose, FilterType, score, MinThresho...
}
}
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...
UPROPERTY(EditDefaultsOnly, Category=TestValue)
TSubclassOf<UEnvQueryContext> Query;
+ ソースコード側。
++ コンテキストのヘッダ
#include "EnvironmentQuery/Contexts/EnvQueryContext_Quer...
++ コンストラクタに初期化
Query = UEnvQueryContext_Querier::StaticClass();
++ RunTestメソッド内で取得。PrepareContextには各Transform...
// クエリからActorのリストを取得する
TArray<AActor*> ContextActors;
if (!QueryInstance.PrepareContext(Query, ContextActors))
{
// Actorが1つも無かった
return;
}
++ こんな感じでブン回せる
for (int32 ContextIndex = 0; ContextIndex < ContextActor...
{
}
&ref(eqs_create_test_tips_param01.png,,70%);
終了行:
#contents
----
UE 4.14.0ではEQSのテストはBlueprintで作成出来ない。
C++が必要になるのでその手順メモ。
* 参考 [#xd5b71b4]
エンジンのソースコードの下記辺りに既存のテストclassが有る
Engine\Source\Runtime\AIModule\Classes\EnvironmentQuery\T...
* 作り方 [#z058c67d]
+ C++クラスを作成する
&ref(eqs_create_test01.png,,70%);
+ 右上の「Show All Classes」にチェック、親クラスを「EnvQu...
&ref(eqs_create_test02.png,,70%);
+ そのまま作成を進めてC++ファイルを追加する。Visual Studi...
+ ヘッダーは下記のように。
UCLASS()
class UMyEnvQueryTest : public UEnvQueryTest
{
GENERATED_UCLASS_BODY()
// テストを行う
virtual void RunTest(FEnvQueryInstance& QueryInstance) ...
virtual FText GetDescriptionTitle() const override;
virtual FText GetDescriptionDetails() const override;
};
+ ソースコードもいい感じに
#include "EnvironmentQuery/Items/EnvQueryItemType_Vector...
UMyEnvQueryTest::UMyEnvQueryTest(const FObjectInitialize...
{
// testのコスト?
Cost = EEnvTestCost::Low;
// アイテムは何のパラメーターを受け取れるか。多分。
ValidItemType = UEnvQueryItemType_VectorBase::StaticCla...
}
void UMyEnvQueryTest::RunTest(FEnvQueryInstance& QueryIn...
{
// オーナーが居ない
UObject* QueryOwner = QueryInstance.Owner.Get();
if (QueryOwner == nullptr)
{
return;
}
FloatValueMin.BindData(QueryOwner, QueryInstance.QueryI...
float MinThresholdValue = FloatValueMin.GetValue();
FloatValueMax.BindData(QueryOwner, QueryInstance.QueryI...
float MaxThresholdValue = FloatValueMax.GetValue();
// アイテムの数だけブン回す
float score = 0.0f; // いい感じにする
for (FEnvQueryInstance::ItemIterator It(this, QueryInst...
{
score += 0.05f; // いい感じにする
It.SetScore(TestPurpose, FilterType, score, MinThresho...
}
}
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...
UPROPERTY(EditDefaultsOnly, Category=TestValue)
TSubclassOf<UEnvQueryContext> Query;
+ ソースコード側。
++ コンテキストのヘッダ
#include "EnvironmentQuery/Contexts/EnvQueryContext_Quer...
++ コンストラクタに初期化
Query = UEnvQueryContext_Querier::StaticClass();
++ RunTestメソッド内で取得。PrepareContextには各Transform...
// クエリからActorのリストを取得する
TArray<AActor*> ContextActors;
if (!QueryInstance.PrepareContext(Query, ContextActors))
{
// Actorが1つも無かった
return;
}
++ こんな感じでブン回せる
for (int32 ContextIndex = 0; ContextIndex < ContextActor...
{
}
&ref(eqs_create_test_tips_param01.png,,70%);
ページ名: