超絶奮闘記~ブラッドボーンの変形攻撃システムパクった!~

やりたい事

・攻撃中、指定のタイミングで指定のキーを押すと変形攻撃。それ以外は通常武器変更に移行。

・武器変更中、攻撃不可

 

free-gamer.hatenablog.com

この記事と大体同じ所があるので、ある程度説明は省く。

 

~モンタージュ~

・コンボ攻撃、ディレイコンボモンタージュ

全攻撃アニメーションに以下の通知を入れた。

ComboStartは、コンボ開始時に配置。

TransAttackは、次のコンボに移行する通知「NextCombo⁇」通知の少し後辺りに配置。

f:id:Free_Gamer:20180709010911p:plain

ComboStart・・・コンボを開始した時に呼ばれる通知

TransAttack・・・変形攻撃可能な時に呼ばれる通知

 

・変形攻撃

f:id:Free_Gamer:20180709011420p:plain

ChangeWeapon・・・武器のアタッチを入れ替える通知

TransEnd・・・変形・武器変更が終わった通知

 

~AnimBP~

・武器変更

f:id:Free_Gamer:20180709011836p:plain

・コンボ攻撃

f:id:Free_Gamer:20180709011932p:plain

 

・攻撃中、指定のタイミングで指定のキーを押すと変形攻撃。それ以外は通常武器変更に移行。

 

ComboStart通知が来た時、ComboStart変数をTrueにセット。

f:id:Free_Gamer:20180709012149p:plain

武器変更処理の前に、ブランチを挟みConditionにComboStartを繋ぐ。

f:id:Free_Gamer:20180709012501p:plain

ComboStart

True・・・変形攻撃に移行。

False・・・通常武器変更に移行。

f:id:Free_Gamer:20180709012835p:plain

Trueの先には、更にブランチが。

ConditionはTransAttackというBool値の変数になっている。

このTransAttackはTransAttack通知が来た時にTrueにセットされるようになっている。

f:id:Free_Gamer:20180709013614p:plain

つまり、

攻撃中、(ComboStart「True」)TransAttack通知(TransAttack「True」)が来た時に、指定のキー(ここではQキー)を押したら変形攻撃に移行する。

という事になっている。

 

武器の変更は以下参考に。

TransAttackがTrueの時、変形攻撃アニメーションを再生。

TransAttackがFalseの時、通常武器変更アニメーションを再生。

全体のアニメーション(Idle、Walk、Run)を変更する為、トランディションルールBool値をセット。

f:id:Free_Gamer:20180709013834p:plain

f:id:Free_Gamer:20180709014223p:plain

 

武器変更した際にモンタージュを変更した武器のものにセット。この辺は最初に載せた記事に書いてあるから参考に。

1つ違うのは、TransAttackをFalseにセットしてある点だ。

f:id:Free_Gamer:20180709014018p:plain

武器変更後TransAttackをFalseにセットしないと・・・

 

TransAttack通知が来た時、TransAttackがTrueに。

その時点でQキー押したら、変形攻撃。そのまま武器を変更。

武器を変更したのはいいが、TransAttackがTrueのままなので、以降TransAttack通知関係無しにいつでも変形攻撃が出せてしまう。

 

という事になるのだ。

 

ちなみに、少し前の画像でカスタムイベントを呼び出すための関数があった。

f:id:Free_Gamer:20180709015530p:plain

IsTransAttackというカスタムイベントを呼び出している。

IsTransAttackイベントはここにある。

f:id:Free_Gamer:20180709020000p:plain

Reset通知の処理とつながっている。

つまり、変形攻撃をした時にIsTransAttackイベントが呼び出され、コンボをリセットする処理に流れる。

ということだ。

f:id:Free_Gamer:20180709020836p:plain

 

・武器変更中、攻撃不可

簡単。

Qキー押した時、TransForm変数をTrueにセット。

f:id:Free_Gamer:20180709012501p:plain

攻撃処理に入れる。

攻撃キーが押された時、TransFormがTrueなら攻撃不可。

f:id:Free_Gamer:20180709021323p:plain

変形攻撃・武器変更終了時、TransFormをFalseにセット。

f:id:Free_Gamer:20180709021516p:plain

 

