UE4の勉強記録

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

「Unreal Engine 4.xを使用してRPGを作成する」の足りない部分を作成する MyCombatEngineの作成3

f:id:kazuhironagai77:20200628203106p:plain

<前文>

前文で何回も紹介している英語の音素の区別がつくようになるゲームですが、効果が凄いのでビジネスとして展開する決意をしました。ただ普通に販売しても全く注目されず売れもしないのは分かり切っているので、商業的に成功するための作戦を今考えてみます。

と思ったんですがビジネス系の勉強を全くした事がない私は、商業的に成功するための作戦について全く知らないです。うんうん。頭をひねってやっと思いだしたのが以下の話でした。

  1. 安売りは絶対しない。
  2. Subscription制は儲かる。
  3. 対象とするお客のイメージをなるだけ具体的にする。
  4. 資本金は掛けない。

1. についてですが「安売りするとクレーマーが集まる。」と言う話を昔、何かの本で読んだのですが、商売をやっている人達にその話をした時、みんな共感していたのでかなり事実の様です。ある人は「値段を3割下げたらクレーマーの数が2倍になった。」と言っていました。ので安易な安売りは絶対避けるべきです。アンドロイドやI-phoneのアプリにするの事を考えていましたがこれは結構安易な安売りでクレーマーを集めるだけかもしれません。

2. についてはアドビ―社がsubscription制にしたら、海賊版を使用する人たちも購入するようになって結果的に収入が上がった。と言う話とCostcoが成功しているのが会員制にする事で安定的に月々の収入を得る事が出来るから、と言う話を聞いたのを思い出しただけです。このモデルでやる場合は、一つ考えがあります。英会話、特に子供向けの英会話教室に月額いくらかつ個別でこのゲームを貸し出す方法です。大手の英会話学校と直で交渉するとこっちは拙い個人なので全部利益を取られてしまいますが、個人相手ならば普通に商売として確立出来ると思います。

3. これは最近YouTubeで見たのですが、かなり役に立つ情報と思いました。具体的な顧客のイメージは全く持っていませんでした。というかこれだけ効果のある練習法を、いくらお金を払うからと言って誰にでも伝授するのは気分的に良くないので意識的に避けていました。これからは考える様にします。

4. これは当たり前ですが資本金がなくなってしまうとそれ以上チャレンジ出来ません。失敗しても立ち直れるようになるだけお金は掛けない方向でやります。

それでは今週の勉強を始めます。

<本文>

今週はアニメーションを追加します。

1. アニメーションの追加

1. 兎に角、アニメーションが実行されるようにします。

f:id:kazuhironagai77:20200628203328p:plain

これが表示された時に攻撃用のアニメーションが実行されるようにします。

f:id:kazuhironagai77:20200628203352p:plain

このイベントが発生した時に攻撃用のアニメーションが実行されれば良いみたいです。

滅茶苦茶簡単な方法ですが以下の実装をしてみました。

f:id:kazuhironagai77:20200628203410p:plain

テストします。

f:id:kazuhironagai77:20200628203428p:plain

f:id:kazuhironagai77:20200628203434p:plain

攻撃のモーションが実行されました。

ハッキリ言って攻撃のモーションについてはこのやり方で十分ですね。後で装備している武器によってモーションが変化するように改良します。

2. 攻撃のモーションの時は、ウィジェットを消したい。

CombatUIのvisibilityをCollapsedに変え、アニメーションをプレイします。アニメーションのプレイが終了したらCombatUIのvisibilityをvisibleに戻します。

f:id:kazuhironagai77:20200628203543p:plain

テストします。

f:id:kazuhironagai77:20200628203601p:plain

攻撃の間だけCombatUIが消えました。

f:id:kazuhironagai77:20200628203636p:plain

攻撃が終了したらCombatUIは元に戻ります。

これも簡単に出来ました。

3. 戦闘に勝った時と負けた時のアニメーションを追加する。

EventReportFightIsOverにアニメーションを追加します。

f:id:kazuhironagai77:20200628203708p:plain

1.と同じ方法でアニメーションを追加しました。

