Unity1Week(2020/12)「あける」参加覚書

2020/12に行われた「Unity1週間ゲームジャム  お題『あける』」に参加した時の覚書。

作成したゲーム

右から転がってくる「あ」を蹴って遠くへ飛ばすワンキーゲーム。

当時の状況

Unityの勉強は以前から本を読んでは間が空いて忘れ、また本を読んでみたいな感じでやっていた。実際にゲーム作りをはじめたのは、2020年10月くらいから。

今回のゲームジャム参加前に「NumTouch」「NumTouch3D」「樽ジャンプ」を作成したが、それぞれ目標が「2Dのゲームを投稿する」「3Dのゲームを投稿する」「キャラクターを動かす」という感じの初心者。

ゲーム内容検討

お題「あける」ということで、(扉、宝箱を)開ける、(時間、空間を)空ける、(夜、年が)明ける、などを考えた。最初は扉を開けて敵を倒す、マッピーみたいなのを考えたが、技術力的に一週間でできる気がせず、どうしようか考えていたときに「あ 蹴る」を思いつく。

右から「あ」が転がって来て、キーを押して足を上げて、タイミング良く離して蹴る。これならなんとか作れそう。とはいえ、ただのダジャレ(怒られないかと思ったけど、結果としては似たようなのがたくさんあったw)だし、面白いのか疑問だったので1日半くらい別の案を考えたが思い浮かばず。
アニメーションとかもやったことなかったので、どうかなと思ったが、「樽ジャンプ」で作ったキャラ(いわゆる棒人間)をそのまま回転させればいい、というかそれくらいの方がシンプルなゲーム性にあっている気がした。

考えてる中で、「転がってくる『あ』のフォントを選択する」「蹴る時にナルトみたいなマルチアングルリプレイをする」という案が浮かび、これならちょっとおもしろいかも。と思って時間も(技術も)ないので、これで行くことに決めた。

技術検証

テストプロジェクトを作って検証。

「あ」を転がす。クリックで自キャラを回転させ、離したら逆に回転させる。蹴る時に足の高さによって強さを変える。この辺はまぁ見通したってたので難しくなかったが、マルチアングルリプレイは実現の仕方を調べるところから。

リプレイ

リプレイの方法を調べたら「プレイ画面の画像を保存して再生」「オブジェクトの状態を保存しておいて再生」が目に止まった。まずプレイ画面の保存から試したが、「再生時にカメラ動かせなくない?」「そもそも画像の保存先なくない?」と気づく。(後者はメモリ上に保存すれば出来る気もするが)

今回のゲームは動かすオブジェクトが2つだけなので、フレームごとに各ゲームオブジェクトの位置と角度を保存しておいて、再生時はTime.timeScale=0でポーズして、対象のゲームオブジェクトを複製、複製したゲームオブジェクトに保存した位置と角度を与えていく方法でリプレイできる事を確認。

開発

「あ」のコライダー、最初はサークルで作成していたが、文字通りの形に出来ないかなと思い試していたらPolygon Collider 2Dを見つけて、「こんないいものあったのか!」ってなる。勉強不足。

「あ」の回転速度、足の振り上げスピード、蹴るスピード、蹴った時「あ」にかける力、蹴った後プレイヤーは止まるのかその場で反回転するのか後方に吹っ飛ぶのかなど、検討調整していたら結構時間がかかった。

ゲームのコアができたところでは「あ」が画面外に飛んでいく形だったので、カメラ操作を作成。ちょっと難しかったが、ネットで調べつつ作成できた。このカメラのズーム(ズームアウト)は思ったより気持ち良い感じだったので、これでゲームとして一応形になったかなと感じた。

飛距離測定とエンド画面、再実行を作ったところで、締め切り時間になっていたがもうちょっと作りたかったので遅刻することにした。

ハイスコア登録
Unityroomに記載のあった「【Unity、WebGL】なるべく簡単にオンラインランキング機能をつけるサンプル」を参考に追加。
意外と簡単に出来た。
フォントごとのランキングも作りたかったが、時間がないので断念。
いずれ中身を確認してカスタマイズもやっていきたい。

ツイッター投稿
ちょっと面倒そうに感じたので今回は見送ったが、やっぱりあると面白いのでどこかで一度やっておきたい。