~Bool値の設定~

・TransForm

True・・・Qキー押した時

False・・・変形攻撃・武器変更終了時。Reset通知が来た時。

・ComboStart

True・・・コンボ開始時。

False・・・コンボ終了時。或いは変形攻撃終了時。

・TransAttack

True・・・TransAttack通知が来た時。

False・・・ComboStart通知が来た時。変形攻撃・武器変更が終了した時。Reset通知が来た時。

・Trans

True・・・Blade→Swordになった時。

False・・・Sword→Bladeになった時。

 

最後にBP全体を載せておく。

~武器変更~

f:id:Free_Gamer:20180709023029p:plain

f:id:Free_Gamer:20180709022528p:plain

f:id:Free_Gamer:20180709022603p:plain

f:id:Free_Gamer:20180709022618p:plain

f:id:Free_Gamer:20180709022635p:plain

f:id:Free_Gamer:20180709022649p:plain

 

~コンボ攻撃~

f:id:Free_Gamer:20180709023043p:plain

f:id:Free_Gamer:20180709023106p:plain

f:id:Free_Gamer:20180709023117p:plain

f:id:Free_Gamer:20180709023350p:plain

f:id:Free_Gamer:20180709023201p:plain

f:id:Free_Gamer:20180709023230p:plain

f:id:Free_Gamer:20180709023247p:plain

f:id:Free_Gamer:20180709023307p:plain

 

youtu.be

 

これまでで一番長い文章になってしまったかもしれない・・・。申し訳ないです。

解説動画にでもすれば良かったかなとも思ってますw

 

もし分からない所、指摘などあれば遠慮なくどうぞ!

 

それではまた!^^ノシ

クリックで遊ぼう!~OnClickEvent~

~特定のアクターをクリックした場所に

エフェクトを出す~

 

・クリックイベントを有効にする

まず、PlayerControllerクラスの作成。

名前を決める。(ここでは「Test」にした)

f:id:Free_Gamer:20180707233702p:plain

「Test」を開き、クラスのデフォルトの詳細パネル内の「MouseInterface」項目の中にある赤枠で囲った部分にチェックを入れる。

f:id:Free_Gamer:20180707234154p:plain

次に、プロジェクト設定のマップ&モードでPlayerControllerClassを先程作成したPlayerController「Test」にする。

f:id:Free_Gamer:20180708130928p:plain

これで、リックイベントが有効になった。

 

・クリックイベントを起こすアクターの作成

ActorクラスのBPを作成。

f:id:Free_Gamer:20180707234626p:plain

ここではキューブのBPを作成した。名前は好きなように。

以下の処理を組む。

f:id:Free_Gamer:20180707235636p:plain

OnClickedイベントを追加。

OnClicked・・・このアクターがクリックされたときに呼ばれるイベント

f:id:Free_Gamer:20180707234745p:plain

GetHitResultUnderCursorByChannel

TraceChannel・・・マウスカーソルのトレースチャンネル

Bool値のReturnValue・・・指定したアクターがクリックされたかどうかのBool値

f:id:Free_Gamer:20180707235006p:plain

HitResultを分解し、マウスカーソルの位置(Location)をSpawnEmitterAtLocationのLocationにつなぐ。

f:id:Free_Gamer:20180707235823p:plain

これで、クリックした場所にエフェクトを出すことが出来た!

 

・アクターのコリジョン確認

クリックイベントを起こすアクターのコリジョンのトレース応答「Visibility」が「ブロック」になってる事を確認。

f:id:Free_Gamer:20180708000103p:plain

先程、GetHitResultUnderCursorByChannelのTraceChannelは「Visibility」だったので、クリックイベントを起こすアクターのトレース応答「Visibility」はブロックにしておく。

 

・カメラの配置

クリックで遊びたいので、全体を俯瞰して見れる位置にカメラを設置。

f:id:Free_Gamer:20180708000426p:plain

カメラ視点でプレイしたいので、カメラの詳細の中の画像の項目を「Player0」にする。

f:id:Free_Gamer:20180708000823p:plain

 

・マウスカーソルの表示

レベルBPに以下の処理を組み、プレイ中マウスカーソルを表示させる。

f:id:Free_Gamer:20180708001214p:plain

 

