unityroomのゲームジャムに参加した

Unity 1週間ゲームジャム
お題「跳ねる」
https://unityroom.com/unity1weeks

@stella_tohrupomが引っ越しで居なかったので一人で参加。
水曜くらいにTwitterで知って土曜日の12時から作業開始、日曜19時半にupで作業時間は15時間程度。
平日はOverwatchをプレイしていたが土日は起きてる間ほぼフルで使った。締め切りがあると集中できて良いね。

ゲームジャムは初めてだったので色々と反省点がある。次に活かしたい。

今回作成したゲーム「Drop and Bounce

github … https://github.com/teriyakichan/unity-dropandbounce

企画

ゲーム内容は30分程度で考えた。というよりは、過去にストックしていた案で「跳ねる」というお題にマッチするものをピックアップするだけだったので時間はかからなかった。
要件としては、
 1. ステージ自動生成
 2. 遊んでもらうための仕組み
 3. 簡単操作

1については、締め切りまでの時間がないので、ステージクリア型等の膨大なコンテンツを用意するのが現実的でない為。ステージクリア型にするとおそらくステージエディタの作成からになってしまうので、FlappyBirdの様にロジックを組んでしまえば後はなんとでもなるものを目指した。

2はランキングを用意した。ステージクリア型ではないので、リプレイ性を高めるにはプレイヤー同士で競わせるかゲーム内容(アイテムやギミックのパターン)を盛るしかなく、工数的に前者が軽いのでランキングを優先した。

3についてはunityroomの性質上、ブラウザでプレイするのであまり複雑な操作にはしたくなかった。1~3キーで考えていたが操作はシンプルであればあるほど良い。

ステージの自動生成

アイテム及び床ブロックは予め10個ずつInstantiateして使いまわすようにした。
いずれもランダム配置、前に配置したアイテムとの距離を一定以上保つようにした。床ブロックは反射したときの挙動を変えるため、角度もランダムで配置。
このあたりのバランス調整にあまり時間を割けなかったので、難易度がいまいちな感じになってしまった。上手ければぽんぽん進めるようにしたかったが、無限に進んでしまうことのないように気をつかったところ、誰がプレイしてもにたようなスコアになってしまった。
結果、公開から3時間経過しても、テストプレイで自分が出したスコアが1位という悲しい結果になってしまった。遊んでくれた人ありがとう。

ランキング

これが意外と時間がかかった。普段開発に使用している自宅サーバをぶっ壊したまま放置していたので、このブログを設置しているさくらのレンタルサーバ上で作業。
.vimrcを移すところから始まり、SSL等のサーバ設定、ドメイン設定で無駄に時間がかかってしまった。
最近MySQLを触っていなかったのでテーブル設計はあまりイケていない。負荷を気にしたがアクセス数を考えると問題はなかった。ただし現状の設計ではプレイ毎にINSERTするので、ある程度インストール数が見込めるiOS/Android向けには使えそうもない。現状でも2000レコード程あるので、1プレイが短い本作には向かなかった。
ランキングは汎用的に使えそうなので、今後似たようなシステムを採用することがあったら今回作成したものを改善して流用したい。

警戒していたクロスドメイン問題は普段経験していたのでとくに躓かなかったが、C#とPHPを並行で書いていたので色々と混乱した。サーバはプロダクションで動いていたのでエラーが表示されず、シンタックスエラーで悩まされたりした(変数の$わすれたりとか)。このあたりは環境をしっかり整えて対応したい。

またMiniJSONによるJSONのデシリアライズをUniRxで非同期処理にしたかったが、WebGLではうまく動かなかった。同期で動作を見たところ大した時間がかからないのと、デシリアライズするタイミングはちょうど画面の描画が止まっていて特に違和感はなかったので同期にした。おそらく現在のレコード数なら16ms以内に終わっている。
このあたりは今のうちに調査しておきたい・・・。

他の作品ではランキングを実装しているものはあまりなかった。その代わり(?)Twitterでシェアする機能が多かった。ハッシュタグもあるのでかなり反響はありそう。まったく考えていなかったがこの手のイベントなら必須機能かもしれない。

操作とルール

シンプルに徹しすぎたかもしれない。現在の仕様だとかなり運ゲーになるので、もうすこし何らかの機能(例えば消費アイテムで一定時間スローになるとか)を追加してもよかったかもしれないが、検討中に締め切り時間になってしまった。
またボールが上昇したときにカメラを引くなどして、もう少しドロップのタイミングをプレイヤーが考える余地をもたせたかったがこれも時間が足りなかった。

その他

未完成では出したくなかったので、そのままiOSビルドしたらリリースできるようなものを目指した。見栄えは拘ったつもりだがUI系はデフォルトを使用しているのでもう少し詰めたかった。このSkyboxシェーダのお陰でかなり見栄えがよくなったと思う。今後も活用したい。
効果音については完全にタスクが漏れていたのでまにあわなかった・・・。作業開始前にタスクを全て洗い出す必要がある。締め切り当日の15時くらいにタスクを洗い出して絶望していた。

まとめ

他の人の投稿を見ると一発ネタも多いがどれも瞬発力があってすごく面白かった。アイディア勝負になるところが大きいが、自分には到底思いつかないものばかりだったのでもっと人の作品を見て吸収したい。
特にBounce Shooterという作品がヤバかった。こういうゲームが作れるようになりたいな。
Unityで開発している人なら誰でもしってる某ブログの人も参加していてとても良い刺激になった。やはりあの人はすごい。

次は一週間フルに使って頑張りたい。