<前文>
このブロクの目的というか、何がしたかったのか、もう教科書の終わりに来てますが、最近自分の中ではっきりして来ました。それをここにまとめておきます。
「アメリカにあって日本に全くないもの。」は何を思い浮かべますか?例えば、UE4はアメリカのものですが、日本からも使用出来ますし、アメリカにあって日本に全くないものではないですね。私が真っ先に思い浮かべるのが「You did a good job.」と言う言い回しです。これって日本語に訳したら「良く出来ました。」「よく頑張りました。」と言うニュアンスですよね。これをアメリカ国内では、立場が下の人が上の人に普通に言うのです。私が最初にこの言い回しを聞いたのは、従妹の子供から言われた時でした。「英語がしゃべれないとこんな小さな子供からも下に見られてしまうのか。」とか「白人でないと言う事は、世界ではこんな小さな子供よりも下になってしまうのか?」と内心どぎまぎしたのですが、しばらくすると、この言い回しは、立場に関係なく使用される事に気が付きました。ただし、本当にいい仕事をしたと思える時だけ使用される事も学びました。ある時、私が教授に「You did a good job.」と言ったら、教授は、顔をくしゃくしゃにして喜んでいました。
日本で立場が下の者が上の者を評価する事はないです。もし日本で、私の部下が私に「よくやった。」と言ったらぶん殴ります。多分本気で。でもこれは日本を致命的に破壊する悪い文化だと思うんです。子供の虐待が問題になっていますが、虐待であると判断できるのか子供だけです。しかし日本で立場が下のものが上のものを評価する事は出来ないです。ので、子供は親の虐待を言う事が出来ないのです。多分、日本でも昔は違ったと思うんです。昔は日本でも立場が下の者が上の者を評価する事は出来たはずです。社会の規範が暗黙のうちにあって、それに照らし合わせて、上の立場の人も下から評価されてたと思うんです。じゃなきゃこんなに経済が発展する事はなかったでしょう。
そこまで考えて理解したのですが、このブログでやりたかったのが、生徒としての教科書の評価だったのです。この教科書で勉強する価値があるのか?この教科書で勉強すれば十分なのか?この教科書に書かれている事は正しいのか?この教科書は初心者でも理解できるのか?などの疑問を生徒の立場から評価したかったのです。
<本文>
GameplayTags APIを勉強します。
<目的>
GameplayTags API を使用してGameplayTagsをアクターに付けます。
<理論>
今回も、以下のサイトを参考に進めていきます。
公式サイトからの情報です。
・Gameplay Abilities in Action RPG
・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)の一要素です。
教科書では以下のような説明がされていました。
GameplayTagsは単なるテキストです。そのテキストは以下に示す事を描写します。
- プレイヤーの状態(バフ)
- GameplayAbilitiesなどに張り付ける属性
- GameplayEffects
- これらの効果をクリアする状態
と説明されていました。
Unreal Sydneyには以下の説明がされていました。
もし属性がゲームの状態を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
以下に示すようにしました。
どんな名前を付けるべきなのでしょうか?サンプルコードを見ると、以下に示すuassetファイルがありました。
GameplayTagsかGameplayTagResponseTableが正しそうですが、どちらかは分かりません。GameplayTagsと名付けておきます。
Step.2
サンプルコードのゲームモードを見ると、同じコードがあったのでそのままコピーして使用します。
ビルドも出来ました。
Step.3
まず、GameMode内にPostInitializeComponents関数を作成します。
サンプルコードを見ると、PostInitializeComponents関数内でなく、コンストラクター内に作成していますね。
教科書は、IGameplayTagsModule…はPostInitializeComponents関数内かそれよりの後と書かれていますが、サンプルコードでは、開くより先に実行されると書かれています。
ウーン。今回は教科書に従いますか。
そのままコピーしたらエラーになりました。
理由は、LoadGameplayTagTables()関数のパラメーターが間違っていると出てました。
コードを見てみると、
パラメーターはありませんでした。
ので、
としました。
ビルドすると、
普通に出来ました。
ウーン。これで、GameplayTagTableNamesが呼べるのでしょうか?
Step.4
これは意味が分かりませんね。GameplayTagsを開いても、何も書かれていませんし。
<結果>
GameplayAbilities APIの時と同じように、正しく動作しているのかテストする方法が提供されていません。他のチュートリアルを参考にしてテストするしかありません。
<他のチュートリアルにおけるGameplayTags>
これだけでは、ほとんどGameplayTags APIについて不明なので他のチュートリアルでGameplayTagsを勉強してみます。
ます、UE4C++のAPIからLoadGameplayTagTablesを見つけました。
GameplayTagSettingのオブジェクトで参照されたタグテーブルをロードします。
とあります。GameplayTagSettingでどのタグテーブルを参照するか指定しないといけない事が分かりました。
と言うか、何で、UE4のプラグインのAPIがインターネットから見つかるでしょうか?
GamePlayTagsのAPIもありました。
うーん。と思って調べて見るとUnreal Engine API Referenceというページが見つかりました。
このページのプラグインの所を見てみると、
GameplayAbilities APIもありました。何で今まで検索で引っかからなかったのでしょうか?
GameplayAbilities APIを見てみます。
このAPIの勉強で一番最初に調べたUgameplayAbilityクラスのCanActivateAbility()関数を探して見ました。
見つかりません。
ウーン。良く分かりませんね。
やっぱり、GameplayAbilities APIらのremarkはコードそのものに書いてあるコメントを読んだ方が速いみたいですね。
このサイトにGameplay Tagsについての説明がありました。
Data Table Assetsを使用した場合のGameplay Tagsの作成方法の説明がありました。そこで以下に示すように、Data Table Assetsに自分でタグを作成していました。
サンプルコードにあるデータテーブルをUE4エディター上で開いて見ると、Tagは作成されていました。
ので、自分でも作成してみました。
この後、Project SettingのGameplayTagsを開いて見ましたが、
ここに追加されてはいませんね。これから追加するのかもしれませんが、その方法がわかりません。
LoadGameplayTagTables()関数は、GameplayTagSettingでどのタグテーブルを参照するか指定しないといけないと書いてありましたが、それがここなのかも分かりません。
突然閃いて、一つ上のGameplayTag Table ListのArray elementsを一つ作成してそこにGameplayTagsを選択したら出来ました。
このチュートリアルのこの後は、あまり今回の内容とは関係なさそうなのでここまでにします。
また他のサイトも見たのですが、あまり参考にはならなかったです。
<考察ではなく感想>
今回は、考察するほどの内容にならなかったので、感想をまとめます。まず、GameplayTags APIを使用してGameplayTagsをアクターに付けるを勉強しました。
ここまで書いて突然、
の意味が分かりました。GameplayAbilityのBPを開いたら、Tagsの項目があって作成したTagが表示されています。
これは、Project SettingのGameplayTag Table Listをセットしたからなのかどうかを確かめます。
Project SettingのGameplayTag Table ListからGameplay Tagを外しました。
なくなりました。やっぱり分かりませんでした。
今週はここまでとします。このレシピは今週で終わりにしたかったのですが、勉強した内容を整理してもう一度来週トライする事にします。