UE4の勉強記録

UE4の勉強の記録です。個人用です。

12章12節 GameplayTags API –GameplayTagsをアクターに付ける

<前文>

f:id:kazuhironagai77:20190127220352p:plain

このブロクの目的というか、何がしたかったのか、もう教科書の終わりに来てますが、最近自分の中ではっきりして来ました。それをここにまとめておきます。

アメリカにあって日本に全くないもの。」は何を思い浮かべますか?例えば、UE4アメリカのものですが、日本からも使用出来ますし、アメリカにあって日本に全くないものではないですね。私が真っ先に思い浮かべるのが「You did a good job.」と言う言い回しです。これって日本語に訳したら「良く出来ました。」「よく頑張りました。」と言うニュアンスですよね。これをアメリカ国内では、立場が下の人が上の人に普通に言うのです。私が最初にこの言い回しを聞いたのは、従妹の子供から言われた時でした。「英語がしゃべれないとこんな小さな子供からも下に見られてしまうのか。」とか「白人でないと言う事は、世界ではこんな小さな子供よりも下になってしまうのか?」と内心どぎまぎしたのですが、しばらくすると、この言い回しは、立場に関係なく使用される事に気が付きました。ただし、本当にいい仕事をしたと思える時だけ使用される事も学びました。ある時、私が教授に「You did a good job.」と言ったら、教授は、顔をくしゃくしゃにして喜んでいました。

日本で立場が下の者が上の者を評価する事はないです。もし日本で、私の部下が私に「よくやった。」と言ったらぶん殴ります。多分本気で。でもこれは日本を致命的に破壊する悪い文化だと思うんです。子供の虐待が問題になっていますが、虐待であると判断できるのか子供だけです。しかし日本で立場が下のものが上のものを評価する事は出来ないです。ので、子供は親の虐待を言う事が出来ないのです。多分、日本でも昔は違ったと思うんです。昔は日本でも立場が下の者が上の者を評価する事は出来たはずです。社会の規範が暗黙のうちにあって、それに照らし合わせて、上の立場の人も下から評価されてたと思うんです。じゃなきゃこんなに経済が発展する事はなかったでしょう。

そこまで考えて理解したのですが、このブログでやりたかったのが、生徒としての教科書の評価だったのです。この教科書で勉強する価値があるのか?この教科書で勉強すれば十分なのか?この教科書に書かれている事は正しいのか?この教科書は初心者でも理解できるのか?などの疑問を生徒の立場から評価したかったのです。

<本文>

GameplayTags APIを勉強します。

<目的>

GameplayTags API を使用してGameplayTagsをアクターに付けます。

<理論>

今回も、以下のサイトを参考に進めていきます。

公式サイトからの情報です。

Gameplay Abilities in Action RPG

Gameplay Ability System

GameplayAbilities and You (Unreal Wiki)

Action RPG | Project Spotlight | Unreal Engine Livestream

(日本語)

猫でも分かる UE4の新しいサンプル「Action RPG」について(p77)

公式サイト以外でGameplay Ability Systemについて述べたサイト。

Tom Looman氏による解説

       Tutorial: Creating a RAGE Potion in Epic’s Action RPG

       Gameplay Ability System Tutorial with C++ & Blueprint [Unreal Engine 4 RPG Game]

SabreDartStudiosによる解説

       Intro to Gameplay Abilities in Unreal Engine 4

Unreal Sydneyによる解説

       Intro to the Unreal Engine Gameplay Abilities Module - Unreal Sydney Meetup

(日本語)

おかわりはくまい氏による解説

       GameplayAbilitiesの使い方(セットアップ編)

GameplayTags はUnreal SydneyがまとめたGameplayAbilities APIの8大コンセプト、(AbilitySystemComponent, AttributeSets, GameplayTags, GameplayEffects,  GameplayCues, GameplayAbilities, GameplayTasksとGameplayEvents)の一要素です。

教科書では以下のような説明がされていました。

f:id:kazuhironagai77:20190224212407p:plain

GameplayTagsは単なるテキストです。そのテキストは以下に示す事を描写します。

  • プレイヤーの状態(バフ)
  • GameplayAbilitiesなどに張り付ける属性
  • GameplayEffects
  • これらの効果をクリアする状態

と説明されていました。

Unreal Sydneyには以下の説明がされていました。

f:id:kazuhironagai77:20190224212533p:plain

もし属性がゲームの状態をFloatで描写すると言うならば、タグはboolで描写すると言えます。

上記2つの説明を読むとかなりGameplayTagsのイメージが固まりますね。GameTagsは小さなテキストでBoolを使用してゲームの状態を指定するイメージですね。

GameplayAbilities and You (Unreal Wiki)ではどうでしょうか?

何と、GameplayTagsの項目がありません。GameplayAbilitiesの中の大事なtagを紹介しているNotable Variablesと言う項目があるだけです。ここに紹介されているtagが教科書の言う「GameplayAbilitiesなどに張り付ける属性」でUnreal SydneyのいうBoolなのでしょうか?

かなりGameplayTagsの具体的なイメージが湧いてきました。それではやって行きましょう。

<方法>

Step.0

前回作成したThird Personのテンプレートを使用したプロジェクトをそのまま使用します。

Step.1

f:id:kazuhironagai77:20190224212659p:plain

以下に示すようにしました。

f:id:kazuhironagai77:20190224212746p:plain

f:id:kazuhironagai77:20190224212756p:plain

どんな名前を付けるべきなのでしょうか?サンプルコードを見ると、以下に示すuassetファイルがありました。

