気づけばツール漬け

3D,2Dのツールを色々使ってみた記録を書いていきたいです。

「ぷちラン」制作メモ 拡張編

f:id:mi-zmix:20181109220736p:plain

はじめに

第10回UE4ぷちコンに応募した「ぷちラン」を少し拡張して、コース選択ができるようにしてみました。
いきあたりばったりな感じで作っていたものを、一回整理してから拡張しました。
「これがリファクタリングというものか!」と感動しつつ、かなり勉強になったと思います。やってよかったです。

※コースを走っている間、CTRL+Rキーを押すと、強制的にタイトルに戻るアクションを追加しました。
たまに、「何度も落ち続けてゴールに進めない」という状況に陥ることがあります……。その時は上記操作をしてください。

ダウンロードはこちらから

drive.google.com



前回の記事はこちらです

「ぷちラン」制作メモ コース・UI編 - 気づけばツール漬け

「ぷちラン」制作メモ キャラ編 - 気づけばツール漬け

 

作業と失敗のメモ

作業中につまってしまった部分メモです。

レベルの名前は2段階に変換ノードが必要だった

各コースはサブレベルにして、レベル名はEnumでまとめました。
タイトルで選択されたボタンによって、選択したレベル名をGameModeで設定し、リザルトが終わるまで保持します。同時にパーシスタントレベルにも送ります。

f:id:mi-zmix:20181109223809p:plain

LoadStreamLevelにわたすときのname型の文字が、Enumから直接では取れませんでした。
調べると見つかりました。

Enum型からName型への変換 - 妹でもわかるUnrealEngine4

ハマケン100%開発: UE4: Enumから文字列に変換する時の注意点
一度Stringにしてからname型にするという2段階に変換ノードつなぐマクロを作って、レベル名を渡すようにしました。

f:id:mi-zmix:20181110181326p:plain

リスタート時はシーケンサーもタイムラインも、スタートフレームに戻さないとだめだった

前のはシーケンサーをサブレベルに置いてサブレベルのBPでうごかしていたのですが、それをやめてパーシスタントレベルに置く形に変えました。
コースに入ってからのキャラの演出は、シーケンサーではなく、タイムラインノードで動かすことにしました。スタート位置とゴール位置は、コースによって変わっても大丈夫なようにしたいと思ったので、タイムラインノードで位置の値を変えて、相対座標で動かすようにしました。
移動も回転もZ軸しか動いてないので、強引ですがこんな感じで。

f:id:mi-zmix:20181109225321p:plain

リファクタリングで流れを整理したおかげで、リスタートの処理を難なく入れることがき……るはずでしたが、演出がうまく動きませんでした。
シーケンサーはパーシスタントレベルで処理することにしたので、コースのサブレベルをアンロードしても、シーケンサーは最終フレームを保持したまま残っていました(終了時にステイするっていう設定してましたし)。その状態で、リスタート時にシーケンサーのプレイを呼んでも、最終フレームがプレイされるだけでした。
タイムラインのノードも同様に、最終フレームで止まったままでした。
とういうことで、シーケンサーは0の位置から開始するノードをはさんでから、プレイノードへ流れるようにしました。

f:id:mi-zmix:20181109225629p:plain
タイムラインを使った方は、リスタート時にフロムスタートに流すようにしました。(全部フロムスタートで良いかもですが)

ウィジェットのリムーブわすれてた

タイトル画面で各コースごとのタイムを並べて表示するようにしました。
3コースしかないのでVerticalBoxで3個並べてつくってみたのですが、「コースが増えても大丈夫なように作るとイイんじゃね?」とか欲がでて、子ウィジェットを配置するという方法にしました。
ウィジェットを並べるまでは良かったのですが、このゲームでは、CTRL+Mキーを押した時タイムを適当な値で上書きしてセーブするようにしています。
前のはバインドで値を取得していましたが、「ウィジェットのバインドは使わずに、イベントドリブンにするのがいいらしいぞ」と聞いた(読んだ?)事に影響され、上書きセーブするイベントを呼ぶついでに、タイトル画面の表示も更新するイベントを設定しました。
が、単純に同じ処理をイベントで呼び出して実行すると、子ウィジェットが増えました。3個の表示が6個になりました。
更新するまえに、現在表示中の子ウィジェットを全部リムーブしてから並べ直さないとダメなのでした。

f:id:mi-zmix:20181109230111p:plain

セーブデータの中にある配列をループで読み込むマクロを作って内容を取り出しました。内容の更新時は別のマクロにして、ウィジェットのリムーブを入れました。

f:id:mi-zmix:20181109230250p:plain

おわりに

締切がないと、1日2日置いてから、「あ、これはこうした方が良いんじゃ?」という気付きがどんどん出てくるのでキリがなかったです。やってみて失敗して、またやって成功してを繰り返すのは、やはり楽しいですが。
シニアコースは、最初に作ったのはイライラするだけの物になっちゃったので、けっこう時間をかけて調整しました。終わりなき調整をやってたのですが、いったん区切りにするべくリリースしました。