Unity一週間ゲームジャムという企画に参加して、マウスをクリックして離すだけのシンプルなゲームを制作しました。お題は「跳ねる」でした。実制作日数は多分5日。
2017/12/19 追記
unityroom & 1week GAMEJAMの合同キャンペーンに応募するため、使用アセットのアフィリエイトリンクを追記しました。
テーマ決め
跳ねるで連想した内容は、「ベッドの上で跳ねる」と「魚」あたりだったのですが、手持ちのアセットで道具を準備できそうなのと、「初代マリオのバネのようにベッドが伸び縮みしたら気持ちよさそう」と気持ちよさがなんとなく想像でき、またWebGLにて公開ということで、シンプルな操作性でゲームとして成り立ちそうというイメージも湧いたので前者に決定しました。
プレーヤーをアルパカにしたのは、手持ちアセットの動物を眺めていて、ギャップがあって目についたのが理由です。家具の上を跳ねて回るという目的も、突拍子がなくて逆に良いかなと思ったのでそうしました。
制作
初日、とりあえずボタンを押しっぱなしにした溜め時間に応じて右上に飛ぶように作りました。手持ちの家具アセットと動物アセットの組み合わせが結構マッチしてて悪くない印象でした。
二日目。バネっぽいtweenを家具に加えたらすごく気持ちよくて、今までにない手応えが感じられました。アルパカも一緒に伸び縮みしたら踏ん張ってる感が出るかなということで、溜め開始時にアルパカの親オブジェクトを足場の家具に設定して、ジャンプと同時に親オブジェクトから外す(加えてScaleを元に戻す)という処理で実装しましたが、上手くいきました。
三日目は家具の自動生成&削除、jsonデータを読み込んで出現する家具の種類と家具間の隙間を調整する難易度調整の仕組みを作りました。
jsonデータの読み込みについては標準搭載のJsonUtilityを使ったのですが、このサイト様曰く、配列がルートのJsonデータをJsonUtilityはそのまま扱えないらしく、各レベルの難易度データを配列で持っておきたかった(そうすると難易度のintが増えたら配列の添字を増やすだけで難易度調整できる)ので、このフォーラムの下の方にあるラッパースクリプトを丸々コピーして利用することで解決しました。感謝。
四日目は、WebGLで一回書き出してみたらやけにフレームレートが低く、このままではアカンとなったのでパフォーマンスチューニングをしようとしました。結果的にフレームレートの問題は僕のメインブラウザのVivaldi固有の問題らしく、ChromeやFirefoxでは問題がありませんでした。
しかし軽く出来るものは軽くしたほうが良かろうということで、これまでは3Dの衝突判定を使用していたのですが、実質2Dのゲームなので3Dモデルを使いながら2DのRigidbodyやColliderを使った方が処理負荷の低減が期待できると感じたので、全オブジェクトとそれに付随するスクリプトの衝突判定を3Dから2Dへ大移動しました。
ですが、全部移行しきった結果、同様の処理でも3Dの衝突判定と違った結果になり、家具と側面から触れているのにジャンプ出来てしまったり、家具に着地した後、ジャンプする際に家具との衝突判定が発生してしまったり、色々と不都合が多かったため、一日かけて変更した内容を最終的に全部元に戻しました。完全に無駄足を踏んでしまった。
五日目は、家具の追加と難易度調整、装飾の追加などを行い、最後にタイトル画面を作成しました。タイトル画面を作っているときは朦朧としていたので、ものすごい雑になってます。すいません。
最終的に公開数時間前に作業を終えて、寝て起きてタイトル画面を少しだけ修正して公開一時間前に完成しました。
制作を終えて
今回公開した作品は今まで僕が作った中で一番多くの人に遊んでいただいて、かつ好評だったので本当に嬉しかったです。ありがとうございます。
いつもは人里離れた寒村でひっそりとゲームを作っていたので、やはりイベントに参加すると多くの人にプレイしてもらえて刺激になりました。また、自分以外の参加者様のゲームが遊べるのも、同一のテーマなのにここまで違ったゲームができるのかと勉強になりました。
反省点として、難易度が高くなりすぎて後半までたどり着けない人多数だったのは課題です。制作中に何度もプレイすることで、面白いのか単調なのかわからなくなってくる事は多々あるのですが、それを考慮して今回は緩急を入れようと思ったのに結果的に難しくなってしまったので、次はもっと意識的に簡単にしていかなければいけないなと思いました。
期間が決まっているとやるべきこととやらないことの取捨選択が出来て制作にメリハリが出来て良いので、今後もこういった企画には積極的に参加していこうと思います。また、企画だけでなく個人的に一週間の区切りで制作していくのも面白いかなと思いました。
今回はたまたま上手くハマった感があったので今後は同じ水準のものが作れるか分かりませんが、気になる内容だったら今後も是非遊んでください。
最後に、#unity1week に参加した皆さん、プレイしてくださった方々、主催していただいたunityroomさん、お疲れ様でした!
使用したアセット
※ アフィリエイトリンクのため、ブラウザの広告ブロック機能が有効だとリンクが表示されない可能性があります。予めご了承ください。
プレイヤーキャラクターのモデルに使用しました。シンプルでかわいい。そしてお値段もリーズナブル。
足場になる家具や背景素材に使用しました。Synty Studiosさんのアセットはどれもシンプルで使いやすくオススメです。
言わずと知れた有名Tweenアセット。溜め動作の震えや色の変化など、様々な場所で使用しています。
標準のコンソール表示を拡張してくれるアセット。フォント変更したりフィルタリングしたりと色々活用しています。