あとは作成したBPをレベル内に配置し完了!

プレイ!

youtu.be

 

しっかりとクリックした場所にエフェクトが出てますね!

シンプルなことですが、なかなか面白いと思います!(適当)

 

それではまた!^^ノシ

 

 

奮闘記~武器変更のBP~

前回の

free-gamer.hatenablog.com

と同じような内容だが、この時の記事では主に武器のアタッチについての解説をした。

 

今回は、武器を変更するためのBPを紹介する。

Blade→Sword

Sword→Blade

の変更だ。

 

武器の変更処理。

f:id:Free_Gamer:20180705224946p:plain

指定のキー(この場合Qキー)押した時、FlipFlopの「A」に処理が流れ、Blade→Swordに変更するモンタージュを再生する。

その後、ステートマシーンでSword用のアニメーションに切り替える為のトランディションルール用のBool値をTrueにセットしている。

f:id:Free_Gamer:20180705225329p:plain

ステートマシン

f:id:Free_Gamer:20180705230822p:plain

 

Bool値をセット後、コンボモンタージュを切り替えるための処理として、

「Select」ノードを使用している。

f:id:Free_Gamer:20180705225254p:plain

IndexがTureの場合・・・TrueにセットされているSword用コンボ・ディレイモンタージュが選択される。

IndexがFalseだった場合・・・FalseにセットされてるBlade用コンボ・ディレイモンタージュが選択される。

 

再生するためのモンタージュをMontage変数に格納。

コンボモンタージュをリセットする時にセットするためのモンタージュを、「MontageSet」変数に格納。

ディレイコンボに移行するときにセットするためのモンタージュを、「DelayMontageSet」変数に格納する。

 

 

コンボモンタージュ処理。

f:id:Free_Gamer:20180705225954p:plain

モンタージュの再生処理。

モンタージュは変数に格納されてる。

 

f:id:Free_Gamer:20180705221849p:plain

 

モンタージュをリセットするためのReset通知が来た時に、コンボモンタージュを通常コンボモンタージュにセットしてからリセットする。

MontageSet変数には、

 

Blade用の通常コンボモンタージュ

Sword用の通常コンボモンタージュ

 

が、入っている。

f:id:Free_Gamer:20180705230033p:plain

 

ディレイコンボに移行する通知が来た時に、ディレイコンボモンタージュをセットしている。

DelayMontageSet変数には、

 

Blade用のディレイコンボモンタージュ

Sword用のディレイコンボモンタージュ

 

が、入っている。

f:id:Free_Gamer:20180705230358p:plain

 

これで、プレイしてみよう。

youtu.be

しっかり武器変更がされているのが分かる!

このTwinBlade(Sword)のアセットを使う際は、ぜひ参考に!

 

それではまた!^^ノシ

 

 

 

 

 

 

WatchDogs(ウォッチドッグス)のカメラハックシステムをパクろう!

ウォッチドッグスというゲームをご存知でしょうか??

分からなければggって。

 

今回は、カメラハックシステムをパクってみました!

 

TPSテンプレートを使用してます。

 

まず監視カメラの作成。

親クラスはPawnにし、名前は「Camera」で。

f:id:Free_Gamer:20180705001007p:plain

(FloatingPawnMovementは要らないです。紛らわしくってすいません。)

レベル内にCameraを配置します。とりあえず4個で。

f:id:Free_Gamer:20180705174754p:plain

 

次に、BPインターフェイスを2つ作成します。

f:id:Free_Gamer:20180705001817p:plain

1つは「CameraHack」、2つ目は「PlayerHack」という名前にしました。

 

プレイヤーBPに以下の処理を組みます。

f:id:Free_Gamer:20180705002139p:plain

LineTraceByChannelでトレース処理。

f:id:Free_Gamer:20180705002115p:plain

トレースが監視カメラにヒットした時、音が鳴るようにする。

監視カメラかどうかはタグ判定で判定してる。

サウンド再生の前にDoOnceを挟んでる理由は、

トレースがヒットしてる限り音が鳴り続けてしまうので、それを防ぐためにDoOnceを挟んで1回のみ音が鳴るようにしてます。

f:id:Free_Gamer:20180705002212p:plain

