超絶奮闘記~ブラッドボーンの変形攻撃システムパクった!~
やりたい事
・攻撃中、指定のタイミングで指定のキーを押すと変形攻撃。それ以外は通常武器変更に移行。
・武器変更中、攻撃不可
この記事と大体同じ所があるので、ある程度説明は省く。
~モンタージュ~
・コンボ攻撃、ディレイコンボモンタージュ
全攻撃アニメーションに以下の通知を入れた。
ComboStartは、コンボ開始時に配置。
TransAttackは、次のコンボに移行する通知「NextCombo⁇」通知の少し後辺りに配置。
ComboStart・・・コンボを開始した時に呼ばれる通知
TransAttack・・・変形攻撃可能な時に呼ばれる通知
・変形攻撃
ChangeWeapon・・・武器のアタッチを入れ替える通知
TransEnd・・・変形・武器変更が終わった通知
~AnimBP~
・武器変更
・コンボ攻撃
・攻撃中、指定のタイミングで指定のキーを押すと変形攻撃。それ以外は通常武器変更に移行。
ComboStart通知が来た時、ComboStart変数をTrueにセット。
武器変更処理の前に、ブランチを挟みConditionにComboStartを繋ぐ。
ComboStart
True・・・変形攻撃に移行。
False・・・通常武器変更に移行。
Trueの先には、更にブランチが。
ConditionはTransAttackというBool値の変数になっている。
このTransAttackはTransAttack通知が来た時にTrueにセットされるようになっている。
つまり、
攻撃中、(ComboStart「True」)TransAttack通知(TransAttack「True」)が来た時に、指定のキー(ここではQキー)を押したら変形攻撃に移行する。
という事になっている。
武器の変更は以下参考に。
TransAttackがTrueの時、変形攻撃アニメーションを再生。
TransAttackがFalseの時、通常武器変更アニメーションを再生。
全体のアニメーション(Idle、Walk、Run)を変更する為、トランディションルールBool値をセット。
武器変更した際にモンタージュを変更した武器のものにセット。この辺は最初に載せた記事に書いてあるから参考に。
1つ違うのは、TransAttackをFalseにセットしてある点だ。
武器変更後TransAttackをFalseにセットしないと・・・
TransAttack通知が来た時、TransAttackがTrueに。
↓
その時点でQキー押したら、変形攻撃。そのまま武器を変更。
↓
武器を変更したのはいいが、TransAttackがTrueのままなので、以降TransAttack通知関係無しにいつでも変形攻撃が出せてしまう。
という事になるのだ。
ちなみに、少し前の画像でカスタムイベントを呼び出すための関数があった。
IsTransAttackというカスタムイベントを呼び出している。
IsTransAttackイベントはここにある。
Reset通知の処理とつながっている。
つまり、変形攻撃をした時にIsTransAttackイベントが呼び出され、コンボをリセットする処理に流れる。
ということだ。
・武器変更中、攻撃不可
簡単。
Qキー押した時、TransForm変数をTrueにセット。
攻撃処理に入れる。
攻撃キーが押された時、TransFormがTrueなら攻撃不可。
変形攻撃・武器変更終了時、TransFormをFalseにセット。
~Bool値の設定~
・TransForm
True・・・Qキー押した時
False・・・変形攻撃・武器変更終了時。Reset通知が来た時。
・ComboStart
True・・・コンボ開始時。
False・・・コンボ終了時。或いは変形攻撃終了時。
・TransAttack
True・・・TransAttack通知が来た時。
False・・・ComboStart通知が来た時。変形攻撃・武器変更が終了した時。Reset通知が来た時。
・Trans
True・・・Blade→Swordになった時。
False・・・Sword→Bladeになった時。
最後にBP全体を載せておく。
~武器変更~
1
2
3
4
5
~コンボ攻撃~
1
2
3
4
5
6
7
これまでで一番長い文章になってしまったかもしれない・・・。申し訳ないです。
解説動画にでもすれば良かったかなとも思ってますw
もし分からない所、指摘などあれば遠慮なくどうぞ!
それではまた!^^ノシ
クリックで遊ぼう!~OnClickEvent~
~特定のアクターをクリックした場所に
エフェクトを出す~
・クリックイベントを有効にする
まず、PlayerControllerクラスの作成。
名前を決める。(ここでは「Test」にした)
「Test」を開き、クラスのデフォルトの詳細パネル内の「MouseInterface」項目の中にある赤枠で囲った部分にチェックを入れる。
次に、プロジェクト設定のマップ&モードでPlayerControllerClassを先程作成したPlayerController「Test」にする。
これで、クリックイベントが有効になった。
・クリックイベントを起こすアクターの作成
ActorクラスのBPを作成。
ここではキューブのBPを作成した。名前は好きなように。
以下の処理を組む。
OnClickedイベントを追加。
OnClicked・・・このアクターがクリックされたときに呼ばれるイベント
GetHitResultUnderCursorByChannel
TraceChannel・・・マウスカーソルのトレースチャンネル
Bool値のReturnValue・・・指定したアクターがクリックされたかどうかのBool値
HitResultを分解し、マウスカーソルの位置(Location)をSpawnEmitterAtLocationのLocationにつなぐ。
これで、クリックした場所にエフェクトを出すことが出来た!
・アクターのコリジョン確認
クリックイベントを起こすアクターのコリジョンのトレース応答「Visibility」が「ブロック」になってる事を確認。
先程、GetHitResultUnderCursorByChannelのTraceChannelは「Visibility」だったので、クリックイベントを起こすアクターのトレース応答「Visibility」はブロックにしておく。
・カメラの配置
クリックで遊びたいので、全体を俯瞰して見れる位置にカメラを設置。
カメラ視点でプレイしたいので、カメラの詳細の中の画像の項目を「Player0」にする。
・マウスカーソルの表示
レベルBPに以下の処理を組み、プレイ中マウスカーソルを表示させる。
あとは作成したBPをレベル内に配置し完了!
プレイ!
しっかりとクリックした場所にエフェクトが出てますね!
シンプルなことですが、なかなか面白いと思います!(適当)
それではまた!^^ノシ
奮闘記~武器変更のBP~
前回の
と同じような内容だが、この時の記事では主に武器のアタッチについての解説をした。
今回は、武器を変更するためのBPを紹介する。
Blade→Sword
Sword→Blade
の変更だ。
武器の変更処理。
指定のキー(この場合Qキー)押した時、FlipFlopの「A」に処理が流れ、Blade→Swordに変更するモンタージュを再生する。
その後、ステートマシーンでSword用のアニメーションに切り替える為のトランディションルール用のBool値をTrueにセットしている。
ステートマシン
Bool値をセット後、コンボモンタージュを切り替えるための処理として、
「Select」ノードを使用している。
IndexがTureの場合・・・TrueにセットされているSword用コンボ・ディレイモンタージュが選択される。
IndexがFalseだった場合・・・FalseにセットされてるBlade用コンボ・ディレイモンタージュが選択される。
再生するためのモンタージュをMontage変数に格納。
コンボモンタージュをリセットする時にセットするためのモンタージュを、「MontageSet」変数に格納。
ディレイコンボに移行するときにセットするためのモンタージュを、「DelayMontageSet」変数に格納する。
コンボモンタージュ処理。
モンタージュの再生処理。
モンタージュは変数に格納されてる。
モンタージュをリセットするためのReset通知が来た時に、コンボモンタージュを通常コンボモンタージュにセットしてからリセットする。
MontageSet変数には、
Blade用の通常コンボモンタージュ
Sword用の通常コンボモンタージュ
が、入っている。
ディレイコンボに移行する通知が来た時に、ディレイコンボモンタージュをセットしている。
DelayMontageSet変数には、
Blade用のディレイコンボモンタージュ
Sword用のディレイコンボモンタージュ
が、入っている。
これで、プレイしてみよう。
しっかり武器変更がされているのが分かる!
このTwinBlade(Sword)のアセットを使う際は、ぜひ参考に!
それではまた!^^ノシ
WatchDogs(ウォッチドッグス)のカメラハックシステムをパクろう!
ウォッチドッグスというゲームをご存知でしょうか??
分からなければggって。
今回は、カメラハックシステムをパクってみました!
TPSテンプレートを使用してます。
まず監視カメラの作成。
親クラスはPawnにし、名前は「Camera」で。
(FloatingPawnMovementは要らないです。紛らわしくってすいません。)
レベル内にCameraを配置します。とりあえず4個で。
次に、BPインターフェイスを2つ作成します。
1つは「CameraHack」、2つ目は「PlayerHack」という名前にしました。
プレイヤーBPに以下の処理を組みます。
LineTraceByChannelでトレース処理。
トレースが監視カメラにヒットした時、音が鳴るようにする。
監視カメラかどうかはタグ判定で判定してる。
サウンド再生の前にDoOnceを挟んでる理由は、
トレースがヒットしてる限り音が鳴り続けてしまうので、それを防ぐためにDoOnceを挟んで1回のみ音が鳴るようにしてます。
トレースが監視カメラにヒットしてる時に、左クリックすると「CameraHack」インターフェイスに処理が流れる。
最後に、プレイヤーのMeshのコリジョンのVisibilityを「ブロック」にしといてください。
これで、監視カメラのトレースがMeshにヒットするようになります。
プレイヤーBPはこれでOKです。
「Camera」に以下の処理を。
クラスのデフォルトの詳細パネルで赤枠の部分にチェックをつけます。
これで、Yaw回転とPitch回転のみが行われるようになる。
「1キー」押したとき、ズーム。「2キー」押すとズームアウト。
「1キー」も「2キー」も途中で放したらズームが止まる。
タイムラインの値でSetFieldOfViewの値を変え、ズーム・ズームアウトするようにしてます。
FieldOfViewのデフォルト値は「90」。一番ズームした状態で「5」。
タイムラインの「0秒」の値が「90」、「3秒」の値を「5」にします。
これで、スムーズなズーム処理ができるわけです。
監視カメラを操作可能にするための処理。
SetViewTargetWithBlendノードを使用し、BlendTimeに指定した秒数間カメラ遷移を行い、Possessでこの監視カメラを操作可能にする。
Delayがある理由は、SetViewTargetWithBlendのBlendTimeに関係なく瞬時にカメラが切り替わってしまう為、Delayを挟んでるのです。Delayの秒数はBlendTimeと同じ秒数で。
Possessで監視カメラが操作可能になった時、TrueのBool値をセットします。「Possess」という名の変数です。理由は後程。
トレース処理。
プレイヤーBPとほぼ変わりません。
プレイヤーとほかの監視カメラに対してサウンド処理を行う。
カメラ操作時、プレイヤーあるいはほかの監視カメラに操作変更できるようにインターフェイスを2つ用意する。
「PlayerHack」と「CameraHack」です。
プレイヤーかほかの監視カメラに操作変更したあと、Possess変数をFalseにセット。
さて、なぜこの変数を用意してるか。
ここで使うためです。
監視カメラが操作可能になった時、PossessがTrueになるので、Trueに処理が流れサウンド処理が可能になります。
プレイヤーか他の監視カメラに操作変更した時、PossessがFalseにセットされ、サウンド処理が行われなくなる。
なぜこんなことをしてるかは後程。
とりあえずこれでもう完璧なので、やってみます!
分かりやすくするため、トレースの表示をしてます。
完璧ですね!しっかりいつでも操作切り替えができるようになってます。
そして、プレイヤーのトレースが監視カメラにヒットした時、しっかり音が鳴ってます。
監視カメラを操作してる時も、プレイヤーか他の監視カメラにトレースがヒットした時にしっかり音が鳴ってます。
ちなみに、プレイヤーカメラをちょっと横にずらしてます。
理由は、監視カメラにトレースをヒットさせたい時にプレイヤーが重なってしまって邪魔になってしまうからです。
(監視カメラ映像やUMGに若干の変更・加工がありますが、この辺は好みで)
さて、なぜPossess変数でブランチ処理を行っているのか。
これが無かったらこうなるからです。
分かったでしょうか。
こちらがカメラにトレースをヒットさせてなくても、カメラは常にトレース処理を飛ばしてるので、カメラのトレースに当たったとき音が鳴ってしまっています。
本来は、監視カメラにトレースをヒットさせた時のみ音を鳴らしたいのです。
これではダメなので、監視カメラを操作してないときはトレースによるサウンド処理を行わないようにしていたのです。
これで、ウォッチドッグスのシステムをちょっとパクることが出来ましたね!(・∀・)
それではまた!^^ノシ
奮闘記~武器を回転させながら攻撃するモーションの実装~(前回の続き的な)
前回の記事の続きみたいな感じです。
前回の記事で、
武器をくるくる回転させながら攻撃するモーションがある
と言いました。
これです。
これは、自分で武器を回転させる処理を組んでやっているわけではなくって、
すでに、TwinBlade(Sword)のアセットにデフォルトで入っている
Ik_Hand_r
Ik_Hand_l
に武器をアタッチさせれば、自動で武器が回転してくれるようになっています。
IKボーンにすでに武器のアニメーションが仕込んであるという感じですね。
しかし、Ik_Hand_lとIk_Hand_rに武器をアタッチして武器変更モーションを再生すると、前回の記事の動画のように武器と変更モーションの動きがマッチしません。
そもそも、IKに武器をアタッチすること自体おかしいみたいです。そして、このアセットはIKボーンに武器のアニメーションを仕込んであると言いましたが、それ自体も普通ありえないみたいです。(個人的解釈)
なので、IKボーンに武器を持たせるのではなく「ソケット」にアタッチするのがいいです。(ていうかそれが普通なのかな??)
しかし、ソケットにアタッチすれば前回の記事のように武器変更モーションがうまくいくのですが、今度は「武器をくるくる回転させながら攻撃するモーション」が出来なくなります。
どういうことかというと・・・
ソケットに武器をアタッチした場合
分かりやすくスローにしたのでわかるかと思いますが、
武器が回転していません。(最初に載せた動画と見比べてみると一目瞭然かと)
では、どうすればソケットに武器をアタッチさせつつ、武器を回転させることが出来るのか。
僕はこうしました。
「WeaponRotation」という名のAnimNotifyStateを作成。
ReceivedNotify_Begin
武器をIKボーンにアタッチしてます。
ReceivedNotify_End
武器をソケットに戻します。
「WeaponRotation」をモンタージュに入れる。
ちょうど武器を回転させてから武器を振りかぶり終わるとこまでの範囲に配置した感じです。
これで、
武器を回転させる攻撃モーションに入った時、「WeaponRotation」が呼び出され、武器がIKボーンにアタッチされ、武器が無事回転し、ちょうどモーションが終わった時に、武器がソケットに戻される。
という感じです!
しっかり回転モーションが出来てますね!
もし、このTwinBlade(Sword)のアセットをこれから使う人がいれば、このブログが参考になれば幸いです!
もし分からないことがあればいつでも聞いてください!
それではまた!^^ノシ
奮闘記~武器の変更~
最近、TwinBlade(Sword)のアセットで完全自己満足アクションゲーを作ってます。
これですね。
二刀流(TwinSword)と両刃一刀流?(TwinBlade)の二種類あり、もう一つはTwinBladeとTwinSwordを瞬時に切り替える変形モーションもあります。(ブラッドボーンみたいな感じ)
なかなかかっこいいモーションが多いのでお勧めですね。
今回は、変形モーションで苦戦した話をします。
※まだ試行錯誤してる段階なので、これで確定かどうかは分かりません。
武器を持ったプレイヤーを作成。
右手武器・・・Weapon_r
左手武器・・・Weapon_l
Weapon_rは「Weapon_r」という名のソケットにアタッチ。
Weapon_lは「WeaponAttach」という名のソケットにアタッチ。
イベントグラフに武器変更の入力イベントを作成。(イベントディスパッチャー)
TwinBladeとTwinSwordの「Idle_Walk_Run」を用意する。
次に、武器変更モンタージュを作成。
TwinBlade→TwinSword変更モーションとTwinSword→TwinBlade変更モーション両方上の画像のような作りにしました。
ChangeWeapon・・・武器を変更した際の通知
TransEnd・・・武器変更終了通知(アニメーション終了する場所に配置)
動画のように、ちょうどプレイヤーが武器を入れ変えるモーションをしているタイミングにChangeWeapon通知を配置してるのが分かると思います。
AnimBP
連打した時にモーションが荒ぶらないようにDoOnceを。
Qキーを押したときに、変更モンタージュを再生する。
変更終了時、DoOnceのResetに処理が流れる。
そして、トランディションルール用のBool値をセットしてます。
A・・・TwinBlade→TwinSword(True)
B・・・TwinSword→TwinBlade(False)
TwinBlade→TwinSwordトランディションルール
TwinSword→TwinBladeトランディションルール
Animグラフでモンタージュ通知(ChangeWeapon)を追加
ChangeWeapon通知が来た時に、Weapon_lを左手のソケット「Weapon_l」にアタッチしています。
もう一度通知が来た時に、「WeaponAttach」ソケットに戻してます。
これで、自然に武器を切り替えるモーションが出来ました。
あとは、移動しながらでも自然に変更モーションを行いたいので、モーションをブレンドします。
Spine_01より上のボーンに対して変更モーションを適用します。
やってみましょう!
しっかり変更モーションが行われてますね!
さて、肝心の苦戦した話をします。
実は、最初は武器をソケットにアタッチして行っていませんでした。
ボーンにアタッチして行ってました。
「Ik_Hand_l」と「Ik_Hand_r」ですね。
理由は、このボーンにアタッチすることで攻撃モーション時にちょっと楽になるからです。
どういうことかというと・・・
例えば、武器をくるくる回す攻撃モーションがあるのですが、この時わざわざこっちで武器の回転アニメーションを作らなくても、もうすでに「Ik_Hand_r」「Ik_Hand_l」に回転アニメーション処理が搭載されているので、このボーンにアタッチしていたのです。
しかし、これには問題があり・・・
「Ik_Hand_l」「Ik_Hand_r」に武器をアタッチして変更モーション(ブレンドあり)をしたらどうなるかというと・・・
見ての通り、モーションと武器の動きがマッチしてません。
試行錯誤したのですが、結果「武器のアタッチはボーンじゃなくソケットにアタッチするのが良い。」というのが分かりました。
そもそも、武器のアタッチをボーンにすること自体どうやらおかしいみたいですw
なので、武器のアタッチはソケットにするもの!と覚えときましょう!
それではまた!^^ノシ
簡単なクイックターンの実装!
かなり長くブログ出していませんでした。申し訳ございません。
なるべく毎日出すようにしてますのでこれからも眠気と戦っていきます。
さて、今回は「バイオハザード」でもよくあるクイックターンの実装方法です!
今回は、FPS視点のテンプレートを使ってます。
プレイヤーBPはこんな感じ。
Qキーを押したときに、Yaw回転を強制的に変更しています。
AddControllerYawInputのValには、「360」と入れてあります。
こうすることで、強制的に現在向いてる方向から真後ろに向きを変えることが出来ます。
しっかり向いてる方向から真後ろに向きが変わってますね!
ただ、これだと一瞬で真後ろに向いているのでもうちょっとターンの速度をいじれないかなーと思ったのですが、今んとこ思いつかずw
なにか方法があれば教えてください。お願いします。
それではまた!^^ノシ