2020/11/09
「第17回 Unity1週間ゲームジャム」に参加しました!
time 2020/12/31
今回は12月21~27日に行われたUnity1週間ゲームジャムに参加したので、そのお話になります。
お題は「あける」でした!
パッと思いつくのは「宝箱をあける」とか「扉をあける」とか、物理的なものですね。
ちょっとひねると「夜が明ける」とかでもよさそうです。
目次
ゲーム紹介
「いわとをあけて」というゲーム名で公開しています。
https://unityroom.com/games/amaterasu
日本神話「天岩戸伝説」をモチーフにしたゲームです。
やおよろずの神様たちのアクションで、岩戸に引きこもったアマテラス様のご機嫌を取っていきます。
十分にご機嫌をとると、アマテラス様が岩戸から出てきて夜が明けます。
逆に機嫌を損ね続けると怒り出してしまいます。
こうなると機嫌を大幅に損ねてしまうので注意しましょう。
各日の様子
開催前
今回は以前「ぱくぱくアザラシ」を作った際に共同開発させていただいた神岡さん(@flyingmendako)と参加しました。
そもそもぱくぱくアザラシ自体がu1w前の練習を兼ねていたりしますね。なのでこちらが本命です。
ぱくぱくアザラシでどんな感じで開発していくかを確立したので、u1w開催までは登場させるキャラクターの案やデザインなどを考えていました。
その間に私はu1w用のプロジェクトを整備していました。特にランキング登録の仕組みを大きく変えています。
その他にフォルダ構成を整理したり、エフェクトやシーン遷移の表現の幅を広げたり…ですね。
1日目 (月曜日)
朝のお仕事前に神岡さんとアイデアを出し合い、ゲームのだいたいの方向性を決めました。
コロナの関係でリモートワーク中のため、仕事前の時間を目一杯使うことができて快適です。
この時点で「天岩戸伝説」をモチーフにしようと決めました。事前に考えたキャラはお題的にどれも使えなそうなので、割り切っていく感じで…。
夜になったら作業開始です。
日中に神岡さんからゲーム概要や画面イメージを共有いただいたので、それを元にプロトタイプをガリガリ作っていきます。
当然ながらイラストはまだないので、うちのリスで代用します。
「アマテラスの状態」と「ユーザーの入力したアクション」によって増減する感情値やアマテラスの台詞が変わります。
これらをSwitch文で実装するのはコードの可読性も保守性もよろしくありません。ということでScriptableObjectを使いました。
とりあえず「入力とそれに対するリアクション」の部分ができました。細かく神岡さんと共有していきたいため、この時点でWebGLビルドして2人のみ見れる環境にアップロードしました。
早めにWebGLビルドも試せるので一石二鳥ですね。
2日目 (火曜日)
引き続きロジック部分の実装を行っていきます。
朝お仕事前に「3回連続でテンションアップ/ダウンした場合」の処理を作りました。
その後はお仕事です。本業もそこそこ忙しいうえ、今のタスクに思った以上に時間が掛かってしまっており、残業後に作業再開。
まずは神岡さんに描いていただいたアマテラスのSpriteを入れてみます。
やっぱりイラストとかデザインに強い人がいるとキャラが魅力的ですよね。私の変なウサギやアザラシとは違うんですよね。かわいい。
次にアマテラスを各気持ちに変化させた後の待機時間を設けます。1日目のプロトタイプでは無制限に待ち続ける状態でした。
しかし「リアクション後の待機時間」と「何もしなかった場合の待機時間」の2つの兼ね合いが難しく、細かい部分でバグが多発。
なんとか形にはなりましたが、想定以上に時間が掛かってしまいました。
はい、私もそう思います。ごめんなさい。
その後はAWSのS3バケットにパスを追加したり、DynamoDBにテーブルを追加したりしました。それぞれ「Twitter投稿時の画像表示」「ランキングデータの格納」に必要になります。
といったところで2日目は終了。
3日目 (水曜日)
先日遅くまで作業した影響か、盛大に寝坊。
u1wどころかお仕事の朝会にも遅れかけました。リモートでなかったら即死でしたね…。
夜から作業再開!…の前にキーボードを新調しました。
バリバリコードを書くので、キーボードの良し悪しは効率にもモチベにも直結しますからね。妥当な投資と言えるでしょう。
これで効率アップをはかります。
やっぱりキーボードって大事。 pic.twitter.com/vImUuFvzsv— あかざらし (@akaiazarashi) December 23, 2020
夜はまずランキングをクリアタイムの早い順に対応するところから。
ランキングの仕組み自体はクリアタイムにも対応できるよう、事前にあれこれテコ入れしておりました。
しかしAWSのLambdaへのリクエストが何故か失敗してしまいます。テンプレートプロジェクトでは上手くいっていたのですが…。
と思っていたら…。
「カラム名に半角スペースが入っていた」というしょうもないミス…。
DynamoDBなのでテーブルを作り直し、なんとか使えるようになりました。
次に神岡さんからいただいたアマテラスの各気持ちのテクスチャを組み込みます。
かわいい!さすがですね!
しかしそのままSpriteを切り替えると少し違和感があったので、切り替え時にY軸に回転させてみました。
その後は残タスクを整理して就寝。
4日目 (木曜日)
朝はBGMの選定を行いました。
とはいえ手持ちのアセットはカジュアル系やSF系、バトル系などしかなく、和風なBGMは皆無だったため割と苦戦。
この時点で一応組み込みましたが、その後も何度か変えたりしました。
夜はまず2DLightの検証から。
「アマテラスの機嫌に応じて徐々に明るくなる」という設定なので、2DLightを使えばいい感じに表現できるかなーと考えました。
WebGLでも問題なく使えそうなことが確認できたので、いったん検証は終了です。微調整は背景をいただいてからします。
頭痛がひどかったのでこの日は終了です。残タスクを考えるとなかなかやばい状態。
5日目 (金曜日)
今日も寝坊し夜からの作業に。開発者としての意識低すぎ問題。
まずはランキングの修正!
とまあ、string型でソートしているのバレバレなんですね。
ということでListのSort()
内でちゃんとfloatにキャストした上でCompareTo()
してあげました。
次にやおよろずの神様の画像をいくつか作ってもらったので、そのSpriteの切り替えと回転アニメーションを作ります。
しかしここにきてアクションが「やおよろずの神様→アマテラス」であるのを忘れ、完全にアマテラス準拠でゲームループを作っていたため面倒なことに。
まあ結局はUniTaskなので、適切に処理差し込んでawaitしてあげれば良いだけではありますね。
次にシーン遷移時のフェードイン/アウトのエフェクトを作ります。
すでにルール画像は使えるようにしていたので、単純な画像をAffinityDesignerで作るだけ。
あとはGitHubの管理下に入れていなかったので、リポジトリを作ってプッシュしておきました。
6日目 (土曜日)
日中は出かけていたので夜から作業しました。
まずは効果音です。神岡さんにお教えいただいたフリー素材を落として組み込んでいきます。
そこは…はい。大変申し訳ありません…。
音選びのセンスがなさすぎて、全然雰囲気に合う音を組み込めませんでした…。
次に可変の吹き出しウィンドウを作ります。こちらの記事がとても参考になりました。
https://tech.pfq.jp/blog/658/
しかし↑だけではリサイズが即時に反映されなかったため、Unity公式フォーラムのやりとりを参考に修正しました。
https://forum.unity.com/threads/content-size-fitter-refresh-problem.498536/
その後はタイトル画面やリザルト画面の構成を変えて終了です。
7日目 (日曜日)
最終日です。が、全然終わっていません。しかも1日大掃除やら家の事情やらでまともに時間が取れませんでした。
この時点で遅刻は確定したようなものですが、気にしてもしょうがないので作っていきます。
まずはチュートリアル画面とオプション画面を作ります。見た目や画像は後から整える感じで。
次に神岡さんから背景の画像をいただいたので組み込んでいきます。
SpriteRendererはあまり使ったことがないため、ただ配置するだけなのにかなり苦戦してしまいました。
Z軸で重なり順をうまく操作するのが苦手ですね…。
あとはタイトル画面のSpriteもいただいたので、そちらも組み込みました。
こちらも2DLightを使い、ちょっと不機嫌で暗そうな雰囲気を出します。
その後はクリア後の処理を入れたり、細かい部分をもろもろ修正して終了。
8~10日目
u1w初めての遅刻となってしまいました…。
細かい部分を修正・調整しつつ、神岡さんからいただいたリソースを組み込んでいきます。
9日目に3連続テンションダウン時の挙動を変更しました。
今までは「3連続テンションダウンで不機嫌になり、その時にアクションしてしまうと怒る」でしたが、変更後は3連続ダウンしたらすぐに怒るようにしました。
その後はバグ修正や動作、見た目の調整を行い、公開したのは30日の夕方過ぎになりました。
感想と反省点
まあ最大の反省点は遅刻したことですね。
これまでu1wでは一度も遅刻していなかったので、ここは大いに反省すべきところであります。
それ以外にも反省するべき点はたくさんありますが、一番は規模とスケールが大きすぎたことでしょうか。
アマテラスのリアクションやおよろずの神様のアクション、岩戸や背景など、必要となるリソースはかなり多く、担当いただいた神岡さんへの負担が高くなりすぎてしまいました。
またゲーム自体もシンプルながら、入力アクションとそれに対するリアクションがやや複雑で、ロジックも綺麗とは言い難い状態でした。
そのため後半の仕様変更で手間取ってしまったり、バグが多発したりしました。
総じて1週間でやるには時間が足りなかったですね。
遅刻が確定してからはかなり焦って作っていたので、精神的にもよろしくなかったです。
あとがき
そんなわけで、第17回Unity1週間ゲームジャムに参加しました!
初の共同開発にしては反省点の多い流れになりましたが、この開発を通して分かったこともたくさんあるので、次のunity1weekに生かしたいです。