3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIにお任せしてゲームを作ってみた

Last updated at Posted at 2025-12-18

はじめに

こんにちは。
CYBIRD Advent Calendar 2025 の19日目担当の @gumita です。
18日目は @pinkoro さんの「App Store Connect上のアプリ審査や配信状況の把握をSlack通知で効率化させた話」でした。

概要

Unity1weekというイベントをご存知でしょうか?
unityroomで行われている、Unityを使って1週間でゲームを作るお祭りです。

参加したい!と思っても、仕事をしながらの参加が難しい...
そんなとき、AIブームが舞い降りました。では、ゲーム作りをAIにお任せしてみましょう!

ということで、イベント参加のハードルが下がるのではないかと思い、実際にほぼAI任せで作成してみた記事になります。

使用したもの

使用したAIツール
・Gemini
・Bing

Unityバージョン
・6000.3.0f1

お借りしたもの
ボタンUI    :空想曲線様
ベルSE    :OtoLogic様
ベルSE    :On-Jin〜音人〜様
イラスト素材  :いらすとや様

事前準備: Geminiに計画を立ててもらう

Geminiにお願いしたこと
・企画案出し
・開発計画
・プログラミング

BingAIにお願いしたこと
・素材候補探し

◯ 企画案出し

Geminiに、"5日間でゲームを作る"と伝えた上で、前回のunity1weekのお題「ひく」に合うゲームを提案してもらいます。

プロンプト
「ひく」という単語が関連するゲームを作りたいです。いいアイデアはありますか?
できればクリスマスをテーマにしたゲームにしたいです。

回答

1. シンプルなパズル/アクション: 「ソリを引くサンタ」

「ひく」の意味: 引っ張る (ソリを引く)

ゲームジャンル: タイミング/ルートパズル

概要:

プレイヤーはサンタクロースを操作し、トナカイに繋がれたソリを引っ張ります。

画面には雪の道があり、障害物(木、雪だるまなど)が配置されています。

プレイヤーは、障害物を避けながら、プレゼントが散らばっている地点を全て通るような最適なルートを5日間で考えるパズルとして作成できます。

または、自動で走るサンタが障害物にぶつかる直前に、ルートを「引く(指定する)」タイミングアクションゲームにすることもできます。

実装の難易度 (5日間): 低〜中(シンプルな2Dグラフィックと、簡単な衝突判定、ルート指定機能のみで済むため)

2. リズム/記憶ゲーム: 「クリスマスの曲を弾く」

「ひく」の意味: 弾く (楽器を演奏する)

ゲームジャンル: リズム/記憶ゲーム

概要:

画面に鍵盤またはベルが4つ(または5つ)表示されます。

システムがクリスマスの簡単なメロディーを「弾いて」聞かせます(光らせて音を出す)。

プレイヤーは、システムが弾いた順番と全く同じように、鍵盤やベルを「弾いて」再現します(サイモン・セッズ方式)。

ステージが進むごとに、メロディーの長さが長くなります。

実装の難易度 (5日間): 低(使用する音は数種類、グラフィックはシンプルなボタンで済むため。基本的な配列と入力判定ができれば実現可能)

3. クイズ/タイピングゲーム: 「単語を引く(選び出す)」

「ひく」の意味: 選ぶ/辞書を引く

ゲームジャンル: クイズ/ワードパズル

概要:

クリスマスの風景の画像が表示されます。

それに関するキーワード(例:「プレゼント」「トナカイ」「ヒイラギ」)を、ランダムに並べられた文字の中から「引いて」(選び出して)完成させます。

または、表示された文字を「引く」(消去する)ことで、残った文字から隠されたクリスマスのメッセージを完成させるパズル形式も考えられます。

実装の難易度 (5日間): 低(画像とテキスト表示、文字のクリック判定のみで実現可能)

おすすめのアイデア
最もシンプルで、5日間で達成感を得やすいのは、2. 「クリスマスの曲を弾く」(サイモン・セッズ形式)です。

理由: 複雑な移動や当たり判定が必要なく、UI(ユーザーインターフェース)のデザインが簡単で、ゲームロジック(記憶と入力の比較)に集中できるためです。

