読者です 読者をやめる 読者になる 読者になる

I From Japan Staff Blog

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

新コンボ実装(超簡単)UE4でアクションゲームを作る

お久しぶりです。

ヨシワタです。

 

 

最近"Last Standard"の開発が忙しくブログを書く時間が無かったのですが、昨日面白い事を思いついたので一気にコンボ実装について書きます。

 

また開発が落ち着けば使ったTipsをブログにどんどん書いていきます

 

昔に書いた記事がベースになってるのは変わりないのでもし不明確な所があったらそちらも合わせて見て頂ければと思います

 

blog.i-fromjapan.com

 

 

 

とりあえずまずはざっくりと構成の説明から始めます

 

f:id:YoshiakiNakamichi:20170517160507p:plain

こんな感じで

キャラクターBPからの入力が武器BPに送られてそこで様々な武器の処理を行っています

(例)コンボをつなげる、ガードなどなど

 

この形になっているのでいいちいち処理が武器のBPから送られているのですがこれはあくまでもLast Standardの仕様(プレイヤーそれぞれに武器やモーションが存在する)なので普通はキャラクターBPで直接処理していただいて大丈夫です

 

 

コンボシステムの概要としては

  • 一段目を実行
  • そのアニメーションのNotifyでコンボを繋げるかをチェック
  • 繋げるなら次のアニメーションを再生
  • 繋げないならResetを掛けておしまい

という感じになっています。

ここは前の記事と同じなのでBPの中身はそちらで参考にしていただきたいです

 

 

blog.i-fromjapan.com

 

コンボのチェインの仕方はこれと同じです

 

ここらへんがもしかしたら少しわかりにくいかもしれないので

時間がある時にYouTuberデビューしてみたいと思います。

 

それでは今日の本題に入っていきます。

 

超簡単にアクションゲームでコンボを実装する方法

 

まずは肝心のコイツの紹介です

f:id:YoshiakiNakamichi:20170517162107p:plain

 

以前は僕もMontageを使ってコンボを実装していたのですがなにせLast Standardではプレイヤーの武器に合わせて無限にモーションが生成されていってしまうので中身のモーションを変数にできないMontageの使用をやめて変数として使用できるAnimationに変更しました。

 

 

ということでこの3つのStateの説明をしていきます。

 

 

  • Idle
  • ToAttackorToIdle
  • TestAttack(名前は気にしないでください)

 

  • Idle

これはおなじみの、待機モーションを再生しているStateです

 

  • ToAttackorToIdle

これはStateではなくコンジットと呼ばれるモノです

どのStateに進むかを選択できる場所みたいなモノです

中身にはチェックマークを入れておきます

f:id:YoshiakiNakamichi:20170517163323p:plain

 

  • TestAttack

ここで攻撃のAnimationを再生していきます

f:id:YoshiakiNakamichi:20170517163527p:plain

 

 

中身はAnimationのみなのですがこのAnimationを変数として扱えるようにします

右上の(AsPin)のところにチェックマークを入れておくと格納できる様になります。

ついでにLoop Animationの所のチェックマークも外しておきましょう

 

Last Standardはオンラインゲームなので変数がレプリケート用になっていますがシングルならいらないです。

 

そしてここのAlways Reset on Entryをチェックしておきましょう

これをチェックするとStateに入るたびにAnimationがリセットされます

f:id:YoshiakiNakamichi:20170517164832p:plain

 

 

次は遷移の条件を見ていきます。

遷移条件が2個付いているところは2回繋げると出てきます

f:id:YoshiakiNakamichi:20170517164050p:plain

 

ここは単純にBool(Do_Attack01)で遷移です

 

 

 

そしてTestAttackに遷移する条件も同じ変数(Do_Attack01)で遷移です

f:id:YoshiakiNakamichi:20170517163931p:plain

 

 

そしてもう一つの遷移条件は(Do_Attack02)です

 

f:id:YoshiakiNakamichi:20170517164248p:plain

 