f:id:kazuhironagai77:20200628203726p:plain

テストします。

勝利のアニメーションは実行されますが、前の攻撃のアニメーションが省略されてしまいました。

f:id:kazuhironagai77:20200628203753p:plain

更に今気が付いたのですが、

f:id:kazuhironagai77:20200628203818p:plain

戦闘が終わっても、MyThirdPerson_AnimBPが適用されなくなって使用したアニメーションのポーズを維持しています。

これらを直します。

MyThirdPerson_AnimBPが適用されなく問題ですが、アニメーションの最後でもう一度、MyThirdPerson_AnimBPをセットし直して見ました。

f:id:kazuhironagai77:20200628203841p:plain

これで直れば儲け物位の気持ちですが、テストしてみます。

f:id:kazuhironagai77:20200628203907p:plain

普通に直りました。

次に勝利のアニメーションが戦闘が終了してから実行されるようにします。

以下に示したようにEventFightIsOverの後で、アニメーションが開始されるようにしました。

f:id:kazuhironagai77:20200628203931p:plain

テストします。

戦闘が終わってから勝利のポーズを取るようになりました。

上手くスクリーンショットが取れないので、図はなしです。

敗北した場合のアニメーションも追加します。

f:id:kazuhironagai77:20200628204007p:plain

勝利のアニメーションを入れた時と全く同じやり方です。

テストします。

以下に示したようなアニメーションが死んだ時に流れました。

f:id:kazuhironagai77:20200628204029p:plain

うーん。今週やろうと思っていた事全部出来てしまいましたね。流石にこれで終にするには短すぎますね。どうしましょうか?

2. 魔法

色々考えたんですが、魔法を追加します。

1. 魔法の追加

武器屋や道具屋を追加するとゴールドなどを表示するためのUIの作成がその前に必要ですので面倒です。戦闘が開始した場合に別なマップにワープする機能は絶対必要と言う訳ではないので後回しでいいと思っています。そうするとカメラワークの追加に成りますがそれは来週やろうと思っているので、特にやりたい事や今の状況で出来る事がないです。

そんな中で考えたのが魔法の追加です。これなら、UE4C++をあんまり弄らなくて見た目に大きな変化があるものが作成出来そうなのでこれをやります。

魔法や道具の場合は、攻撃と違い使用する魔法や道具を最初に選択する必要があります。

以下に示したようにCombatUIのTargetsを分割して、片方を魔法や道具の選択のために使用します。

f:id:kazuhironagai77:20200628204120p:plain

まず、ここに使用出来る魔法が表示出来る様にします。

となると魔法についてのデータシートが必要ですね。

以下にアイテムのItemDataを示します。

f:id:kazuhironagai77:20200628204145p:plain

これを真似て作成します。

消費MPは絶対必要ですね。名前はMPでいいでしょう。次にダメージ量を表す項目、これはHPで良いです。更に攻撃力や防御力をアップする魔法もあるかもしれませんのでATK、DEFも必要ですね。運を上げる魔法もあるかもしれませんのでLuckは残しておきます。魔法の絵があると見やすいのでToolImageに似たMagicImageも追加しておきましょう。Goldは要らないですね。

では作成します。

と思ったらDataTableの作り方をすっかり忘れてしまっていました。色々調べたら2020-04-19のブログに作り方がまとめてありました。それを元に作成します。

UObjectを親クラスとしてMagicsDataクラスを作成します。

f:id:kazuhironagai77:20200628204215p:plain

f:id:kazuhironagai77:20200628204223p:plain

これを2020-04-19のブログに載っている方法でDataTableに改造します。

f:id:kazuhironagai77:20200628204251p:plain

ビルドします。

f:id:kazuhironagai77:20200628204312p:plain

成功しましたが、UE4エディターがクラッシュします。

UE4エディターを再起動します。

以下に示したように項目を追加しました。

f:id:kazuhironagai77:20200628204334p:plain

ビルドします。

成功しました。

DataTableを作成します。

f:id:kazuhironagai77:20200628204353p:plain

f:id:kazuhironagai77:20200628204405p:plain

