はじめに
第10回UE4ぷちコン応募作の「ぷちラン」制作メモです。
今回のはなかなかアイディアがでてこなくて、半月くらいほぼ作業してない状態でした。そんな中、「ふち」と「●」を分解する案がうかんでしまい、「その解釈はいきすぎだろう」とも言えるのですが、個人的に勝手に開き直り作業をすすめました。
キャラ(タイヤ)まわりと、コースとUI関連とに分けて書きたいと思います。
まずはキャラ関係から。
ぷちコンの応募動画はこちらです。
第10回UE4ぷちコン応募作「ぷちラン」 - YouTube
パッケージ化したゲームはこちらに上げました。
スフィアトレースで「ふち」の判定
要の「ふち」の判定は、なんだかんだ試行錯誤して、スフィアトレースを5本使うという方法で解決しました。最初は横に見えない壁をおいて、トレースをのばしてどうにかする? ということも考えてみましたが、下に向けてトレースをのばせば良いと気づいたので、それでやってみました。
デバッグ表示をすると、こんな感じになります。
真下にのばすスフィアトレースを、横にちょっとずつオフセットして配置してます。
真ん中の1本(図では白)で、コースアウトしたかを判定し、左右2個ずつで「ふち」を判定します。完全な「ふち」の判定と、ちょっと「ふち」によった(もっと寄れるとあおる)判定をしています。
真ん中のスフィアの半径は、カプセルコライダーと同じ太さにしてます。(自キャラは、キャラクタームーブメントで動かしてます)
トレースの数が多いのでマクロでまとめました。ついでに、デバッグ表示を同時に設定できるように引っ張ってきて、表示時間と長さも設定できるようにしました。
手前に置いたゲートは、コース上のスタートを通過してから開き、ゴールを通過したら閉じるようにしてます。
自分が路上にいる状態(真ん中のトレースがHit中)で、左右のどちらかのトレースが地面にHitしていないならば、「ふちにいる」と見ることができるので、そのような判定にしました。
トレースからのHitのフラグをNOTでつないでるのは、Trueの方に「良いと思える」流れを作りたかったからです。(逆にしてたら、あとで自分がみたとき混乱すると思ったので)
この方法の難点は、立体交差のコースや、分岐するコースを作るのが困難なことででした。
交差する部分でどうしても「ふちではない」と判定される瞬間が出てくるので、納得行く展開にはなりにくいなと思いました。コースデザインについてもいろいろ夢を広げていましたが、断念しました。
「ふち」にいると判定した後は、1段階加速する処理につないでいます。
加速をはじめてからタイマーをスタートして、3秒経過したらさらにもう1段階スピードアップするようにしました(エクセレ~~~ん状態です)Tickの流れの上なので、タイマー用にDoOnceを挟んで必要なときにだけ回るようにしました。
そのままだと一回「ふち」に乗ってしまえば、設定時間が経過した後かならずスピードアップしてしまうので、タイマーの動作中に「ふち」から離れたら、タイマーをクリアするように設定しました。
タイマー用のDoOnceは、「ふち」から離れた流れに入ったところでリセットするカスタムイベントを実行しておきます。これによって再び「ふち」に乗ったときにタイマーがスタートします。
キャラを動かす
もう、洒落のような思いつきなので、●(タイヤ)を走らせるのは決めてました。●がどうにかしないと「ぷち」って言いはれないので。
いつのまにか、テーマの「ぷち」のロゴにネコちゃんがついていてキャラクターっぽくなっていたので、使わせていただきました。
おなじみのネコちゃんをイラストレータでトレースして、ビットマップ化して貼り付けました。タイヤなので、文字をそれっぽく入れてみました。
最初はビークルでやってみようと設定したのですが、ボディーにサスペンションやアクスルシャフトでむすびついてないタイヤは、そりゃどっかに飛んでいきますよね~~って感じの結果でした。
ボディーを設定した1輪車ならちゃんと動いたのかもしれないですが、ビークルをつきつめるのは早々に諦めてキャラクタームーブメントで動かすことにしました。
フォワード入力はTickをつないで、スケールは1で固定です。
あとは、MaxWalkSpeedを設定してスピードを変えました。
MaxWalkSpeedのデフォルトの値の600て、何? って思い、いろいろ調べてみると、秒速600cmだろうということがわかったので、時速にしてみたら21kmくらいで、それを基準にしました。けっこう速いグレイマン。
実際自分で確かめていないのでわかりませんが、最大速度は不明です。
「加速した感」が出ればいいという考えで、デフォルトの20倍とか、40倍とかの数値を入れていた気がします。
最初は、2倍、4倍なんていう普通の設定をしていましたが、スピードが変わった感覚がまったくなかったので、極端にしました。
「ゲームがイマイチ物足りないときは、何かの要素1つを極端にする」という教え(どこかで読んだ気がする)に従いました。
アニメーションをつかって、タイヤを回転させる
キャラクタームーブメントはそのままでは見た目が回ってくれないので、スケルタルメッシュのアニメーションで回しました。
1秒で1回転するアニメーションを作り(カーブはリニアにする)、それをアニメーションBPに割り当てて、X軸のVelocityを円周で割った値を再生レートとしました。
キャラメッシュはX軸を前向きとして作成したので、回転軸はY軸になります。
実は、応募動画をとったときの回転の計算は間違ってました(直径が1.6倍くらい長くなっていた)。なんか違和感があったのはそのせいだったかもです。
あと、軸がちょっとずれているかポリゴン数が少なすぎかで、スピードをあげるとモーションブラーで大変なことになってるのですが、「なんだかガンバってる」感があったのでそのままにしました。
キャラの音にクロスフェードを使う
エンジンなんかどこにもないけど、タイヤなのでそれっぽい音を出そうと思い、サウンドキューでエンジン音のクロスフェードを設定しました。
これの設定方法がいまいちよくわからず、ビークルの設定を参考にして真似してみました。
とりあえずクロスフェードなので、設定範囲がクロスしてないと意味がないだろうというのは予想できたので、もはや雰囲気で設定しました。
変化させるパラメータは、アニメーションの再生レートなので、どのくらいの数値で変化しているのかPrintStringして走ってみて、「このくらいの範囲になり得る」とあたりをつけました。
InとOutのスタートとエンドの範囲が重なるようなイメージで設定しました。重なっていなかった場合はフェードアウトして無音に近い瞬間が出たりしました。
ピッチがあがると音量は小さく聞こえると公式ページに書いてあった気がするので、高回転部分はボリュームを大きめに設定しました。
パラメータをBPで変えるためには、Continuous Modulatorが必要らしく、それを間にはさんでいます。
Pamam Modeは、ビークルの設定がAbsoluteになっていたので、よくわからないまま真似して設定しました。
キューが設定できたら、キャラのBPの中で変化するパラメータを設定します。パラメータをAbsoluteにしていたので、ABSノードを挟んでおきます。
走ってない(演出中とか)時にはオーディオコンポーネントを非アクティブにしました。
SEとして使ったアセットのUniversalSoundFXには、500rpm毎のエンジン音のループが10段階くらいふくまれていたのですが、それらを細かく設定して変えるより大雑把にかえるほうがそれっぽくなりました。
アイドル音と、スタートからの走り出しと、あとは加速してる音だけにしました。
「ふち」に乗らない限りは、だらだらと同じ速度でゆっくり走り続けるだけですし、「ふち」に乗ったら一気に加速しはじめるので、その間をつなぐ設定はほぼ無意味でした。
最大加速度のときは、風切音のような音をミックスしてます。
おわりに
今回の作業は、自分としては行き当たりばったりで無計画にすすめてしまった感じがありました。ちょっと反省です。無計画で進んでいると、行き詰まったときに他の作業をするという発想がでてこないで、そのままズルズルとやる気が薄れた状態になったりするので良くない気がします(個人的感想です)。ある程度、やる事のイメージを大雑把につかんでおいたり、リストを作ったりするとスムーズに進むと思いました。
コースとUI編書きました。