I From Japan Staff Blog

I From Japan の開発者ブログです

UE4・アクションゲームの作り方!Part3

 

blog.i-fromjapan.com

 

こんばんは!

 

ヨシ77です!

 

 

 

本日は、Steam関連が結構進んでいたのでそちらの方を書こうかなと思っていたのですが、Twitterでコンボの内容が猛烈に気になる とお言葉をいただいたので...

 

”猛烈に”ですよ! そんな事言われてしまったらお兄さん頑張っちゃいますよ。

 

 

と言うことなので、両方ブログに書くことにしました!

こっちの記事は気合を入れて書きますよ!

 

 

それではまずは一本目!

 

 

 

Unreal Engine 4を使ったコンボ攻撃の作り方!!

 

 

 

 

 

 

僕の場合は、

  • 攻撃モーションの再生
  • その攻撃で前に進む距離
  • 現在の攻撃回数
  • Hit Stopの有無

などなど

 

  • ボタンが押された!というイベント
  • アニメーションからの通知を受け取るイベント

以外はすべて武器で行っています

 

ボタンが押されたっていうのはコイツのことです。

f:id:ifromjapan:20161006194301p:plain

 

 

こいつをおなじみイベントディスパッチャーで武器に飛ばしています。

 

 

イベントディスパッチャーとはなんぞや!?

 

という方のためにさらっとご説明させていただきます。

 

簡単に言うと、

 

他のブループリントに存在するイベントが呼び出されたのを検知して

 

自分のブループリントでそのイベントと同時に自分のイベントを呼び出せる代物です。

 

f:id:ifromjapan:20161006195922p:plain

こんな感じですね!

実際は実装方法が少し違いますがイメージ的にはこんな感じです!

 

このイメージを頭に入れつつ次に行きましょう。

 

 

まずはキャラクターの方でここからイベントディスパッチャーを作成します。

 

f:id:ifromjapan:20161006201605p:plain

 

僕の場合はX_Buttonというイベントディスパッチャーを作成しました。

f:id:ifromjapan:20161006201805p:plain

 

 

オンラインに対応する場合はこの間にちょこちょこ挟まないといけないのですが

オフラインではこれで大丈夫です

 

この右の封筒が付いているノードが

 

今、このイベントが呼び出された!

 

という信号を発信しています。

 

 

つまり、他のブループリントでコイツの情報さえ受け取れるようにすれば

先程の絵の状態が再現できるというわけですね!

 

 

それでは、武器の方で"X_Button"というイベントディスパッチャーの情報を受け取れるようにしてみましょう!

 

f:id:ifromjapan:20161006202554p:plain

 

 

このWho Is Ownというのは

武器を装備させた時にGameInstanceで呼び出していたインターフェイスです!

このイベントがこのブループリントの初期化の役割をしています!

(Event Begin Playみたいな感じで使っています。Event Begin Playだとインターフェイスが実行される前の変数が空の状態で、変数を読み出したりしてエラーを吐くので今回は使っていません)

 

