unity1week お題「逆」で「Coin&Block」を作った過程

2020/2/24〜2020/3/1の1週間、Unityを用いて1週間でゲームを作るイベント「unity1week」が開催されました。

Coin&Block | フリーゲーム投稿サイト unityroom

このイベントの存在自体はかなり前から知っていたのですが、前回初めて参加し、今回は2回目の参加でした。

今回のお題は「逆」です。

「Coin&Block」というアクションゲームを開発したのですが、せっかくなので開発状況というか、どのように開発していったかをブログに書いてみます。

「Coin&Block」ぜひ遊んでみてね↓

開発0日目

まずお題が発表される前に、事前に作れるところを少し作っておきました。

お題が発表されるまではハイパーカジュアルゲームを作ろうと考えていたので、

  • タイトル画面、ゲーム画面、ランキング画面の遷移
  • ランキングの実装
  • 汎用ボタンの実装
  • UniRx/Zenject/DOTweenProの導入
  • FontAssetを作成

あたりを事前にある程度済ませておきました。

結局ハイパーカジュアルではないものを作ったので、一部使わない部分や改造した部分もあったのですが・・・

まああって損はないので。作っておくべき。

開発1日目

ついに初日が始まりました。

お題「逆」が発表されましたが、前日運動して疲労がすごかったのでとりあえずお題だけ確認して寝ることに。

初日9時半ぐらいに起きて、アイデア出しを始めます。

まず思ったのがなんとなくハイパーカジュアルよりもストーリー系やパズルアクション系が考えやすそうだと感じました。

次に考えたのが、ゲームジャムだとストーリー系は遊んでもらいにくいということ。

もちろん過去には優れたストーリー系ゲームもありますが、個人的にはストーリー系ゲームは「本当に面白い&雰囲気や魅力がすごい」を満たさなければ、なかなか遊んでもらえないと思っています。

もちろん得意な方はいらっしゃるでしょうが、僕はそこまででもないのでハードルが上がってしまうストーリー系はボツに。

そしてパズルアクションですが、「重力を逆にする」「移動方向を逆にする」ゲームはありがちになってしまいそうだと思ったので、今回はこれ以外にしたいと考えました。

いろいろ考えた結果・・・

「コインとブロックを入れ替えるパズルアクション」

に決めました。

イメージとしてはマリオの「Pスイッチ」を押しながら進むような感じ。

イメージが自分の中で比較的はっきりしていたし、「どんなゲーム?」と聞かれたときに「コインとブロックを入れ替えるパズルアクション」と一言で答えられるので、コンセプトとしては良さげ。

正午ぐらいにアイデアは固まり、実装に入っていきます。

まずはPlayerの移動&ジャンプ、接地判定などアクションゲームの基礎部分を作ります。

ついでにブロックとコインもAsepriteを使ってドット絵で描きました。

まあこの基礎部分は作ってしまわないと始まらないですからね。

次に、このゲームのコア部分、「コインとブロックを入れ替える」処理を実装します。

普段から序盤のうちにコア部分を作ってしまうことを意識しています。

先にコア部分を作ってしまうことで、もしコア部分が面白くなかった場合に手戻りが少なくてすみます。
かなり作り込んだ後に「このコア部分面白くなくね?」と気付いてしまったら最悪ですからね。

それほど難しい処理でもないので、30分程度で実装できました。

ドアも追加して、この日の開発は終了。

開発2日目

2日目は遷移のUIアニメーションを中心に開発しました。

unity1weekでは公式のお題とは別に、個人的に裏テーマのようなものを決めて行っているのですが、今回は「UIアニメーションをこだわる」という裏テーマを設定していました。

ちなみに前回は「気持ちよさ」を裏テーマにしてました。

昨日の「コア部分は先に作る」思想と同様、「やりたいことは先にやる」ということで2日目に取り組みました。

まず、できたものがこちら。

リトライの遷移アニメーションと、クリア時の遷移アニメーションです。

まず、「入れ替える」のがゲームのコア要素なので、遷移アニメーションも矢印をモチーフにしたデザインにしようと考えました。

リトライは2つの矢印が半回転しているようなマーク(Twitterのリツイートみたいな)をイメージして、二方向から矢印が現れるようなアニメーションに。

クリア時は「次に行く」感を出すために、左から右に矢印が進むアニメーションにしました。

どちらのアニメーションも「DOTween Pro」というアセットを使用し、線形移動ではなくイージングをしっかり設定します。

イージングが入るだけでクオリティアップ間違いなしですからね。大事。

開発3日目

この日はステージをどんどん作っていきました。

このとき注意したのは、チュートリアルをステージに入れ込むこと。

unityroomはゲーム画面の下に操作説明や遊びかたの欄がありますが、ユーザーからしたらそれを読むよりも早くゲームで遊びたいですよね。

できれば何もみなくてもゲームを理解してもらえるのがベスト。

ただ今回のゲームは、何も説明なしで遊ぶのは厳しいので、遊びながら理解してもらえるようにステージ内で説明を加えました。

また、たまに一度に詰め込みすぎているチュートリアルを見ることがありますが、人間はそんなに一度に多くのことを覚えることはできません。

チュートリアルステージ1では「移動とジャンプ」、チュートリアルステージ2では「リバース(コインとブロックの反転)」、チュートリアルステージ3ではそれらの組み合わせをそれぞれ説明しました。

