大福未来研究所

大福フューチャーラボのなんか色々なアレ。プログラミング(C++/DirectX/Unity/UE4あたりやりたい)とか音楽とかの。

【UE4】UE4でシンプルな音ゲーを作ろう:その3

この記事は、「ひとりUE4 Advent Calendar 2017」の12/5担当記事です。
qiita.com

(あくまでも音ゲーとしての実装は自己流のものですので、
実際はもっと効率のいい組み方があったりすることもあると思いますが、
そういう場合は是非ブログ等でその技術をシェアしていただけるととても助かりますので
何卒よろしくお願いします……)


*第3回、いよいよ譜面が動く時。
というわけで前回の続きです。
※前回の記事に訂正点がありましたので、まだ確認してない方は前回の記事を再度確認して下さい。


シーケンスラインが出来た、
譜面も配置できた、
となれば次は、譜面を流してみるところからですね。


譜面が流れるようにする、と言っても、前回の記事を見れば分かる通り、
今回は「シーケンスラインActorそのものが移動することで、その子供になっているオブジェも揃って移動する」という仕組みにしています。
ですので、やるべきことは「シーケンスラインを動かす」ということですね。

現在、シーケンスラインはこのような構成になっていました。
f:id:dfk_ohnuma:20171205013108p:plain
ということはScene1を動かせば、その下にあるNoteたちは全て動いてくれます。
曲が始まったかどうかを判断するIsPlayingというbool型変数を用意して、組んでみるとこうなります。
f:id:dfk_ohnuma:20171207022852p:plain
BaseVelocityは前回も出てきた基本秒速です。
これにDeltaSecondsと-1をかけているので、Scene1とそこにひっついたオブジェたちは秒間(-基本秒速)だけX方向に移動します

もちろん、プレイ中かどうかを示すフラグが出来た以上は、
f:id:dfk_ohnuma:20171207023101p:plain
曲開始時の処理もお忘れなく。

これで、何らかのボタンで6レーン分のStartSongを呼び出してやることで、

t.co
このように、奥から手前まで譜面が流れてくるようになりました。


それでは次に、プレイヤーが入力する部分を作ります。


入力はキーバインド

f:id:dfk_ohnuma:20171207024201p:plain
まずはインプット用のBPを作ります。
これを使って……

f:id:dfk_ohnuma:20171207024248p:plain
まず全てのシーケンスラインを取得して、配列SeqLineへ入れます。
6つのシーケンスラインにそれぞれ「Line1~Line6」みたいな感じでタグを付けておいて、それを引っ張ってきています。
そうすることで順番通りに配列に突っ込めるはずです。


次に入力ですが、今回は直接キー入力イベントを作るのではなく、
キーバインド」を使ってみましょう。
キーバインドは、「Aキー」とか「ゲームパッドAボタン」とかのキー入力イベントの代わりに、
「攻撃ボタン」などの自由な名前で入力イベントを作り、それに対応するキーを登録することで、
「AキーかゲームパッドAボタンで攻撃」という場合に「攻撃ボタン」イベントだけで処理を作ることが出来たりする便利な機能です。
こうして書いていてもよくわからないと思うので、コチラをご覧ください。


「プロジェクト設定→インプット」で出てきます。
f:id:dfk_ohnuma:20171207024744p:plain
ここの「アクションマッピング」を開いて
f:id:dfk_ohnuma:20171207024823p:plain
このように好きな名前のインプットイベントと、
それに対応させるキーの登録を行います。


こうすることで、ブループリントの中で
f:id:dfk_ohnuma:20171207024923p:plain
先程登録したキーバインド用のインプットイベントを生成することが出来るようになります。


これを使うことで、キーボードでもゲームパッドでも同じイベントを呼べるようになりますし、
何かの事情があって攻撃ボタンなどに割り振るボタンが変更されたとしても、
BP上では攻撃ボタンのイベントはそのままにしておけるのです。


というわけでそれぞれのラインへ入力通知を送る用に組みました。
f:id:dfk_ohnuma:20171207025144p:plain
ここにある「PushKey」「ReleaseKey」イベントは、
シーケンスラインのアクタの中に作ったカスタムイベントです。
f:id:dfk_ohnuma:20171207025352p:plain


ここから判定のシステムを作っていくわけですが、
今日の部は一旦ここでおしまいです。

最後に

キーバインドを活用することで、複数のデバイス入力に対応させることが出来ます。
これはぜひ覚えておくと良いと思います。
今回で譜面が奥から手前へ流れるようになりました。
いよいよ次は入力とそれに対する判定の部分です。
ここができれば音はまだ鳴らないけど音ゲーらしさは出てくると思います。

今回の記事はここまでです。お疲れ様でした。
明日(と言っても今日ですが)は第4回です。
よろしくお願い致します。