フォント選択
以前購入したフォントの使用規約などを確認したが、ゲームに組み込んでフォントとして使用するのはダメだが、ロゴや画像化して使うのは良さそうだったので、gimpでgifにして使用。
フォントごとに重さとか反発係数かえようかとも思ったが、バランス調整してる暇ないし、Polygon Collider 2Dのおかげで形だけで個性が出るのでそのままにした。
ぶっちゃけゲーム的にはなくてもいいけど、出落ち的に面白いかと思って作成したんだが、結果的に楽しんでもらえたようなコメントも頂けたのでやってよかった。

リプレイ
リプレイ自体はそれほど難しくなかったが、うまく蹴れた時だけリプレイにしようとしたら、うまく蹴れたかの判定にちょっと手間取った。
カメラワークも本当は3Dな感じでやりたかったが時間の関係で断念して、単純なズームだけになった。

プレイヤー位置の操作
プレイヤーの位置、左右だけ、上下左右などある程度の範囲で動かせるようにしようかとも思ったが、作成もプレイも簡単にする方向にしようということでやめた。

背景
どれくらい飛んでるかがわかりにくかったので適当に山と雲を配置。
コピペで配置していったのでだいぶ面倒だった。プログラムで配置など、もっと簡単な方法がありそう。
「あ」が飛んだときのカメラの引きと合わせると段々上や先が見えてくるのがおもしろかったので、上の方を暗くしたり、先の方にでっかい月が浮かんでる感じにした。
より先が見たくなるようにストーリー的なものにできたらよかったが、時間と技術とアイデアがなかった。無念。

リリース前後

リプレイが長い
リリース前にビルドしてテストしたところ、リプレイが長過ぎた。
Updateごとに保存して、フレーム数でリプレイ開始位置を決めているので、EditorとWebGLでフレーム数が違ったのが原因。
本来は時間を使うのが正しいのだろうけど、とりあえずリプレイの対象フレームを短くすることで対応。WebGL上ではよくなったが、Editor上ではリプレイが一瞬で終わる(笑)
結局このやり方だとフレームレート次第なので、他の環境でいい感じの時間になってるかは不明だし、保存時と再生時のフレームレートも違う可能性がある。

リプレイ(やり直し)機能の追加
リリース後にコメントで、間違ってスペース押してしまうとしばらく待たないといけないのでやり直しができるといい、という意見があった。
たしかにその通りなのでリプレイボタンを追加した。

反省点

今回、時間や技術力(経験)の不足で盛り込めなかったものとして、サウンド、ツイッター投稿などがある。これは次回以降できるように勉強していきたい。

しかし、なによりゲームをもっと楽しんでもらえるものにしたい。
全部のゲームをプレイして配信されている方がいて、自分のゲームをプレイしてもらっているところを探して見たんだが、正直見ていてフラストレーションのたまるゲームだった。やってもらえるのは嬉しいが、こんなゲームで申し訳ない、もういいよって気分になったのが正直なところ。

今回、足の位置で蹴る強さが変わるようになっているが、やっぱりパワーメーターなどでわかりやすくしておくべきだったと思っている。
足の高さで蹴るための回転の初速が決まるので、「あ」に一番力がかかるのは、蹴り出した瞬間に頭が「あ」に当たった時になる。足以外のあたり判定は消しておいた方がよかったかもしれない。
また、速すぎて当たり判定が食い込むのか、うまく蹴れたはずが「あ」がプレイヤーに絡まるような挙動をすることがある。上手く蹴れた時のリプレイが入るのに全然飛ばないのは、プレイヤーに理由がわからないストレスを感じさせることになる。なくすように調整するべきだった。

感想

はじめて参加したけどとにかく楽しかった。

お題に合わせてアイデア考えて実現していくのも楽しいし、遊んでもらえて評価やコメントがもらえるのも嬉しいし、他の人の作った作品で遊んだり、楽しかったところをコメントしたりも楽しかった。

自分で考えているときはゲームのアイデアなんてそれほど浮かばなかったけど、いろんなゲームが出来上がっていて、アイデアに驚いたり、完成度にやられたり、同じ「あ」を蹴るという出発点でもそれぞれ違うゲームになっていたり、目からウロコが剥げまくる感覚をたくさん味わえた。

まだまだ「とりあえず作ってみました」が続くかもしれないけど、「ほら、楽しかったでしょ」って自信持って言えるゲームが作れるように続けていきたい。

主催していただいたnaichiさん、参加者のみなさん、ありがとうございました。