f:id:kazuhironagai77:20190224212849p:plain

GameplayTagsかGameplayTagResponseTableが正しそうですが、どちらかは分かりません。GameplayTagsと名付けておきます。

f:id:kazuhironagai77:20190224212914p:plain

Step.2

f:id:kazuhironagai77:20190224212939p:plain

f:id:kazuhironagai77:20190224212949p:plain

サンプルコードのゲームモードを見ると、同じコードがあったのでそのままコピーして使用します。

f:id:kazuhironagai77:20190224213007p:plain

ビルドも出来ました。

f:id:kazuhironagai77:20190224213029p:plain

Step.3

f:id:kazuhironagai77:20190224213055p:plain

f:id:kazuhironagai77:20190224213103p:plain

まず、GameMode内にPostInitializeComponents関数を作成します。

f:id:kazuhironagai77:20190224213137p:plain

サンプルコードを見ると、PostInitializeComponents関数内でなく、コンストラクター内に作成していますね。

教科書は、IGameplayTagsModule…はPostInitializeComponents関数内かそれよりの後と書かれていますが、サンプルコードでは、開くより先に実行されると書かれています。

ウーン。今回は教科書に従いますか。

そのままコピーしたらエラーになりました。

f:id:kazuhironagai77:20190224213212p:plain

理由は、LoadGameplayTagTables()関数のパラメーターが間違っていると出てました。

コードを見てみると、

f:id:kazuhironagai77:20190224213231p:plain

パラメーターはありませんでした。

ので、

f:id:kazuhironagai77:20190224213304p:plain

としました。

ビルドすると、

f:id:kazuhironagai77:20190224213326p:plain

普通に出来ました。

ウーン。これで、GameplayTagTableNamesが呼べるのでしょうか?

Step.4

f:id:kazuhironagai77:20190224213407p:plain

これは意味が分かりませんね。GameplayTagsを開いても、何も書かれていませんし。

f:id:kazuhironagai77:20190224213435p:plain

<結果>

GameplayAbilities APIの時と同じように、正しく動作しているのかテストする方法が提供されていません。他のチュートリアルを参考にしてテストするしかありません。

<他のチュートリアルにおけるGameplayTags

これだけでは、ほとんどGameplayTags APIについて不明なので他のチュートリアルでGameplayTagsを勉強してみます。

ます、UE4C++のAPIからLoadGameplayTagTablesを見つけました。

f:id:kazuhironagai77:20190224213649p:plain

GameplayTagSettingのオブジェクトで参照されたタグテーブルをロードします。

とあります。GameplayTagSettingでどのタグテーブルを参照するか指定しないといけない事が分かりました。

と言うか、何で、UE4プラグインAPIがインターネットから見つかるでしょうか?

GamePlayTagsAPIもありました。

うーん。と思って調べて見るとUnreal Engine API Referenceというページが見つかりました。

このページのプラグインの所を見てみると、

f:id:kazuhironagai77:20190224213730p:plain

GameplayAbilities APIもありました。何で今まで検索で引っかからなかったのでしょうか?

GameplayAbilities APIを見てみます。

このAPIの勉強で一番最初に調べたUgameplayAbilityクラスのCanActivateAbility()関数を探して見ました。

見つかりません。

ウーン。良く分かりませんね。

やっぱり、GameplayAbilities APIらのremarkはコードそのものに書いてあるコメントを読んだ方が速いみたいですね。

このサイトにGameplay Tagsについての説明がありました。

Data Table Assetsを使用した場合のGameplay Tagsの作成方法の説明がありました。そこで以下に示すように、Data Table Assetsに自分でタグを作成していました。

f:id:kazuhironagai77:20190224213934p:plain

サンプルコードにあるデータテーブルをUE4エディター上で開いて見ると、Tagは作成されていました。

f:id:kazuhironagai77:20190224214006p:plain

ので、自分でも作成してみました。

f:id:kazuhironagai77:20190224214024p:plain

この後、Project SettingのGameplayTagsを開いて見ましたが、

f:id:kazuhironagai77:20190224214041p:plain

ここに追加されてはいませんね。これから追加するのかもしれませんが、その方法がわかりません。

LoadGameplayTagTables()関数は、GameplayTagSettingでどのタグテーブルを参照するか指定しないといけないと書いてありましたが、それがここなのかも分かりません。

突然閃いて、一つ上のGameplayTag Table ListのArray elementsを一つ作成してそこにGameplayTagsを選択したら出来ました。

f:id:kazuhironagai77:20190224214100p:plain

このチュートリアルのこの後は、あまり今回の内容とは関係なさそうなのでここまでにします。

また他のサイトも見たのですが、あまり参考にはならなかったです。

<考察ではなく感想>

今回は、考察するほどの内容にならなかったので、感想をまとめます。まず、GameplayTags APIを使用してGameplayTagsをアクターに付けるを勉強しました。

ここまで書いて突然、

f:id:kazuhironagai77:20190224214145p:plain

の意味が分かりました。GameplayAbilityのBPを開いたら、Tagsの項目があって作成したTagが表示されています。

f:id:kazuhironagai77:20190224214309p:plain

これは、Project SettingのGameplayTag Table Listをセットしたからなのかどうかを確かめます。

f:id:kazuhironagai77:20190224214404p:plain

Project SettingのGameplayTag Table ListからGameplay Tagを外しました。

f:id:kazuhironagai77:20190224214435p:plain

なくなりました。やっぱり分かりませんでした。

今週はここまでとします。このレシピは今週で終わりにしたかったのですが、勉強した内容を整理してもう一度来週トライする事にします。