個人ゲーム開発日報|20を言ったら負けゲーム

ゲーム開発
スポンサーリンク

今回は、「20を言ったら負けゲーム」をUnityで作ってみます。

20を言ったら負けゲームとは

20を言ったら負けゲームとは、1から、最大3つの数字を交互に足して言って、20を言った方が負けと言うシンプルなゲームです。

小さい頃によく遊んだのを覚えています。

このゲームを実装します。

開発の要件を決める

まず、どうやって開発するかをまとめます。ここをしっかりまとめると、このレベルの実装ならChatGPTさんが組み立ててくれるでしょう。

<ルール>

  1. 一から順に数字を言う。
  2. 1つ以上3つ以下の数字を一度に言える
  3. 20を言ったら負け

<実装する機能>

  1. ・先攻、後攻を決める。
  2. 自分のターンでは1ずつ数字が増えるボタンを押す(最大3)
  3. 敵(AI)は、1~3をランダムに選ぶ
  4. 20になったら負け

これをChatGPTさんに投げれば実装する方法を教えてくれるはずです。

Unityで「20を言ったら負けゲーム」を実装する手順まとめ

以下の手順でUnityプロジェクトをセットアップし、ゲームを実装します。

1. プロジェクトのセットアップ

  1. Unityを開き、新しいプロジェクトを作成します。
  2. プロジェクトの名前を TwentyGame とし、テンプレートは 2D を選択します。

2. Start Sceneの作成

  1. シーンの作成
  • File > New Scene から新しいシーンを作成し、 StartScene と名前を付けます。
  • File > Save Scenes でシーンを保存します。
  1. UIの設定
  • Hierarchy ウィンドウで右クリックし、 UI > Canvas を選択してキャンバスを作成します。
  • キャンバスの下に、 UI > Text - TextMeshPro を追加して、ゲームのルールを説明するテキストを設定します。
  • キャンバスの下に、 UI > Button を追加して、ゲーム開始ボタンを設定します。
  1. UIコンポーネントの設定
  • ルール説明テキスト
    • Text : ゲームのルール: 1.一から順に数字を言う。2.1つ以上3つ以下の数字を一度に言える。3.20を言ったら負け。
    • Font Size : 24
    • Alignment : Center
  • ゲーム開始ボタン
    • Text : ゲーム開始
    • Font Size : 24
    • Width : 160
    • Height : 40

3. Game Sceneの作成

  1. シーンの作成
  • File > New Scene から新しいシーンを作成し、 GameScene と名前を付けます。
  • File > Save Scenes でシーンを保存します。
  1. UIの設定
  • Hierarchy ウィンドウで UI > Canvas を選択してキャンバスを作成します。
  • キャンバスの下に以下のUI要素を追加します。
    • Text – TextMeshPro: 現在の数字表示
    • Text – TextMeshPro: 結果表示
    • Text – TextMeshPro: ターン表示
    • Button: 数字を増やすボタン (Increase Button)
    • Button: ターン終了ボタン (End Turn Button)
    • Button: リセットボタン (Reset Button)
  1. UIコンポーネントの設定
  • 現在の数字表示テキスト
    • Name : CurrentNumberText
    • Text : Current Number: 0
    • Font Size : 24
    • Alignment : Center
    • RectTransformWidth300, Height50 に設定し、位置を画面上部中央に配置します。
  • 結果表示テキスト
    • Name : ResultText
    • Text : “
    • Font Size : 24
    • Alignment : Center
    • RectTransformWidth300, Height50 に設定し、位置を画面中央に配置します。
  • ターン表示テキスト
    • Name : TurnText
    • Text : Player's Turn
    • Font Size : 24
    • Alignment : Center
    • RectTransformWidth300, Height50 に設定し、位置を CurrentNumberText の上部に配置します。
  • 数字を増やすボタン
    • Name : IncreaseButton
    • Text : Increase Number
    • Font Size : 24
    • Width : 200
    • Height : 50
    • 位置を画面下部中央に配置します。
  • ターン終了ボタン
    • Name : EndTurnButton
    • Text : End Turn
    • Font Size : 24
    • Width : 200
    • Height : 50
    • 位置を IncreaseButton の右側に配置します。
  • リセットボタン
    • Name : ResetButton
    • Text : Reset
    • Font Size : 24
    • Width : 200
    • Height : 50
    • 位置を IncreaseButton の左側に配置します。

