本記事の概要
-
バンダイナムコスタジオ杯 | Siv3D ゲームジャム 2025 に参加してきた
- オンラインのゲームジャム。お題発表から2週間という短い期間でゲームを完成させ、提出・発表する
- 参加者全員がバンナムの方からフィードバックをいただけるという太っ腹な企画
- 筆者もこのゲームジャムに参加し、作品の提出と発表を行った
- 本記事は、そのログである
Siv3Dとは?
- C++でゲームを作れるツール
- Siv3Dゲームジャムでは、当然だがSiv3Dでゲームを作成することが参加条件となっていた
作品について
- タイトル: 芯シューティング
- プレイ環境: Windows
- プレイ動画
- Githubリポジトリ
- 作品紹介ページ
ゲームそのものの紹介や工夫点などは「作品紹介ページ」をご参照ください。
Siv3Dゲームジャムに参加した理由
- 去年ごろからゲーム制作を始めてハマっている
- 最近少しGodotとかも触っているが、触れた期間が1番長いのはSiv3D
- ゲーム制作ではないが、仕事でC++を使うのでその勉強にもなるとよいなという下心
- Siv3Dコミュニティでゲームジャムをやるという話を聞いたので参加
Siv3Dゲームジャムのタイムライン
参加申し込み
- 筆者が参加登録をしたのは9/13。この時点で開催期間等の詳細は明らかになっていた
- この時点で、開催期間に新作ゲームが発売されることが分かっており、開発期間をあまり取れないことが見込まれた
お題発表(10/18)
- ここで、お題が「シン」であることが発表される
- 新や神、真、sinなど好きに解釈して良いと言われた
- ここで筆者は「芯」を連想。そして、以下の要素を瞬時に閃いた
- リンゴ同士が種を打ち合うシューティングゲームで、ダメージを食らうと身が削れていき、最終的に芯が露出
- 芯の状態は死の一歩手前な代わりに、あらゆる要素が強化される
- 「ピンチ」かつ「チャンス」な状態が面白いと思った
中間発表(10/25)
- お題発表から1週間後に任意参加の中間発表があったが、筆者は予定が合わず出られなかった
- 参加者はその場でフィードバックをもらえたり、最終発表時に中間からの成長を見てもらえたりするので基本的に参加した方が良い
- なお、この時点で筆者はあまり進捗がなかった
中間発表~最終発表まで
開発を本格的に始めたのは中間発表以降で、主に以下のことをやった
- ゲーム制作
- 作品紹介ページの作成
- 作品発表スライドの作成
- ゲームのプレイ動画の撮影
- 発表練習
最終発表(11/2)
- 総勢56チームが作品を提出し、全員が発表
- 発表時間は1チームにつき最大90秒
- 発表形式: ゲームのプレイ動画を流すだけでも良いし、スライドを用意してプレゼンしても良かった
- 発表中のトラブルをなるべく避けたかったので、スライドで発表した
- ゲームのプレイ動画を流している発表者は多かったが、音声周りのトラブルに見舞われている人も多かったので、スライドにしてよかったと思った
- ゲームがシンプルな分、スライドはコンセプトを伝えることに特化した。お陰で「スライドが分かりやすい」とのコメントをもらえた
審査・受賞者の発表・フィードバック
- これから
- 50名以上おり、全体的にレベルが高かったので受賞はまずないと思っている
- しかし、フィードバックは参加者全員がもらえるため、これが楽しみ
技術的な話
Siv3Dを使った開発
- 筆者の開発環境
- Windows11
- VisualStudio
- GithubCopilot
- Siv3DはWindows環境だと割と環境構築しやすいツールで、公式サイトの手順通りに環境構築さえしてしまえばかなり快適に開発できる印象
- 使うウィンドウやアプリケーションも基本的にVisualStudioのみで完結している点も手軽でよい
- また、GithubCopilotのAgentモードがかなり優秀で、事前にある程度骨組みさえ作っておけばほぼ修正なしで作れてしまう
- Agentモードだと、コードの修正だけでなくビルドが通るところまで確認してくれるところが便利に感じた
- ただし、UI周りはややお粗末で、ボタンなどのUI要素が重なってしまうことがしばしばあった
設計
- 本作では、ゲームの状態が「プレイ中」以外にも「タイトル画面」「ポーズ中」「リザルト画面」など多岐に渡る
- そこで以下のような
BaseSceneクラスを作り、そこから継承することで具体的なゲーム状態に対応するクラスを作成するようにした// シーンの基底インターフェース class BaseScene { public: virtual ~BaseScene() = default; // 更新処理 virtual void update() = 0; // 描画処理 virtual void draw() const = 0; // 次の状態を取得 virtual GameState getNextState() const = 0; // 状態が変更されたかチェック virtual bool isStateChanged() const = 0; };- おそらくC++を用いたゲーム制作においてはスタンダードなやり方だと思うが、ゲーム状態の追加や削除をしやすい柔軟な設計にできたのではないかと思っている
- 基本的な構造はどんなゲームにおいても流用可能な気がするので、次にSiv3Dでゲームを作るときはこれを使いまわそうと思う
雑感
他の参加者について
- 参加者層は様々で、ゲーム制作を初めて数か月の学生から社会人のチームまで幅広かった
- 想像以上にチームでの参加が多かった。多い所では5人ほどのチームもちらほらいたような印象
- 全体的にレベルが高く、2週間でこのクオリティのものを作るのかという驚きがあった
- 特に、自分のゲームと比べてボリュームやゲームの複雑さにおいて大きな差があると感じた
- グラフィックやサウンド周りも凝っているチームが多く、自分のゲームはそれらと比較するとどうしてもチープな印象になっていたのは否めなかった
他の参加者のゲームの内容について
- 作品紹介ページで他の参加者のゲームの内容も見ることができたのは勉強になった
- 生成AIをゲームに組み込んでいる人もいた。 llama.cppを組み込むだけなので技術的には難しくないとのことなので、いつか自分もやってみたい
- 使用したツールやライブラリ等の情報を詳細に書いてくれている人もいて、非常に参考になった
- 製作期間や要求スキルを加味してか2Dゲームが多かったが、少数ながら3Dゲームを制作しているチームもいた
ゲームジャムを終えた感想
- 自分の実力不足を痛感する結果とはなったが、初のゲームジャムに個人参加して、開催期間の半分ほどしか使っていなかったにしては頑張った方だと思う
- ゲームを動く形まで完成させられないチームもちらほらいた中、期間内にゲームを完成させることができたのはよかった
- ただ、本ゲームジャムは「完成しなくても良い」と事前にアナウンスがあった
- 審査員の方も、「完成していなくてもちゃんと発表の場に来ていた人がいるのが素晴らしい」とコメントしていた
- 上述の通り開発時間を長く取れないことが見込まれたため「ミニマルな構成」を最優先に進めていたが、もっと冒険しても良かったかもしれないという思いはある
- ただ、本ゲームジャムは「完成しなくても良い」と事前にアナウンスがあった
- 期限が設けられた中で、他の人に見てもらえるゲームを制作するというのは稀有な体験であり、参加してよかったと感じた