もし、この「クリスマスの曲を弾く」で進めるようでしたら、このアイデアを元に具体的な5日間の開発計画を作成します。いかがでしょうか?

と回答してくれました。
おすすめ通り2. 「クリスマスの曲を弾く」を作ってみようと思います。

◯ 開発計画

5日間開発計画(1日2時間以内)もGeminiに出してもらい、それに従って作っていきます。

プロンプト
2. 「クリスマスの曲を弾く」で進めたいです。5日間の開発計画を作成してください。1日の稼働が2時間以内だと嬉しいです。
※指定し忘れていたため、追加でUnityで制作する想定だと伝えました。

回答は各日あるため、それぞれ後ほど記載します。
結構しっかり答えてくれるため、回答通りに5日間作ってみます。

1日目

▽ Geminiの回答

Day 1: プロジェクトセットアップとUIの配置 (約1.5〜2時間)
目標: Unityプロジェクトの準備と、UIキャンバス上に4つのインタラクティブなボタンを配置する。
Unityタスク

  1. プロジェクト作成: 2Dテンプレートで新規プロジェクトを作成する。
  2. UIセットアップ: シーンにCanvasを作成し、その中に4つのButton UI要素を配置する(ゲームの「ベル」や「鍵盤」に相当)。
  3. 色と名前の設定: 各ボタンの色(赤、青、緑、黄など)を設定し、名前を「Bell_Red」「Bell_Blue」などとわかりやすく変更する。
  4. 基本スクリプト: ゲームのメインロジックを管理する空のC#スクリプト(例: GameManager.cs)を作成し、Scene上の空のGameObjectにアタッチする。

成果: 画面に4つのボタンが表示され、メインの管理スクリプトがアタッチされた状態。

結果
制作時間:10分

2日目

▽ Geminiの回答

Day 2: インタラクションとサウンドの実装 (約1.5〜2時間)
目標: 各ボタンが押されたときに音を鳴らし、視覚的なフィードバックを与える。
Unityタスク

  1. オーディオの準備: 4種類の短い音(MP3, WAVなど)をプロジェクトにインポートする。
  2. AudioSourceの追加: シーン上の各ボタンまたは一括管理するオブジェクトにAudioSourceコンポーネントを追加し、各ボタンに対応するクリップを設定する。
  3. フィードバックスクリプト: 各ボタンに対応するC#スクリプトを作成し、OnPointerDownイベントなどで色を明るくする処理と、音を鳴らす処理(AudioSource.Play())を実装する。
  4. イベント接続: Buttonコンポーネントの OnClick() に関数(3で作成したもの)を接続する。

成果: プレイヤーがボタンをクリックすると、色が変わり、音が鳴るようになる。

◯ 素材候補探し

ここではベルのSE探しにBingを使用しました。
Microsoft Bing は、高速で安全な AI 搭載の検索エンジンになります。

プロンプト
ジングルベルの鈴のSEを探しています。フリーで何がありますか?

と検索すると候補を出してくれました。
リンクを飛ぶと、サイト内で該当のSEが表示されるページを表示してくれました。

◯ プログラミング

音を鳴らす処理(AudioSource.Play())を実装する、とあるためこれもGeminiに聞いてみました。

プロンプト
Day2の3. フィードバックスクリプト: 各ボタンに対応するC#スクリプトを作成し、OnPointerDownイベントなどで色を明るくする処理と、音を鳴らす処理(AudioSource.Play())を実装する。 について、スクリプトを教えてください。

回答

Day 2の重要なステップですね!

UnityのUIボタン(Buttonコンポーネント)はクリックで使えますが、今回はプレイヤーが「弾いている感」を出すために、押している間にフィードバックを与えるIPointerDownHandlerとIPointerUpHandlerインターフェースを使用するのが最適です。

ここでは、ボタンの色と音を管理するためのC#スクリプトの例(BellButton.cs)を提示します。

🔔 BellButton.cs スクリプト例
このスクリプトは、Day 1で作成した4つのボタンそれぞれにアタッチして使用します。

C#

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems; // IPointerDownHandlerなどのために必要