変数一覧

  • Playerchara:Character リファレンス / この武器を装備しているキャラクターののリファレンスです。
  • oCollision_Ready:bool / これがチェックされるまではコリジョンのオン/オフを切り替えることができません(最初はコリジョンはオフです
  • Player Ref Multi : Multi Play Playerリファレンス / 装備しているキャラクターのリファレンスです。

 

Playercharaはあくまでも親クラスなのでキャストをしないと現在使用しているキャラクターの変数などにアクセスできません。

 

キャストをできるだけ使いたくないのでキャストの代わりにブループリントインターフェイスでキャストの代わりをしています。

 

ここで、一つの疑問が生まれてくるのが

 

なぜWho Is Ownで最初からMulti Play Playerリファレンスを設定していないのか?

わざわざブループリントインターフェイスを通しているのか...?

 

 

理由は

武器の生成はどのキャラクターの場合でもGameInstaceから生成したいので

生成するときに、特定のリファレンスを使ってしまうとそれぞれのキャラクターごとのイベントをGameInstanceに作らないといけなくなってしまうからです。

 

少しわかりにくいかもしれないのでわかりにくかったらコメントしてください。

 

 

 

これで装備しているキャラクターにキャストしているのと同じ状態になったのでこの

Player_Ref_Multiを使って先程のイベントディスパッチャーの情報を受け取れるようにしていきましょう!

 

 

f:id:ifromjapan:20161006205655p:plain

 

これで情報を受け取れるようになりました!。

 

この Bind Event to X_Buttonというノードを使うことで

先程のキャラクターで”X_Buttonを呼び出し"ノードが呼び出されるたびに

このカスタムイベント"X_Button"が呼び出されます

 

(似たような名前ばっかりでわかりづらくてすみません)

 

このバインドノードは初期化の時につなげます。

今回ならばイベントWho Is Ownの先につなげています。

 

f:id:ifromjapan:20161006213509p:plain

 

イラストを訂正するとこんな感じになります。

 

これで、X_Buttonを押すたびに武器の方でも反応できるようになりました!!

 

 

 

そして武器の方でこのマクロを呼び出します!!

 

f:id:ifromjapan:20161006213939p:plain

 

 

 

気になる中身がこちらです

 

f:id:ifromjapan:20161006214431p:plain

 

 

 

変数がたくさんありますがこれは、全部線でつなげるのが嫌だったので一度格納してるだけです。一つだけStuningTimeはキャラクターの方でしか使わないのでキャラクターの方に格納しています。

 

変数の一覧がこちらです。

 

f:id:ifromjapan:20161006214909p:plain

 

  • Recent_AttackButton/ 今回の攻撃を行ったボタンです。(コンボを続ける時に使用します
  • LT_LF_M / LeftTriggerを押しながらの攻撃の時に前に進む距離を入れます
  • RT_LF_M / RightTriggerを押しながらの攻撃の時に前に進む距離を入れます
  • LB_LF_M / LeftButtonを押しながらの攻撃の時に前に進む距離を入れます
  • LF_M / 何も他にボタンを押していない攻撃の時に前に進む距離を入れます
  • LT :Animmontage  /  LeftTriggerを押しながらの攻撃の時のモーションを設定します
  • RT   :Animmontage  /  RightTriggerを押しながらの攻撃の時のモーションを設定します
  • LB    :Animmontage  /  LeftButtonを押しながらの攻撃の時のモーションを設定します
  • ATT  :Animmontage  /  何も他にボタンを押していない攻撃の時のモーションを設定します
  • Use_Sub_ButtonFroAttack / LTやRTなどのボタンを押しながらの攻撃をするかどうか
  • WhenChain / 連続攻撃の二回目以降かどうか(コンボの要です)
  • DamageType  /攻撃の種類(例:小攻撃、大攻撃、燃やす攻撃など)
  • Stuning_time /何秒間相手をスタンさせるのか
  • Do_HitStop  /攻撃にヒットストップを付加するのかどうか
  • Hit_Stop_Time /ヒットストップの時間

 

これを、マクロを呼び出す時に設定します。

 

 

 

とても長くなってきたので

今日はコンボの一撃目の解説に留めておきます。

f:id:ifromjapan:20161006220507p:plain

 

 

コンボの二撃目以降は"When Chain"にチェックマークを入れて呼び出します。

 

今回は一撃目なのでこのBranchはFalseにつながります。

 

f:id:ifromjapan:20161006220824p:plain

 

 

 

 

キャラクターのIs Attackingにチェックマークを入れます。

こBoolは攻撃中かどうかを判断するBoolなので攻撃をする直前にチェックを入れます。

キャラクターの方で移動や、武器の装備/非装備などはこれがTureだとできないようにしたりしています。

 

その横のBranchは"Use Sub Button Fro Attack (For Attackのつもりで打っていました)につながっています。

 

その横の

  • LT_On
  • RT_On
  • LB_On

はそれぞれのボタンのイベントディスパッチャーで呼び出された時にOn/Offを制御しています。

 

f:id:ifromjapan:20161006221535p:plain

こんな感じです。

 

 

この中のマクロにつながっているRAB_Mは先程のRecent attack Buttonの変数です。

f:id:ifromjapan:20161006221934p:plain

 

 

ここで再びRABを変数AttackButtonに格納しているのは二撃目以降でのコンボの説明の時に説明します。

 

キャラクターの変数LaunchForceは攻撃の時にキャラクターを足運びのタイミングでアニメーション通知を使ってキャラクターを前進させているのでそこで使う変数です。

 

f:id:ifromjapan:20161006222442p:plain

このイベントです。(これはキャラクターの中のイベントでアニメーション通知で呼び出しています)(オンラインのときは全てで実行です)

このイベントでキャラクターを前進させたり、後退させたり上に持ち上げたりできます。

 

 

 

PlayAnimMontageはそのまま、AnimationMontageを再生させます。

変数Combo-Countは現在のコンボの回数をカウントしています。

初期値は0なので、コンボ一回目は1となります。

 

 

ここで再生されるAnimMontageにもいろいろな仕掛けが施してあるのでそちらを見ていきましょう。

f:id:ifromjapan:20161006223222p:plain

 

 

この4つのAnimation通知が鍵となっています。

Animation通知の追加方法はこの通知と書いてあるラインで右クリックを押すとできます。

f:id:ifromjapan:20161006223415p:plain

 

 

これで新規通知で追加することができます。

これの通知はアニメーションブループリントで受け取ることができます。

 

 

通知一覧

  • eRightCollision 武器のコリジョンをオンにします
  • Chain     コンボをつなげるかどうか?という信号を出します
  • dRightCollision 武器のコリジョンをオフにします
  • Reset     攻撃を終了してすべての変数などを待機状態に戻します

 

 

アニメーションブループリントの中身はこちらです

 

f:id:ifromjapan:20161006224126p:plain

 

Player Ref 2はおなじみキャラクターのリファレンスです。

こんな感じで更にキャラクターのイベントを呼び出していきます。

 

そしてさらにイベントディスパッチャーで武器に飛ばしています。

 

(ここはもっと簡単にできるので、また組み直します)

 

コリジョンの方はダメージ処理の時に説明します。

Chainは二撃目以降に使うので次回に回します。

Resetでは変数Combo-Countを0に設定して、キャラクターの変数Is AttakingをFalseにしています。他にも武器によっては移動速度を戻したりなどいろいろなことをしています。

 

これで一撃目の実装はできているのですが、

今回のブログを書くのに三時間ぐらいかかったのでもしかしたら抜けている所があるかもしれないのです

説明がよくわからない場合はコメントください!訂正入れていきます!

 

 

さぁ!今日はもう一つ書くぞ!!

 

 

blog.i-fromjapan.com