これ以降は普通のステージを作っていきましたが、何も考えずに作るのではなく、「四角いステージ」「横並びのステージ」のように何となくステージの特徴が出るように気をつけました。(一部難易度重視で作ったステージもありますが)

ちなみにこの日は21時ごろから開発し初めて、翌日の4時ぐらいまでやるっていう不健康な日でした。

開発4日目

4日目はサウンドを中心に開発。

やっぱり音がつくとクオリティ上がった感がありますよね。

特にunity1weekでは、評価項目にサウンドが含まれているので、ここを疎かにするわけにはいきません。

ただ、BGMやSEの再生処理はこれまでの開発アプリで記述したスクリプトの流用でいけたので、主に素材集めに注力しました。

また、背景もこれまで無地だったので模様を付けました。
矢印のテクスチャを用意し、ShaderGraphを使ってUVスクロールさせています。

スクロール自体は一定方向で、背景のSprite自体を回転させることで、出発点から出口の方向に流れるようにしました。

ここで作った矢印のUVスクロールは、タイトルやランキング画面での背景にも使用しました。

開発5日目

この日は一日中予定があったので進捗なし。

土日に備えて寝ます。

開発6日目

締め切りまであと2日ということで、この日はまず残りタスクを洗い出して今日やることを列挙しました。

Slackに書き留めておきます。

この日はまず、ランキング機能を実装しました。

やっぱりunity1weekに出すゲームはランキング機能があった方が盛り上がるので、入れるべきだと判断。

さらに、これまでコインを集める目的が何もなかったので、集めたコインの枚数をランキングにすることでコインを集める行為に意味を持たせます。

さらにさらに、このゲームのコア部分によって「コインを獲得するほど足場となるブロックが消えていく」という状態が出来上がり、ゲームを面白くする秘訣である「リスクとリターン」がうまく実現できます。

ゲームとしてかなり面白味が向上しました。
(以前から何となくは考えていたけど明確にしていなかったので、この部分をもっと先に詰めるべきだったと反省。結果的にはよかった。)

ちなみにランキング処理自体は0日目で作っていたため、ここにきて事前準備がかなり役立ちました。実装はほぼそのまま使用。

ランキング画面を作っている途中で、ローディングアニメーションも作成。

ローディングアニメーションについてはこちらの記事を参考にしました。

さらに、これまでPlayerの画像は1分ぐらいで作った簡単なものだったので、これを改善。

ちゃんとアニメーションを作成し、見た目も以前よりリッチになりました。

あとはエフェクトをいろいろ付けて完成度をあげたのもこの日。

個人的には落下時のエフェクトが結構シンプルながら気に入ってます。
正方形が飛び散るエフェクト好き。

開発7日目

最終日です。
この日も提出までにやるタスクを列挙します。

この日はさらにエフェクトやSEなどを追加したり、その他いろいろ調整したりしました。

Playerのジャンプアニメーションなんかも追加。

あとはポストエフェクトを追加して見た目をよりリッチにしようかと考えたのですが、いろいろ試してもしっくりくるものがなく、「このままが一番では?」という結論に至りました。

ただ、せっかく色々試したし、遊ぶ人にとってはポストエフェクトかかってた方がレトロな雰囲気を感じられるかもしれないと思い、切り替えられるようにしました。

もしこれをアプリで出したりするとしたら、おそらく切り替えボタンは付けなかったと思います。

使うかどうかもわからないボタンでプレイ画面を占領するのは個人的に嫌なので。

ただ今回に限っては、簡単にクオリティを見せつけられるポイントにもなりますし、特にほとんどの人は数回遊ぶだけなのでそれほどストレスに感じないと判断しました。

また、やるべきタスクが終わって少し時間が余ったので、難しめのステージを2つ追加しました。
(急に難易度上がったはず)

公開

無事公開しました!

最終的な公開は締め切り(20時)の1時間前ぐらいでしたが、それまでにも度々アップロードしていましたし、1日に1回はアップロードするようにしていたので焦りは全くありませんでした。

「最悪これでいいや」というものが常にアップロードされている状態だったので。

ぜひ遊んでみてください!
https://unityroom.com/games/coin-block

そして、1時間余ったので簡単なPVも作りました。

1週間を振り返って

GitHubのログを見て計算してみたところ、今回の開発時間は

0日目: 5h
1日目: 12h
2日目: 3h
3日目: 7h
4日目: 2h
5日目: 0h
6日目: 5h
7日目: 7h

の36h(+事前準備5h)でした。

初日が祝日だったのがなかなか大きかった。

また、unity1weekとは全く関係ないのですがこの期間中に

というイベントがあり、かなり内容の濃い1週間でした。

おまけ

おまけとして、公開後にTwitterでも言ったのですが、

2つ目のチュートリアルステージにちょっとした遊び心を仕込んでおきました。

操作説明部分にあるコインとブロック、実は普通のステージ上にあるものと同様に取ったり乗ったりできます。

ちょっとした遊び心のつもりですが、開発者目線でもステージ上に配置してあるPrefabと同じものを配置すれば済むだけなので、むしろ楽なのです。

遊ぶ人もちょっと嬉しいし、まさにWin-Win。

是非遊んでみてね!

Coin&Block | フリーゲーム投稿サイト unityroom

コメント