4. スクリプトの作成

  1. GameManager.csの作成
  • Assets フォルダで右クリックし、 Create > C# Script を選択して GameManager.cs を作成します。
  • 以下のコードを GameManager.cs に記述します。
using UnityEngine;
using TMPro;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Collections;

public class GameManager : MonoBehaviour
{
    public TMP_Text currentNumberText;
    public TMP_Text resultText;
    public TMP_Text turnText;
    public Button increaseButton;
    public Button endTurnButton;
    public Button resetButton;

    private int currentNumber = 0;
    private bool isPlayerTurn = true;
    private int playerIncrement = 0;

    void Start()
    {
        StartGame();
    }

    void StartGame()
    {
        currentNumber = 0;
        isPlayerTurn = (Random.Range(0, 2) == 0);
        playerIncrement = 0;
        UpdateUI();
        if (!isPlayerTurn) StartCoroutine(AITurn());
    }

    public void OnIncreaseButtonClick()
    {
        if (!isPlayerTurn) return;
        playerIncrement++;
        currentNumber++;
        CheckGameOver();
        UpdateUI();

        if (playerIncrement >= 3)
        {
            EndPlayerTurn();
        }
    }

    public void OnEndTurnButtonClick()
    {
        if (!isPlayerTurn || playerIncrement == 0) return;
        EndPlayerTurn();
    }

    void EndPlayerTurn()
    {
        isPlayerTurn = false;
        playerIncrement = 0;
        StartCoroutine(AITurn());
    }

    IEnumerator AITurn()
    {
        turnText.text = "AI's Turn";
        yield return new WaitForSeconds(1);
        int aiIncrement = Random.Range(1, 4);
        for (int i = 0; i < aiIncrement; i++)
        {
            currentNumber++;
            CheckGameOver();
            if (currentNumber >= 20) break;
            yield return new WaitForSeconds(0.5f);
        }
        isPlayerTurn = true;
        UpdateUI();
    }

    void CheckGameOver()
    {
        if (currentNumber >= 20)
        {
            resultText.text = isPlayerTurn ? "AI Wins!" : "Player Wins!";
            DisableButtons();
        }
    }

    void UpdateUI()
    {
        currentNumberText.text = "Current Number: " + currentNumber;
        turnText.text = isPlayerTurn ? "Player's Turn" : "AI's Turn";
        increaseButton.interactable = isPlayerTurn;
        endTurnButton.interactable = isPlayerTurn && playerIncrement > 0;
    }

    void DisableButtons()
    {
        increaseButton.interactable = false;
        endTurnButton.interactable = false;
        resetButton.interactable = true;
    }

    public void OnResetButtonClick()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().name);
    }
}

5. UIコンポーネントのスクリプトへの接続

  1. Hierarchy ウィンドウで Canvas を選択し、 Inspector ウィンドウで GameManager スクリプトを確認します。
  2. GameManager スクリプトのプロパティに以下を設定します。
  • CurrentNumberText : CurrentNumberText テキストオブジェクトをドラッグしてドロップ
  • ResultText : ResultText テキストオブジェクトをドラッグしてドロップ
  • TurnText : TurnText テキストオブジェクトをドラッグしてドロップ
  • IncreaseButton : IncreaseButton ボタンオブジェクトをドラッグしてドロップ
  • EndTurnButton : EndTurnButton ボタンオブジェクトをドラッグしてドロップ
  • ResetButton : ResetButton ボタンオブジェクトをドラッグしてドロップ
  1. ResetButton ボタンに OnClick イベントを設定します。
  • ResetButton を選択し、 OnClick イベントに GameManager.OnResetButtonClick メソッドを設定します。

6. シーンのビルド設定

  1. シーンの保存
  • File > Save でシーンを保存します。
  1. シーンのビルド設定
  • File > Build Settings を開き、 Scenes In Build セクションに StartSceneGameScene を追加します。

7. ゲームのテスト

  1. Unityエディタの Play ボタンを押して、ゲームをテストします。

以上で、「20を言ったら負けゲーム」の実装手順が完了です。これに従ってUnityでゲームを実装してください。

基本機能の完成

上記の方法で、基本機能が完成しました。

基本はできましたが、これではゲームとして味気ないので、次回からはアニメーションや効果をつけたいと思います。

今回はここまで。

<過去の記事>

タイトルとURLをコピーしました