public class BellButton : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
    // --- インスペクターから設定する変数 ---

    [Header("コンポーネント")]
    // ボタンの見た目(Imageコンポーネント)への参照
    private Image buttonImage;
    // 鳴らすための音源(AudioSourceコンポーネント)への参照
    private AudioSource bellAudio; 

    [Header("色の設定")]
    // 通常時の色(インスペクターでボタンの色と一致させておく)
    public Color defaultColor = Color.white; 
    // 押された時の明るい色(フィードバック用)
    public Color pressedColor = Color.yellow; 

    // --- ゲームマネージャーとの連携変数(Day 4以降で使用) ---

    [Header("ゲーム設定")]
    // どのボタンか識別するためのID (インスペクターで 0, 1, 2, 3 のいずれかを設定)
    public int bellID; 
    
    // Day 4で作成する予定の GameManager スクリプトへの参照
    private GameManager gameManager; 
    
    // --- 初期設定 ---

    void Start()
    {
        // コンポーネントを取得
        buttonImage = GetComponent<Image>();
        bellAudio = GetComponent<AudioSource>();

        // 初期の色の設定
        buttonImage.color = defaultColor;
        
        // GameManagerを探して参照を取得 (Day 4での連携に備える)
        gameManager = FindObjectOfType<GameManager>();
        if (gameManager == null)
        {
            Debug.LogError("GameManagerが見つかりません。");
        }
    }

    // --- プレイヤーの入力処理 ---

    // マウス/指でボタンが押された瞬間に呼ばれる
    public void OnPointerDown(PointerEventData eventData)
    {
        // 1. 色を明るくする(フィードバック)
        SetPressedVisual();

        // 2. 音を鳴らす
        PlayBellSound();
        
        // 3. (Day 4連携) GameManagerに「このボタンが押された」と伝える
        if (gameManager != null)
        {
            gameManager.PlayerInput(bellID);
        }
    }

    // マウス/指がボタンから離れた瞬間に呼ばれる
    public void OnPointerUp(PointerEventData eventData)
    {
        // 色を通常時に戻す
        SetDefaultVisual();
    }

    // --- 視覚/聴覚フィードバックの関数 ---
    
    // ベルを鳴らす
    public void PlayBellSound()
    {
        if (bellAudio != null)
        {
            // 音を再生
            bellAudio.Play();
        }
    }

    // 押された時の見た目にする(明るい色)
    public void SetPressedVisual()
    {
        buttonImage.color = pressedColor;
    }

    // 通常時の見た目にする(デフォルト色)
    public void SetDefaultVisual()
    {
        buttonImage.color = defaultColor;
    }
}

スクリプトの適用手順(Day 2作業)
スクリプトの作成: UnityでC#スクリプトを新しく作成し、名前を BellButton にします。

コードのコピー: 上記のコードをコピー&ペーストします。

コンポーネントの追加:

Hierarchyウィンドウで、4つのボタンGameObjectを全て選択します。

Inspectorウィンドウの「Add Component」から、作成した BellButton スクリプトを追加します。

重要: 各ボタンにAudioSourceコンポーネントも追加し、対応するベルのSE(Audio Clip)をセットします。

インスペクターの設定(重要):

Bell ID: 各ボタンの BellButton コンポーネントで、異なるID(例:赤ボタンに 0、青ボタンに 1、緑ボタンに 2、黄ボタンに 3)を設定します。

Colors: Default Color と Pressed Color を設定します。(例: 赤ボタンの Pressed Color を明るいオレンジにするなど)

これで、ボタンを押すと色が変わり、音が鳴るようになります。もし、GameManager.cs のスクリプトも合わせて必要でしたら、Day 3の準備として作成をサポートします。

こんな感じに丁寧に答えてくれました。
プログラミング部分では、関数の説明もしっかり記入されていて分かりやすかったです。

結果
制作時間:15分

3日目

▽ Geminiの回答