トレースが監視カメラにヒットしてる時に、左クリックすると「CameraHack」インターフェイスに処理が流れる。

f:id:Free_Gamer:20180705003002p:plain

最後に、プレイヤーのMeshのコリジョンのVisibilityを「ブロック」にしといてください。

これで、監視カメラのトレースがMeshにヒットするようになります。

プレイヤーBPはこれでOKです。

 

「Camera」に以下の処理を。

f:id:Free_Gamer:20180705003704p:plain

クラスのデフォルトの詳細パネルで赤枠の部分にチェックをつけます。

これで、Yaw回転とPitch回転のみが行われるようになる。

f:id:Free_Gamer:20180705013423p:plain

「1キー」押したとき、ズーム。「2キー」押すとズームアウト。

「1キー」も「2キー」も途中で放したらズームが止まる。

タイムラインの値でSetFieldOfViewの値を変え、ズーム・ズームアウトするようにしてます。

f:id:Free_Gamer:20180705003719p:plain

FieldOfViewのデフォルト値は「90」一番ズームした状態で「5」。

タイムラインの「0秒」の値が「90」、「3秒」の値を「5」にします。

これで、スムーズなズーム処理ができるわけです。f:id:Free_Gamer:20180705004045p:plain

 

監視カメラを操作可能にするための処理。

SetViewTargetWithBlendノードを使用し、BlendTimeに指定した秒数間カメラ遷移を行い、Possessでこの監視カメラを操作可能にする。

Delayがある理由は、SetViewTargetWithBlendのBlendTimeに関係なく瞬時にカメラが切り替わってしまう為、Delayを挟んでるのです。Delayの秒数はBlendTimeと同じ秒数で。

f:id:Free_Gamer:20180705004905p:plain

Possessで監視カメラが操作可能になった時、TrueのBool値をセットします。「Possess」という名の変数です。理由は後程。

 

トレース処理。

f:id:Free_Gamer:20180705004257p:plain

プレイヤーBPとほぼ変わりません。

プレイヤーとほかの監視カメラに対してサウンド処理を行う。

f:id:Free_Gamer:20180705004559p:plain

カメラ操作時、プレイヤーあるいはほかの監視カメラに操作変更できるようにインターフェイスを2つ用意する

「PlayerHack」と「CameraHack」です。

プレイヤーかほかの監視カメラに操作変更したあと、Possess変数をFalseにセット

 

さて、なぜこの変数を用意してるか。

ここで使うためです。

f:id:Free_Gamer:20180705005953p:plain

監視カメラが操作可能になった時、PossessがTrueになるので、Trueに処理が流れサウンド処理が可能になります。

プレイヤーか他の監視カメラに操作変更した時、PossessがFalseにセットされ、サウンド処理が行われなくなる。

なぜこんなことをしてるかは後程。

 

とりあえずこれでもう完璧なので、やってみます!

分かりやすくするため、トレースの表示をしてます。

youtu.be

完璧ですね!しっかりいつでも操作切り替えができるようになってます。

そして、レイヤーのトレースが監視カメラにヒットした時、しっかり音が鳴ってます。

監視カメラを操作してる時も、プレイヤーか他の監視カメラにトレースがヒットした時にしっかり音が鳴ってます。

ちなみに、プレイヤーカメラをちょっと横にずらしてます。

理由は、監視カメラにトレースをヒットさせたい時にプレイヤーが重なってしまって邪魔になってしまうからです。

(監視カメラ映像やUMGに若干の変更・加工がありますが、この辺は好みで)

 

さて、なぜPossess変数でブランチ処理を行っているのか。

これが無かったらこうなるからです。

youtu.be

分かったでしょうか。

こちらがカメラにトレースをヒットさせてなくても、カメラは常にトレース処理を飛ばしてるので、カメラのトレースに当たったとき音が鳴ってしまっています。

 

本来は、監視カメラにトレースをヒットさせた時のみ音を鳴らしたいのです。

これではダメなので、監視カメラを操作してないときはトレースによるサウンド処理を行わないようにしていたのです。

 

これで、ウォッチドッグスのシステムをちょっとパクることが出来ましたね!(・∀・)

 

それではまた!^^ノシ

 

 

 

 

 