ここの遷移の際のブレンド方法をいい感じにすると綺麗にモーションがつながります(僕もここのブレンドについては勉強中なので改善していきたいと思います)

f:id:YoshiakiNakamichi:20170517174516p:plain

 

 

この2つの遷移する時にNotifyを呼び出します。

上の画像達の赤丸が書いてあるタブを下に進めていくと下の画像のような項目が見つかるのでここに先に任意の名前でNotifyを作ってください(先にここに作らないとイベントグラフで検索できません)

今回はReset_Chainです

f:id:YoshiakiNakamichi:20170517164457p:plain

 

 

 

次は帰りです

f:id:YoshiakiNakamichi:20170517165059p:plain

ここは変数(Chain)で遷移します。

 

 

 

Idleに帰る時です。

少し複雑です

f:id:YoshiakiNakamichi:20170517165437p:plain

変数ResetがTrueで以下の2つがFlaseの時のみIdleに戻ります。

そしてまた、遷移の際にNotiyを実行します

f:id:YoshiakiNakamichi:20170517165619p:plain

 

 

これでステートマシーンの設定はおしまいです

使った変数

  • Attack_01(Animation)
  • Do_Attack01
  • Do_Attack02
  • Chain
  • Reset

使ったNotify

  • Reset_Chain(ふたつ)

変数(Chain)をFalseにします

f:id:YoshiakiNakamichi:20170517170617p:plain

  • ToIdle

変数(Chain)(Reset)をFalseにします

f:id:YoshiakiNakamichi:20170517170712p:plain

 

 

 

次に使用するAnimationにつけるNotifyです

f:id:YoshiakiNakamichi:20170517170119p:plain

 

  • ChangeDirection

これはRootMotionを使用しているので攻撃の方向を任意の入力で変えるために一瞬だけRootMotionを無効にするためのNotifyなので今回は関係アリません。

 

  • A_Chain

このNotifyが呼び出された時点で次の攻撃のボタンが押されていたら次のコンボにつなげます

変数(Chain)をTureにしてコンボを繋げる関数を呼びます(後述)

f:id:YoshiakiNakamichi:20170517170806p:plain

 

 

  • Reset

このNotifyが呼び出された時点で次の攻撃のボタンが押されていなかったらコンボを初期化します

f:id:YoshiakiNakamichi:20170517170943p:plain

変数(Reset)をTrueにしてコンボ初期化の関数を呼びます(これは初期化しているだけなので説明を省きます

 

 

これでAnimBPの設定はおしまいです。

ここで設定した変数を任意のタイミングで操作すればコンボがつながります

 

つなげ方

 

  • コンボ一段目

変数Attack_01に任意のAnimationを格納して変数Do_Attack01をTrueにして0.2秒後にFalseにします。

これで一段目のAnimationは再生されます

この時に二段目の入力をしなければそのまま待機モーションに戻ります。

 

  • コンボ二段目

Notify(A_Chain)で呼び出された時にボタンが押されているかどうかを判定し、押されていれば変数Attack_01に次のコンボのAnimationを格納して変数Do_Attack02をTrueにして0.2秒後にFalseにします。(後述と書いた関数ではこれをしています)

 

これだけです。

コンボ三段目以降は二段目と同じ事を変数Do_Attack01変数Do_Attack02を交互に入力するだけで任意の回数繋げる事ができます。

こんな感じでつながります

わかりにくい所などがアリましたらいつでも聞いてください!(Youtuberデビューして解説するかもです)

BPを直接あげた方がわかりやすいとは思うのですが他のプログラムを相まってややこしいことになっているので整理したら載せます

 


モーション

 

一刻もはやく皆様の元へLast Standardをお届けするためにブログ更新頻度が下がってしまって申し訳ないのですが、落ち着いたらすぐに更新を再開するのでそれまではTwitterなどでUE4に関する事を直接聞いて頂ければ僕がわかる範囲でお答えさせて頂きます。

これからもよろしくお願いします

 

blog.i-fromjapan.com