出来ました。

f:id:kazuhironagai77:20200628204430p:plain

魔法も追加します。

f:id:kazuhironagai77:20200628204447p:plain

イラストも作成しました。

f:id:kazuhironagai77:20200628204508p:plain

これで魔法のデータテーブルが出来ました。

使用出来る魔法の一覧を保持した変数をGameCharacterクラス内に作成すべきかどうかですが、ちょっと迷っています。この辺は所持している道具の管理の復習をやってから考える必要がありそうです。今回はGameCharacterクラスは変更しない事にします。

こんな感じに作成しました。

f:id:kazuhironagai77:20200628204545p:plain

魔法を押すと使用出来る魔法の種類がChoose内に表示されます。

f:id:kazuhironagai77:20200628204604p:plain

f:id:kazuhironagai77:20200628204612p:plain

炎(小)を選択するとゴブリンが表示されます。ゴブリンを選択すると

f:id:kazuhironagai77:20200628204633p:plain

と表示されます。

まあ、今週はこの辺はあまり作成したい個所じゃないのでこの位で止めておきます。

2. 魔法のアニメーションの追加

2.1 準備

私が今週したいのはこの魔法にアニメーションを追加したいんです。

まずそのための準備をします。

戦闘中のアニメーションはRPGGameModeBaseBPのEventReportBeginExecuteActionで管理しています。

f:id:kazuhironagai77:20200628204719p:plain

RPGGameModeBaseBPは、EventReportBeginExecuteActionが攻撃、魔法、アイテム、そして逃げるの中からどれを選択して呼ばれたのかを知る必要があります。

これはEnumを作成して伝達する事にしました。Enum、 CombatSelectionsを作成します。

UE4C++で作成するかBPで作成するか迷ったのですが、攻撃、魔法、アイテム、そして逃げるの選択自体がBP上にしか存在しないので、BPで作成する事にしました。

f:id:kazuhironagai77:20200628204744p:plain

f:id:kazuhironagai77:20200628204752p:plain

これを使用してEventReportBeginExecuteAction が呼ばれた時にRPGGameModeBaseBPが攻撃、魔法、アイテム、そして逃げるの選択肢の中のどれから呼ばれたのか知る事が出来る様にします。

以下に示すようにCombatUIクラス内にCombatSelectionsから変数、CombatSelectedを作成します。

f:id:kazuhironagai77:20200628204815p:plain

攻撃ボタンが押された場合はAttack、魔法ボタンが押された場合はMagicが保持されるようにセットします。

f:id:kazuhironagai77:20200628204848p:plain

RPGGameModeBaseBP内でEventReportBeginExecuteActionが呼ばれたら、

f:id:kazuhironagai77:20200628204921p:plain

CombatSelectedの値によってアニメーションが変わる様にコードを組みます。

f:id:kazuhironagai77:20200628204940p:plain

テストします。

攻撃を選択した場合のアニメーションのスクリーンショットを以下に示します。

f:id:kazuhironagai77:20200628204959p:plain

魔法の場合です。

f:id:kazuhironagai77:20200628205034p:plain

選択した別のアニメーションが実行されました。

2.2 ファイアーボールの作成

ここでこのチュートリアルに載っているファイアーボールを発射するアニメーションを追加したいんです。

f:id:kazuhironagai77:20200628205058p:plain

ずっと昔勉強したのですがやり方はすっかり忘れてしまったのでもう一度勉強し直します。

出来ました。

f:id:kazuhironagai77:20200628205122p:plain

しかしこれをアニメーションにする方法が分かりません。

取りあえずこんな感じで組んでみました。

f:id:kazuhironagai77:20200628205142p:plain

テストの結果です。

f:id:kazuhironagai77:20200628205207p:plain

f:id:kazuhironagai77:20200628205219p:plain

f:id:kazuhironagai77:20200628205228p:plain

f:id:kazuhironagai77:20200628205236p:plain

動作が速すぎますね。その辺の調整は来週行います。今週は時間が無くなってしまったのでここで終了です。

3. まとめと感想

来週はカメラを動かします。