奮闘記~武器を回転させながら攻撃するモーションの実装~(前回の続き的な)

前回の記事の続きみたいな感じです。

 

前回の記事で、

 

武器をくるくる回転させながら攻撃するモーションがある

 

と言いました。

 

これです。

youtu.be

これは、自分で武器を回転させる処理を組んでやっているわけではなくって、

すでに、TwinBlade(Sword)のアセットにデフォルトで入っている

 

Ik_Hand_r

Ik_Hand_l

 

に武器をアタッチさせれば、自動で武器が回転してくれるようになっています。

IKボーンにすでに武器のアニメーションが仕込んであるという感じですね。

 

しかし、Ik_Hand_lとIk_Hand_rに武器をアタッチして武器変更モーションを再生すると、前回の記事の動画のように武器と変更モーションの動きがマッチしません。

 

そもそも、IKに武器をアタッチすること自体おかしいみたいです。そして、このアセットはIKボーンに武器のアニメーションを仕込んであると言いましたが、それ自体も普通ありえないみたいです。(個人的解釈)

 

なので、IKボーンに武器を持たせるのではなく「ソケット」にアタッチするのがいいです。(ていうかそれが普通なのかな??)

 

しかし、ソケットにアタッチすれば前回の記事のように武器変更モーションがうまくいくのですが、今度は「武器をくるくる回転させながら攻撃するモーション」が出来なくなります。

 

どういうことかというと・・・

 

ソケットに武器をアタッチした場合

youtu.be

分かりやすくスローにしたのでわかるかと思いますが、

武器が回転していません。(最初に載せた動画と見比べてみると一目瞭然かと)

 

では、どうすればソケットに武器をアタッチさせつつ、武器を回転させることが出来るのか。

僕はこうしました。

 

「WeaponRotation」という名のAnimNotifyStateを作成。

ReceivedNotify_Begin

f:id:Free_Gamer:20180704190652p:plain

武器をIKボーンにアタッチしてます。

 

ReceivedNotify_End

f:id:Free_Gamer:20180704190740p:plain

武器をソケットに戻します。

 

「WeaponRotation」をモンタージュに入れる。

f:id:Free_Gamer:20180704191150p:plain

ちょうど武器を回転させてから武器を振りかぶり終わるとこまでの範囲に配置した感じです。

 

これで、

 

武器を回転させる攻撃モーションに入った時、「WeaponRotation」が呼び出され、武器がIKボーンにアタッチされ、武器が無事回転し、ちょうどモーションが終わった時に、武器がソケットに戻される。

 

という感じです!

youtu.be

しっかり回転モーションが出来てますね!

 

もし、このTwinBlade(Sword)のアセットをこれから使う人がいれば、このブログが参考になれば幸いです!

もし分からないことがあればいつでも聞いてください!

 

それではまた!^^ノシ

 

 

奮闘記~武器の変更~

最近、TwinBlade(Sword)のアセットで完全自己満足アクションゲーを作ってます。

これですね。

f:id:Free_Gamer:20180704060501p:plain

二刀流(TwinSword)と両刃一刀流?(TwinBlade)の二種類あり、もう一つはTwinBladeとTwinSwordを瞬時に切り替える変形モーションもあります。(ブラッドボーンみたいな感じ)

なかなかかっこいいモーションが多いのでお勧めですね。

 

今回は、変形モーションで苦戦した話をします。

 

※まだ試行錯誤してる段階なので、これで確定かどうかは分かりません。

 

武器を持ったプレイヤーを作成。

f:id:Free_Gamer:20180704060930p:plain

右手武器・・・Weapon_r

左手武器・・・Weapon_l

 

f:id:Free_Gamer:20180704061330p:plain

Weapon_rは「Weapon_r」という名のソケットにアタッチ。

Weapon_lは「WeaponAttach」という名のソケットにアタッチ。

f:id:Free_Gamer:20180704061555p:plain

f:id:Free_Gamer:20180704061610p:plain

イベントグラフに武器変更の入力イベントを作成。(イベントディスパッチャー)

f:id:Free_Gamer:20180704063043p:plain

 

TwinBladeとTwinSwordの「Idle_Walk_Run」を用意する。

f:id:Free_Gamer:20180704063916p:plain

 

