<前文>
突然ですが、3Dグラフィックと一般人を繋ぐ技術に大きなビジネスチャンスがあると考えています。3Dグラフィックは仮想空間に現実と同じ寸法の物体を作成する技術として他に代える事の出来ない素晴らしい技術です。更にUE4に代表されるリアルタイムのフォトレンダリングは、信じられないレベルでの写実的な美しさをリアルタイムで提供してくれます。しかしこれらの技術は2Dのように直観で使用する事は出来ません。結果、一般人には使用出来ない眠った技術になっています。そこでこのギャップを埋める技術を開発すれば、一般人も3Dグラフィックの恩恵を受けられるので沢山の人が使用するはずです。これ以上はここには詳しく書きませんが、具体的なアイデアがあります。そのうちの一つは2.5Dグラフィックと仮に言っています。限定された3Dですが、2Dと同じように直観で操作出来るはずです。今年中に作成してみようと思ってます。
<本文>
GameplayTags APIを勉強します。前回、教科書のレシピを終了しましたが、何だか良く分からない状態で終わってしまいました。結論はこの本でGameplayTagの勉強をしても良く分からない。他のチュートリアルで勉強する必要があります。となってしまいますが、それはそれでしょうがないです。しかし前回はGameplayAbilityの中のGameplayTagとして勉強している事に気が付きました。ひょっとするとこの教科書が説明しているGameplayTagは、GameplayAbilityから独立している場合の可能性もあるのかな?と考えちょっとだけ他のチュートリアルも試してみようと思います。
<目的>
GameplayTags API を使用してGameplayTagsをアクターに付けます。前回はこのレシピを実行しました。コードを総て実装しましたが、playをしても何の変化も起きず出来ているのかどうか確認出来ません。この確認する方法を他のチュートリアルを実行する事で発見したいです。
<他のチュートリアル>
いつもお世話になっている以下のサイトですが、全てGameplayAbilityを使用する中でどのように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の使い方(セットアップ編)
以下のチュートリアルが見つかりました。
公式のサイトからの情報です。
Using Gameplay Tags to Label and Organize Your Content in UE4
日本語のサイト
Gameplay Tag を使ってコンテンツをラベル付けして整理する
公式以外のサイト
WTF Is? Gameplay Tags in Unreal Engine 4
日本語のサイト
UE4 Gameplay Tagを使ってゲームプレイ時のタグ管理をより扱いやすくする
もっと探せばありそうですが、Using GameplayTagsを読んでいたら「これが教科書のチュートリアルのやりたかった事じゃないの。」という気がしてきました。のでUsing GameplayTagsをやってみます。
<方法>
Using GameplayTagsをやります。もしUsing GameplayTagsの方法でC++からアクターにgameplayTagを表示する事が出来たら、前回行ったレシピと比較し足りなかった個所を勉強し直します。
Step.0
このチュートリアル2016年の9月に書かれてたとあるのでちょっと古い可能性があります。そのままでは出来ない場合や必要のない手順を踏んでいる場合もあるかもしれませんが取りあえずは書いてある通りにやってみます。
Step.1:何故Tagを使用するのか?
Tagを使用すると便利な具体的な例が述べられていますが、使用方法にはあまり関係ないのでスキップします。
Step.2:TagとGameplayTagの違い?
最初から気になっている箇所の説明がありました。昔BPの勉強をしていた時アクターにtagを付けた事があったような気がしていたのですが、それとGameplayTagはどう違うのかが分かり易く説明されていました。ただこの時期からGameplayTagは更に進化している可能性もあるのでここに書かれている事だけがではないかもしれません。
Step.3:Tagの使い方
Tagは使用しないのでスキップします。
Step.4:GameplayTagの使い方
ここから、本格的に始まります。
GameplayTagを使用するために、DefaultEngine.Iniを開いて以下のコードを追加してください。
うーん。いきなり違う事している。Step.0でここに書かれている通りのやると宣言しましたが、ここまで違うとちょっと躊躇してしまいます。どうしようか迷っていたら、公式サイトのGameplay TagsでProject settingからGameplayTagを開いていてそこに以下に示すようなイメージが表示されています。
ひょっとすると最新のversionのUE4(4.22.0 preview 3)は既にこの設定になっているかもしれません。
新しいprojectを作成します。名前はUsingGameplayTagsとします。C++で Third Person を選択しました。そしてProject settingからGameplayTagを開いたら既にチェックされていますね。
やった。加えなくていいや。と思いつつも、一応、DefaultEngine.Iniも確認してみました。
[GameplayTags]
ImportTagsFromConfig=true
は書いてなかったです。
別にDefaultEngine.Iniに書いてなくてもProject settingからGameplayTagからチェックしたのだから良いと思うのですが、昔どこかで「C++から動かす場合は.iniにもコードを追加する必要がある。」みたいな文章を読んだ気がするのです。のでちょっとだけ.iniとC++について調べて見ます。
そんな文章は見つからなかったです。
チュートリアルの次の文に
そしたらエディターをもう一度開いた後に、Project Setting->Gameplay Tagsに行けます。
と書かれています。と言う事は、何もしなくてもProject Setting->Gameplay Tagsに行けている現在のversionは[GameplayTags] ImportTagsFromConfig=trueを加えなくてもいいのでしょう。
この後、GameplayTagについての現状などについての説明をして、新しいactorクラスを作成しています。今回のprojectはThird Person templateを使用しているのでactorクラスから新しいactorを制作しないでそれをそのまま使用します。
Step.5:Build.cs fileの調節
Build.csに"GameplayTags"を追加してくださいと書かれていました。これは当然ですので加えます。
Step.6: GameplayTag Interfaceを追加
とあります。こんなの追加したかな?と思って前回のレシピを見てみるとアクタークラスに対して何もしていませんでした。これが必要なのかもしれません。
をAUsingGameplayTagsCharacterクラスに追加しました。
ビルドすると、
とエラーになってしまいました。
何かのvirtualな関数がIGameplayTagAssetInterfaceにあってそれをoverrideしないといけないのかなと思ってチュートリアルの先を読むと、案の定GetOwnedGameplayTags()関数をオーバーライドしています。ので先に進みます。
Step.6: GameplayTag の変数を作成
以下に示すコードを加えろと書いています。
アクタークラスに追加すればいいんでしょうか?
追加しました。取りあえずpublicの所に追加しました。
そしてさっきの関数、GetOwnedGameplayTags()を追加します。
これもpublicに追加しました。これでいいのかなと思ってチュートリアルの先を読んだら、actor.hの全コードが載っていて正しい事が確認出来ました。
今度はビルド出来るでしょうか?
出来ました。がエディターからコンパイルしたらエディターがクラッシュしました。
これがエラーを吐いているようです。この後のアクタークラスからBPを作成して…とチュートリアルでも書かれているので、ここは、もう一度普通のprojectでやり直します。
名前はUsingGameplayTags2とします。
アクター名はそのままでMyActorです。
今度はビルドもコンパイルも上手く行きました。
<結果>
Step.6: GameplayTagsの追加
C++クラスからBPを作成してそれを開いて下さい。
はい。
ここを選択すると、
ここからGameplayTagが追加出来ます。
うーん。なるほど。GameplayTagが何なのかは理解出来ました。
<考察>
GameplayTagをactorから使えるようにするには、教科書のやり方ではなく、Using GameplayTagsに紹介されているやり方が必要です。しかしUsing GameplayTagsのやり方は結局、アクタークラスにFGameplayTagContainerクラスからの変数を作成してそこに、GameplayTagを保持させるという、あえてチュートリアルで説明する必要あるの?と言いたくなるくらいの簡単な方法です。前回はGameplayTagそのものが理解出来ていなかったので、かしこまって聞いていましたが、要するにGameplayTagは沢山のboolean変数をひとまとめにして一括で管理しているだけでしょう。だったら、Using GameplayTagsのやり方でいいような気がしますが。
教科書のレシピの方法は、GameplayAbilityの中でのGameplayTagの使用方法としては普通なんでしょうか?サラッと勉強しただけですが何か独特な感じがします。建設的に言えば、この書き方を知っておくと後で色々得になりそうです。