最近、振り返りは note でやってたんだけど、自分用振り返りメモ的な要素が強いのでホントはこっちでやるべきだったよな~。
『ステッピービート』を公開しました。第29回Unity1週間ゲームジャム お題「かわる」参加作品です。リズムゲームに挑戦してみました。「かわる」要素どこ?えーっと……遊ぶ度に配置が変わる!https://t.co/A2hBJj1JJA pic.twitter.com/gOMdqBRnga
— がむしゃら (@GMshara_) March 24, 2024
こういうゲームを作った。ので、振り返る。
参加前に考えていたこと
前回の参加から、unity1week は技術的になにか新しいことをやる場所にしている。しかし、無料で体験できるチュートリアルは限られている。今回はどうしようか……とボーッと考えていたが、なんとなくリズムゲームを作ってみたくなった。unityroom で遊ぶリズムゲーム、だいたいあんまり気持ち良くない気がしていて、自分で作って確認してみたかった。あと、近頃まっともぉんさんがリズムゲームでランキング無双してるし、オクトレインさんもリズムゲーム推しだし。なんかリズムゲーム気運が高まっていた。
制作進行
制作の進行をざっくりと記述する。
0日目
作るモノ決まってたが、フライングせずに我慢した。偉い。ビートタイミングの算出ができればよい、という目算だったんだけど、それすらできずに発狂。一回諦める。
1日目
まっともぉんさんに「自分の思う自由な作り方で実装していいんですよ」と言われて少し落ち着いた。なんか漠然と“すごいげーむ”を作ろうとしてたな。そもそもアホで学も無いんだからできなくて当たり前だった。と、気持ちを切り替えてオクトレインさんが紹介してくれた記事とじっくり向き合う。お二人に感謝……
2日目
だいたい動くようになってきたが、WebGL(unityroom)でBGMループさせてるとズレてくる問題が発覚。エディタだとちゃんと動くんだけどな~。これの原因究明するのに時間取られるのイヤだったのでループ無しの一発再生にすることに決める。
「あれ?ひょっとしてこのゲーム面白い?」という錯覚を得るところまでは進んだ。「こっから幅作って磨いていくのめんどくせえ~~」と思いつつ2日目終了。
3日目
だらだら敵を作って終了
4日目
「金曜日までに出せる状態にしたい」といつも達成できないこと言っててよくなかったので今回こそやったるぞ!と気合い入れた。開始処理、リスタート処理、クリア処理、クリア演出少しだけ実装。まぁ結局出せる状態一歩手前ぐらいまでしか行けなかったんですけどぉ……
5日目
敵をだらだら作る。敵配置の指針と、そのための基盤を制作。重み付け抽選処理の実装に挑戦してみた。といっても、写経しただけなんだけど。
6日目
なんとなく敵配置から逃げて別の作業を進める。ラッキーガードとか、ライフ拾えるようにしたりとか。で、逃げ切れなくなったので、敵配置。
7日目
必要なモノがすべて見えたのでひたすら作業。が、終盤でやっぱり足りなくて終わった。
総評すると、結構よかったんだけど、まだあと一歩足りないって感じだった。4日目にゲームスタート処理やリスタート、クリア処理とか作ったところが高評価。シンプルに偉いよ。全体的に今回は手を付けていないところに手を付ける、というスタンスで一気に突っ走った。これは今後もより推進していきたい。
これができた要因としてはやっぱり絵にかける時間を極限まで減らしたのが大きいと思う。当然、クオリティはガタ落ちしてる。でも他のところにしっかり手が入ってるので、体感としてクオリティは上がってるんだよな。でも遊ぶ人はそうは捉えてくれないだろうな~~。でもこれはよかったので今後もやっていきたい。絵は速度全振りでこなす。
技術的なこと
技術的なことについて記述する。
ビートタイミング
前述のとおり、最初分からなくて発狂した。なので、「とにかく小さなことでいい」「簡単なことでもいいからやろう」そういう気持ちで臨んだ。大袈裟だな。オクトレインさんの紹介してくれた記事を参考にほぼ写経したみたいなもんだから大したことしてない。
こちらの記事。たなかゆう先生に感謝!
重み付き抽選
わりと重要スキルだと思うんだけど未だに使ったことなかった。ので、挑戦してみた。
まぁ写経しただけなんだけども。大したことまったくしてないな!とにかく手を付けたことを評価したい。自分に甘く。
ゲームの中身
『Steppy Knight』と『Crypt of Necrodancer』のパクリ。で終わりなんだけど、細かいところは書いておくか。
楽曲への抵抗
「曲のループ再生無理そう→一発流すだけにするか」にしたときに、楽曲時間も相当延ばす必要があった。「そんな長い曲作れないからどうする?→ナシにするか!」という逃げ。思考を変えて、【良い曲ならよいリズムゲームになる】【なんだかんだで曲が大事】という方程式を破れないかと考えた。いや、そもそもそんな方程式があるかは置いといて。作曲できないのに曲に頼らず、「いい曲ならもっとイケたのに」はダサいし、最初から頼らない作りにしてみたかった。まぁふつーに無茶だったね。
リズムと入力と出力
リズムそのままに処理をするとなんとなく早すぎる感覚があった。気持ちよくない。動画先行の原則とか言われてるけど、実際は逆のように感じた。基本的に自分の感覚を信じて調整することにした。正確なビートタイミングから少しだけ遅らせて各種見た目の演出をするようにしている。こっちのほうが気持ちいい。と感じた。おそらく音の響きかたや見た目も影響するだろうから、必ずしも遅らせたほうが気持ちよく感じるとは限らんと思う。そもそも今回の仕様で気持ちよくなってるのかどうかすら怪しい。フィードバックが欲しいところだけど、期待できない。全体的にしょぼすぎて遊んでもらえない。そういう感想が貰える域に達してない。
というわけで基本的に演出……というか、ゲーム進行がビートに合わせて進むようになっている。で、問題はプレイヤーの入力をどう処理するか。たとえばビートのタイミングのみ入力を受け付けると当然、クッソ難しくなる。じゃあ前後に受け付け時間を延ばす?などなど考えるポイントになるわけだけど、今回は次のようにした。
- 入力受付時間をビートの前と後ろ両方に延ばす
- ビート前入力ならビート時に処理
- ビート後入力なら即時反応
事前入力だと、実質入力遅延になっているわけだけど、そこまで違和感が出ない。リズムパワー。とはいえこれで不満があるかどうかはやはりプレイヤーの反応を貰わないと分からない。でも貰えなさそう。ガッデム。もうちょい猶予を足してもよかった気はする。後ろだけもう少し延ばすとか。とはいえ足しすぎると前のリズムとバッティングしそうな気がする。このやりかたには限界がある。めちゃくちゃ早いリズムとかどうするんだ。BPMに応じて入力猶予も変化させる感じか?
ぴったりリズムに合わせるならやはり事前入力のみで遅れた入力は容赦無く切り捨てるのも選択肢としてアリな気はする。正直やりたかったかも。でも遊びづらさは否めないな~。
入力処理はできたが、じゃあ結果処理はどこでやればいいんだ?と思って「あ、そうか。ビートとビートの合間でやればええんやん!」と気付けた。ここで言うビートは専門用語で表拍で、合間っていうのは専門用語で裏拍と言うらしい。たぶん。大した思いつきではないけど、問題を認識してから解決方法がパッと出てくるの気持ちいい。今回のゲームシステムだとこれで雑に処理できたが、もっと複雑なゲームならそれなりの処理をする必要があるだろうな。プレイヤーが先に行動してから敵の行動、ただし基本的に見かけ上は同時行動してるように見せる、みたいな。そういうのめんどい、というかできなさそうだったのでスルーできる仕様にしたわけだけど。
作ってるときもこれ書いてるときも思ったけど、ネクロダンサーまた遊んでちょっと仕様を調べたい。
ベースの処理
さっき書いたとおり、敵の居るマスに攻撃してあーだこーだ、みたいな処理ができなさそうだったので、同じマスに居たら──重なったら処理、という形式に。重なったら必ず倒せる。赤いときに重なったらダメージ。これで成立する。副作用として、プレイヤー以外のオブジェクトが同じマスに重なることができない。不可能ではないけど、分かりづらくなる。
攻撃処理とかめんどそうだな~って思ってすぐこれが出せたのは嬉しい。これも別に大した思いつきではないんだけど、解決できることに喜べる。でも結局コライダーで判定する実装を雑にやったので、攻撃判定とかもそれでやれた気がする。一応、倒す→敵が居たマスに進むじゃなくて、重なって倒す→進むなのでテンポはよくなってるかも。大して変わらんか。ちなみにこの辺の雑な実装のせいでたまにバグってる。アカンやん。
プレイヤーアクション
根本レベルで考えるつもりは無かったので、左右移動はまぁとくになにも考えずに入れた。しゃがみ→ワープはカッコいいと思って入れた。おかげでスルーしまくれるようになってしまった。その場ジャンプは待機アクションとも言える。ただ、苦手な人もタイミングしっかり見て入っていけるように無入力でも問題無いようにした。
ジャンプの存在意義薄すぎ問題に関しては、浮いたコインを導入してみた。コインに意味ほとんどねえが?ワープでスルーできちゃう問題は、①スルーしにくい配置にしちゃう②敵を倒すとおトクで問題軽減を図ったけど、根本的には「別にスルーできてもええか」の精神。削除も考えたけど、その時点でシールダー作っちゃってて気に入ってたから強行。こういうエゴがゲームをおもんなくする。でも1週間でボツとかしてる場合じゃないのはある。まぁ、最初からちゃんと先を読んで進めろと言われたら黙るしかない。
敵配置
敵自体はほぼ全部 Steppy Knight のパク…リスペクトだからどうでもいいとして。敵配置について。最初は一種類ずつ見せる方向で考えてたんだけど、それっておもんないな?と感じ始める。作っててつまんない。お行儀よすぎる。最初は分かりやすいけど何回も遊ぶには適していない。チュートリアル問題。ざっくりと起承転結で考えた。
①最初の弱めの敵
②ワープチュートリアル
③ワープ必要敵+最初のグループ
④強い敵グループ紹介
⑤全部盛り
⑥フィニッシュラン
にした。各エリアのマス数をテキトーに決めて、遊んでみて「ここ長いな」って思ったところを削っていった。強い敵グループ紹介のところ、もう5マスは削っていいな。
情報伝達
今回、欲しいんだけど、スムーズに伝えるのが難しい仕様を思い切って隠してみた。消すんじゃなくて隠す。敵を倒す、コインを取る、この二つをしてるとラッキーガード率が上がってたまにノーダメージになる。最初はこれもUI表示しようとしてたんだけど、画面がごちゃつくし把握しづらいと思ってやめた。ラッキーガード率は敵を倒すのとコインを取るのに意味を作りたかったのと、苦手なプレイヤーへの配慮。諦めずにプレイしてたらクリアできる可能性が高まる。ただ、これプレイヤーに伝えないんだったらほぼ意味無いとは思う。だからただの力不足なんだけど、消すよりもこうやって隠したほうが無駄にならなくて悪くない気がしてる。あと時間切れ。タイムリミット表示は無しにした。
最初は説明文とかUIとか表示しようと思ってたんだけど、いずれもリズムにノリながら把握するの無理だなと思ってやめた。ちゃんとやるんだったら専用のチュートリアルシーケンスがどうしても必要になる気がする。本編に組み込むのはさすがに無茶かも。専用のチュートリアルシーケンスを用意するのは1週間では無理というかやりたくない。そもそも、チュートリアル作るの嫌いなんだよなー。あまりよくない。そういうブランディングをしたいというか、わざわざ説明する必要の無いゲームデザインとレベルデザインにしたい。技量不足なのにそんな上級者デザインすんなってハナシではある。
間口を広げる処置
今回は制作進行がイイ感じだったので、間口を広げる処置をいくつかやった。普段ならできてない。死んだ位置にライフを落として次回プレイで拾える。「前回死んだところ越えた!」をできるように。あと死亡時に進捗表示。これも継続率を上げてるといいなー。クリア率高いといいなーと思いつつ、それを確認する術は無い……まぁ自己満足だからいいや。
あとは最初からビートタイミングで無操作でもペナルティ無しにしたりとか。時間制限も一応あるんだけど、これを比較的長めに取った。
理由付け
なんで旗まで行くのか、行くとクリアなのか。なんでリズムに乗るのか。辺りを紹介文でちゃんと説明した。ふざける気持ちもありつつ、わりと真面目に書いた。つまり真面目にふざけた。時間制限の存在も書いといた。読む人いねえだろ。クリアしたときに褒めてくれる人も用意。無味乾燥なゲームにならないように少し配慮した。
ハードモード
ハードモード作れるのでは?と思って作った。イケたわ。主題としては無操作とリズムズレにペナルティを与える。だったけど、ついでにBPMも速くしてみた。
反省点
ざーっと書いてくか。
- 効果音もっと凝るべきだった。移動効果音、コマンド入力みたいにして音の変化を入れる案あったのに。よい悪い別にして試して確認すべきだった。優先度ミスってる
- コイン取得とかライフ取得とかもちょい長過ぎてリズムに合ってない
- 入力が早すぎたときにノーツを止める演出(ネクロダンサーと同じ)ヤツ入れたかった。これも優先度高い。大ミス
- 出力判定周りちょっとバグってるときある。雑な実装してるから……
- 背景、というか前景?画面下側がスカスカになってしまった。しばらく弄って足場を伸ばすのがよさそうだと気付くところまでは行けたんだけどそこで時間切れだったので戻すハメに
- トゲが飛び出てる感じ無い
- パーティクル微妙。パーティクルという選択自体が微妙?
- てかコイン取得にパーティクル付けられてねえじゃん
あらためて思ったが、慣れてないことはそれ自体に時間がかかるし、どうにかしようとしてムキになって時間を取られる。手を付けられたことは評価したい。でもまだまだ優先度決定が甘い。あと、引き出しがやっぱり少ないね。テキトーにとりあえずパーティクル、ってやってるけどその中でももう少し幅を作ったり、手札を増やしたりしたい。今回はパーティクルが全然合ってないゲームだったので、その時点でもう手詰まりになってる。
満足点
満足点もざーっと書いてみる。
- 制作の全部。めっちゃ満足してる
- 自分が何回も遊んでも楽しい
- クリア率を高める工夫を入れられたことに満足してる。いっつも突き放しすぎた難易度にしてるから。進捗表示、ライフ残る、ラッキーガードとか良し悪しはともかく入れられたことにすべて満足してる
- とはいえフィードバックが無いとこれが上手くいってるかどうか分からないんだけど……
- ハードモード入れられた!
- 完璧ではないけどレベルデザインにちゃんと時間使えた
- 背景に挑戦した。偉い。とにかく手を付けたことを評価したい
- ちゃんと理由付けできた。無理矢理だとしても、今までずっとできてなかったところに手を付けられたことをやっぱり評価したい
超満足!いろんなところに手を付けられた!ゲーム制作楽しい!作ったゲームが楽しい!完璧!偉い!ゲーム作っても誰も褒めてくれないから自分だけは自分のことを褒めておいたほうがいい。まだ評価期間一日目だけど、なんとなくフィードバック薄そうな気がしてるのでより強くそう思う。こんなことしてると自分のことがひたすら可哀想になってくるけども!悲観して沈むよりも独り善がりに満足してるほうがイイ!ハズ!たぶん。ゲーム内容がほとんど厚顔無恥なパクリだけども!それでも楽しかったし楽しいし満足してる自分がいる。まぁでもゲームが酷評されたらすぐ落ち込んで「最悪」「こんなゲーム作るんじゃなかった」とか言い出すからな。
追記:ロスタイム開発
ロスタイム開発やらんぞと決めてるのに結局やっちゃった。でも満足したのでOKです。自分が気に入ってるので自分用にビルドしてもっておこう→ならちょっと弄るか、の流れ。コライダーで判定してるせいでバグってるのを直そうかなと調査してて、急に我に返って「いやロスタイム開発ダメだろ!」でいったん諦めた。
しばらくして気になってきてやっぱり直すことに。というか、コライダーに頼らない実装方法を思いつきつつあったので、それを試してみたくなってしまった。で、最終的にできたと思う。一回なんか盛大にバグってた気がするけどアレは幻覚だったんだろうか。なんにせよ、これでしっかりバグも直ってちゃんとしたゲームになったと思う。あと、強敵グループのところ5マス削ったりした。もう5マス削ってもいい気がするけど……うーん、まぁええか!
結局サウンド周り弄ってないのはどうなんだ?まぁええか。
追記その2:フィードバック
評価期間終わったので少し追記。コメントしてる人の何人かはクリアしてくれてるっぽい。「成人しました!」って報告してもらえるのめちゃ嬉しい。ちゃんとフレーバーテキスト読んでくれてる。アサキさんの配信を見た感じ、かなりよかった。ほぼ理想的な遊びかたしてくれてる。動くスライムが手強い敵と思われるのは、深く想定はしてなかったものの、プラスになってそう。強い敵枠として作ったものの、実際はそこまで強くない。ただ、強いと錯覚してもらうのはわりと理想形なんだよな。少なくとも観測範囲においては、難易度調整は完璧に決まったんじゃなかろうか。作り手としても遊んでほしい難易度だったし。ハードモードも用意できてる。
制作の満足度と、プレイヤーの満足度、双方が(たぶん)高くなったので今回は100点の成果じゃなかろうか。今回以上の成果、今後はもう出せないかも。やっぱりゲームデザイン拝借して企画の模索,迷い,ブレが一切無かったのが強かった。オリジナルでここまで行けたら完璧だろうな。
締め
まぁともかく取り急ぎ振り返り終了ということで。ないちさんとねぎさんに感謝!
おわり