次に、武器変更モンタージュを作成。

f:id:Free_Gamer:20180704062052p:plain

TwinBlade→TwinSword変更モーションとTwinSword→TwinBlade変更モーション両方上の画像のような作りにしました。

ChangeWeapon・・・武器を変更した際の通知

TransEnd・・・武器変更終了通知(アニメーション終了する場所に配置)

youtu.be

 

動画のように、ちょうどプレイヤーが武器を入れ変えるモーションをしているタイミングにChangeWeapon通知を配置してるのが分かると思います。

 

AnimBP

f:id:Free_Gamer:20180704062850p:plain

連打した時にモーションが荒ぶらないようにDoOnceを。

Qキーを押したときに、変更モンタージュを再生する。

変更終了時、DoOnceのResetに処理が流れる。

そして、トランディションルール用のBool値をセットしてます。

A・・・TwinBlade→TwinSword(True)

B・・・TwinSword→TwinBlade(False)

 

TwinBlade→TwinSwordトランディションルール

f:id:Free_Gamer:20180704064235p:plain

TwinSword→TwinBladeトランディションルール

f:id:Free_Gamer:20180704064301p:plain

 

Animグラフでモンタージュ通知(ChangeWeapon)を追加

f:id:Free_Gamer:20180704064413p:plain

ChangeWeapon通知が来た時に、Weapon_lを左手のソケット「Weapon_l」にアタッチしています。

もう一度通知が来た時に、「WeaponAttach」ソケットに戻してます。

これで、自然に武器を切り替えるモーションが出来ました。

 

あとは、移動しながらでも自然に変更モーションを行いたいので、モーションをブレンドします。

f:id:Free_Gamer:20180704065033p:plain

Spine_01より上のボーンに対して変更モーションを適用します。

f:id:Free_Gamer:20180704065115p:plain

 

やってみましょう!

youtu.be

しっかり変更モーションが行われてますね!

 

さて、肝心の苦戦した話をします。

実は、最初は武器をソケットにアタッチして行っていませんでした。

ボーンにアタッチして行ってました。

f:id:Free_Gamer:20180704070015p:plain

「Ik_Hand_l」と「Ik_Hand_r」ですね。

理由は、このボーンにアタッチすることで攻撃モーション時にちょっと楽になるからです。

どういうことかというと・・・

例えば、武器をくるくる回す攻撃モーションがあるのですが、この時わざわざこっちで武器の回転アニメーションを作らなくても、もうすでに「Ik_Hand_r」「Ik_Hand_l」に回転アニメーション処理が搭載されているので、このボーンにアタッチしていたのです。

 

しかし、これには問題があり・・・

「Ik_Hand_l」「Ik_Hand_r」に武器をアタッチして変更モーション(ブレンドあり)をしたらどうなるかというと・・・

youtu.be

 

見ての通り、モーションと武器の動きがマッチしてません。

試行錯誤したのですが、結果「武器のアタッチはボーンじゃなくソケットにアタッチするのが良い。」というのが分かりました。

そもそも、武器のアタッチをボーンにすること自体どうやらおかしいみたいですw

 

なので、武器のアタッチはソケットにするもの!と覚えときましょう!

 

それではまた!^^ノシ

 

 

簡単なクイックターンの実装!

かなり長くブログ出していませんでした。申し訳ございません。

なるべく毎日出すようにしてますのでこれからも眠気と戦っていきます。

 

さて、今回はバイオハザード」でもよくあるクイックターンの実装方法です!

 

今回は、FPS視点のテンプレートを使ってます。

 

プレイヤーBPはこんな感じ。

f:id:Free_Gamer:20180704034413p:plain

Qキーを押したときに、Yaw回転を強制的に変更しています。

AddControllerYawInputのValには、「360」と入れてあります。

 

こうすることで、強制的に現在向いてる方向から真後ろに向きを変えることが出来ます。

 

youtu.be

しっかり向いてる方向から真後ろに向きが変わってますね!

ただ、これだと一瞬で真後ろに向いているのでもうちょっとターンの速度をいじれないかなーと思ったのですが、今んとこ思いつかずw

なにか方法があれば教えてください。お願いします。

 

それではまた!^^ノシ