Day 3: システムシーケンス(お手本)ロジックの実装 (約2時間)
目標: コンピュータがランダムな順番を生成し、それをプレイヤーに示すロジックを完成させる。
Unityタスク

  1. シーケンス配列の定義: GameManager.cs内に、システムの順番を保持するListまたはListを定義する。
  2. 「お手本を再生する」関数: GenerateSequence() 関数内で、Random.Range() を使用して配列に新しいボタンIDをランダムに追加する。
  3. コルーチン (IEnumerator) の使用: ボタンを順番に光らせる処理は、時間差が必要なためコルーチンを使用して実装し、ボタン間の待機時間(yield return new WaitForSeconds(0.5f)など)を設ける。
  4. ゲーム開始機能: 開始ボタンを押すと、シーケンス生成と再生コルーチンがスタートするようにする。

成果: ゲーム開始後、システムがランダムな順番でボタンを鳴らして光らせるデモンストレーションが実行される。

◯ プログラミング

長くなるため省略しますが、2日目同様このスクリプトを教えてくださいと雑に投げても回答してくれました。
また、要素が不足していてエラーになっても、エラー内容をGeminiに送ると改善案を出してくれました。

結果
制作時間:10分

4日目

▽ Geminiの回答
Day 4: プレイヤー入力とゲームフローの実装 (約2時間)

目標: プレイヤーの入力チェックと、レベルアップ・ゲームオーバーの処理を実装する。
Unityタスク

  1. 入力受付とチェック: プレイヤーがボタンを押したとき、GameManagerの関数を呼び出し、現在の入力とシステムのシーケンスを比較する。
  2. 正解時の処理: プレイヤーがシーケンスを全て正しく完了した場合、レベルアップ関数を呼び出し、スコアを更新し、GenerateSequence()を再度実行する。
  3. ゲームオーバー処理: 入力が間違っていた場合、ゲームオーバー状態にし、スコアをリセットし、UIで「GAME OVER」などのメッセージを表示する。
  4. UIテキストの利用: TextまたはTextMeshProコンポーネントをCanvasに追加し、現在のレベルやスコアを表示する機能を追加する。

成果: ゲームとして完全に遊べる状態になり、レベルアップとゲームオーバーのフローが機能する。

4日目までくるとしっかりゲームとして遊べる状態になりました。

結果
制作時間:10分

5日目

Day 5: クリスマス装飾と仕上げ (約1.5〜2時間)
目標: クリスマス要素の追加、UIの調整、バグ修正を行い、完成させる。
Unityタスク

  1. 背景と雰囲気: シーンの背景色をクリスマスカラーに変更するか、雪のテクスチャなどの簡単なスプライトを配置する。
  2. ボタンのテクスチャ変更: ボタンの見た目をベルやオーナメントの形に変更する(シンプルなスプライトで十分)。
  3. 最終調整: 各ボタンの音量、点滅の速度(コルーチンの待機時間)、難易度(最初のレベルや増加スピード)を調整する。
  4. バグ修正とビルド: 全ての機能をテストし、エラーやバグを修正した後、PC/Web向けなどの実行可能ファイル(ビルド)を作成する。

成果: クリスマスらしい見た目の「クリスマスの曲を弾く」ゲームが完成する。

最終日は装飾と仕上げでした。
ここまでGeminiの回答通り作成しており、出来上がりを見てもう少し要素を加えてみようと"引く演出"や、"リザルト表示" を追加しました。

結果
制作時間:15分+おまけ30分

完成したもの

jingle_gif.gif

unityroomにて、限定公開を行なっています。
よければ動かしてみてください。
https://unityroom.com/games/jingleplay

最後に

慣れている人であれば、約2時間で簡単なゲームが作れるというのは利点だと感じました。(プログラム部分をほぼ修正せず動きました)
もし時間が余ればブラッシュアップも可能になるため、最初の遊び部分を作成するには便利でした。
また、実際にAI任せで作ってみて、ゲーム制作初心者の方にゲーム作りの楽しさを簡単に提供しやすいのではないかと感じました。
今回はUnityメインで制作を行いましたが、他の制作環境になった際にも活用していきたいです!

CYBIRD Advent Calendar 2025 、20日目は @cy-tatsuya-sakai さんの「【Unity】UGUI Shadersサンプルを使ったお手軽UI描画」です。
お楽しみに!

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?