OPとEDだけのシンプルゲームを作ろう①

本記事の要約

  • ChatGPTに教えて貰いながら、OPとEDだけのシンプルゲームを作ってみました。
  • ……が、今回できたのは全く操作ができないものに。次回に続きます。

技術猫たちのおしゃべり

それじゃあ、遂に実際のゲームを作り始めるっす!

あれ、前回の終わりは不安そうだったけど、何だか今日は元気だね。

だって、これまで計画とかマイルストーンとか、机上の話ばかりだったっす。僕も流石に、手を動かしたくなったっすよ。

あっはっは、それは確かに。大事な話だけど、退屈だったかもしれないね。

今日はバリバリUnityを触るっすよ!僕の隠された実力、とことんお見せするっす!

はじめに

という訳で、おはようございます、こんにちは、こんばんわ。
チャ坊主くんが文章書くの苦手らしいから、今回もオジサンことハチ荘長が解説を書いていくよ。

本記事では、『OPとEDだけのシンプルゲーム製作』を記載しているよ。
よければ見ていってくれると嬉しいな。

それと、本記事は前回の『Unityゲーム制作について勉強しよう!~マイルストーン~』から続き物になっているから、
良かったらそっちの記事も見てみてね。


今回のシンプルゲーム完成基準

今回の基準は簡単だね。一応ここに明記しておくよ。

完成基準:ゲーム起動⇒OP⇒何らかの操作⇒EDが実施できる。

本当、基礎の基礎って感じがするっすね。学校の授業みたいっす。

ほとんど似たような状況だからね。それじゃあ、早速ChatGPT先生に教えて貰いながら作業しようか。

了解っす!


GPT Builderで、Unity勉強専用のGPTを作ってみた

ChatGPTに教えて貰う前に。毎度毎度状況を説明するのも大変なので、今回のUnity勉強専用のGPTを作ったよ。
参考までに、GPTの設定画面のスクショを載せておくね。


教えてChatGPT!~まずは何をする?~

まず何をすればいいか、早速ChatGPTくんに聞いてみたよ。

ChatGPT会話履歴

今回は、以下のシンプルゲームを作りたいです。
「ゲーム起動⇒OP⇒何らかの操作⇒EDが実施できる」
今回はインストールから始めるので、そこから完成までの手順を教えてください。

もちろん、Unityでシンプルなゲームを作る手順をご案内いたします。まずはUnityのインストールから始めましょう。

1. Unityのインストール

  1. Unity Hubのダウンロード: Unityの公式サイトからUnity Hubをダウンロードしてください。
  2. インストール: ダウンロードしたファイルを開き、指示に従ってインストールします。
  3. Unityエディタのインストール: Unity Hubを開き、「Installs」タブからUnityエディタのバージョンを選んでインストールします。

2. プロジェクトの作成

  1. 新しいプロジェクトを作成: Unity Hubで「New」をクリックし、プロジェクト名を入力して「Create project」をクリックします。
  2. テンプレートの選択: 今回はシンプルなゲームなので、「2D」または「3D」のテンプレートを選択します。

3. ゲームの基本設定

  1. シーンの準備: プロジェクトを開いたら、初めに表示されるシーンを使用します。
  2. ゲームオブジェクトの追加: 「GameObject」メニューから必要なオブジェクトを追加します(例:カメラ、ライト)。

4. シンプルな操作の実装

  1. プレイヤーの作成: 「GameObject」→「2D Object」→「Sprite」でプレイヤーとなるオブジェクトを作成します。
  2. 操作スクリプトの追加: プレイヤーに動きをつけるために、C#スクリプトを作成し、プレイヤーオブジェクトにアタッチします。

5. シンプルなUIの実装

  1. UIの追加: 「GameObject」→「UI」→「Text」でスタート画面やエンド画面のテキストを作成します。
  2. シーン間の遷移: シーンの開始と終了を管理するためのスクリプトを作成します。

6. ゲームのビルド

  1. ビルド設定: 「File」→「Build Settings」でプラットフォームを選択し、「Build」をクリックしてゲームをビルドします。
  2. ゲームの実行: ビルドが完了したら、生成された実行ファイルをダブルクリックしてゲームを起動します。

以上が基本的な流れです。Unityでゲームを作る際には、自分のアイデアを形にすることが重要です。初めてのプロジェクトなので、シンプルに始めて徐々に複雑さを増していくと良いでしょう。途中でわからないことがあれば、いつでも質問してください。

うわChatGPTすごい。

流石だね。とりあえずは教えて貰った通りに進めてみようか。


Unityインストール完了と余談

うん。UnityのダウンロードとUnity Personalライセンスの取得ができたね。特に問題無さそうだ。

荘長、荘長。僕一個気づいちゃったことがあるんすけど。

えっ、何々?何か問題あった?

……おや?

これもしかして、ChatGPT必要ないんじゃ

……あー、えーっと、うん。あれ、そうかも?

どうするっすか?今なら、まだ方針転換できるっすけど。

うーん。でも、ちょっとした分からない事や困った事が聞けるのもChatGPTの魅力だからなぁ。
……ひとまずはこのままChatGPTに教えて貰う形で、気が向いたらこのコースを活用するって形で、一旦進めていいかな?

了解っす!教えて貰えるんなら、僕としてはどっちでもOKっす!

うん、ありがとう。……それにしても、Unityくんもサポートが厚いんだねぇ。最近の子たちはみんな凄いや。


教えてChatGPT! ~Q&A~

ということで、さっきChatGPTくんに教えて貰った手順を進めてたんだけど、やっぱりいくつか分からない物が出てきちゃったんだ。
分からない物が出てくるたびに、ChatGPTくんに解決法を聞いたから、その会話履歴を下に載せるね。

ChatGPT会話履歴

「4.シンプルな操作の実装」にて、Spriteとして9-Sliceを作成しました。このオブジェクトにC#スクリプトをアタッチするということですが、これはどうすればいいですか?具体的なC#スクリプトも提示してください。

9-Slice SpriteにC#スクリプトをアタッチする手順と、シンプルな操作スクリプトの例を以下に説明します。

  1. Unityエディタでのスクリプト作成:
    • Unityエディタを開いて、あなたのプロジェクトをロードします。
    • プロジェクトウィンドウで右クリックし、「Create」→「C# Script」を選択します。
    • 新しいスクリプトに名前を付けます(例:PlayerMovement)。
  2. スクリプトの編集:
    • 作成したスクリプトをダブルクリックして、コードエディタ(Visual Studioなど)で開きます。
    • 下記に示すサンプルコードを参考に、スクリプトを編集します。
  3. スクリプトのアタッチ:
    • Unityに戻り、Hierarchyウィンドウで9-Slice Spriteが含まれるゲームオブジェクトを選択します。
    • スクリプトファイルを選択して、Hierarchyウィンドウのゲームオブジェクトにドラッグ&ドロップします。
    • ゲームオブジェクトにスクリプトがアタッチされたことを、Inspectorウィンドウで確認できます。

シンプルな操作スクリプトの例
ここでは、基本的な左右の移動を実装するスクリプトの例を示します。

using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float moveSpeed = 5.0f;

    void Update()
    {
        float moveX = Input.GetAxis("Horizontal") * moveSpeed * Time.deltaTime;
        transform.position = new Vector2(transform.position.x + moveX, transform.position.y);
    }
}

このスクリプトでは、キーボードの左右の矢印キー(またはAとDキー)でSpriteを左右に動かすことができます。moveSpeed変数で移動速度を調整できます。
この基本的なスクリプトをアタッチし、Unityエディタでゲームを実行すると、9-Slice Spriteがキーボード入力に応じて移動します。

ChatGPT会話履歴

「5.シンプルなUIの実装」にて、 シーンの開始と終了を管理するためのスクリプトを作成するとのことですが、これは具体的に何をすればいいですか? スクリプトも提示してください。

「シンプルなUIの実装」でのシーンの開始と終了を管理するスクリプトは、ゲームのスタート画面とエンド画面の制御を行います。具体的には、ゲームを開始するためのボタンを押すとメインゲームシーンに遷移し、ゲームが終了したときにエンド画面に遷移する機能を実装します。

必要なステップ

  1. Unityプロジェクトに複数のシーンを準備:
    • スタート画面用のシーン(例:StartScene)。
    • メインゲームのシーン(例:GameScene)。
    • エンド画面のシーン(例:EndScene)。
  2. シーン遷移のスクリプト作成:
    • Unityエディタで新しいC#スクリプトを作成(例:SceneController)。
  3. シーン遷移のスクリプト編集:
    • 以下のサンプルコードを使用してスクリプトを編集します。
using UnityEngine;
using UnityEngine.SceneManagement;

public class SceneController : MonoBehaviour
{
    // ゲームを開始する関数
    public void StartGame()
    {
        SceneManager.LoadScene("GameScene"); // メインゲームシーンに遷移
    }

    // ゲームを終了する関数
    public void EndGame()
    {
        SceneManager.LoadScene("EndScene"); // エンド画面に遷移
    }
}

このスクリプトでは、StartGameメソッドでメインゲームシーンに、EndGameメソッドでエンドシーンに遷移します。適切なシーン名に置き換えてください。

スクリプトの使用方法

  • スタート画面のUIボタンにStartGameメソッドをアタッチし、プレイヤーがボタンをクリックするとゲームが開始されます。
  • ゲームシーンで特定の条件(例えばゲームオーバー)が満たされた時にEndGameメソッドを呼び出し、エンドシーンに遷移します。

この基本的なシーン管理スクリプトを使って、ゲームのフローを制御できます。

ChatGPT会話履歴

「スタート画面のUIボタン」とは何を指していますか?先ほど「GameObject」→「UI」→「Text」で生成したTextオブジェクトですか?

「スタート画面のUIボタン」とは、プレイヤーがクリックすることでゲームを開始するためのインタラクティブなUI要素を指します。先ほどの「GameObject」→「UI」→「Text」で生成したTextオブジェクトではなく、Unityにおける「Button」コンポーネントを使用します。Textオブジェクトは、主に画面上にテキスト情報を表示するために使われますが、Buttonオブジェクトはユーザーの入力(クリックなど)に反応します。

ボタンの作成手順

  1. ボタンの追加:
    • UnityエディタのHierarchyウィンドウで、右クリックし「UI」→「Button」を選択します。
    • これにより、Buttonオブジェクトとそれを包含するCanvasオブジェクトがシーンに追加されます。
  2. ボタンのカスタマイズ:
    • Hierarchyウィンドウで新しく作成されたButtonオブジェクトを選択します。
    • Inspectorウィンドウでボタンのプロパティを調整します(テキスト、色、サイズなど)。
  3. テキストの追加:
    • ボタンの下には通常、Textオブジェクトが含まれています。これを選択し、表示したいテキスト(例:”Start Game”)を設定します。
  4. ボタンにアクションを割り当てる:
    • ボタンを選択した状態で、Inspectorウィンドウの下部にある「On Click ()」セクションを見ます。
    • 「+」ボタンをクリックして新しいイベントを追加します。
    • シーン内のオブジェクト(この場合は、先ほど作成したSceneControllerスクリプトを含むオブジェクト)をイベントの空のスロットにドラッグ&ドロップします。
    • ドロップダウンメニューからSceneControllerスクリプトのStartGameメソッド(または適切なメソッド)を選択します。

これで、ボタンをクリックするとStartGameメソッドが実行され、ゲームシーンに遷移するように設定されます。同様の方法で他のUI要素とインタラクションを設定することもできます。

ChatGPT会話履歴

「シーン内のオブジェクト(先ほど作成したスクリプトを含むオブジェクト)」とは、どのオブジェクトのことでしょうか。作成方法が明示されていないようであれば、作成方法を教えてください。

「シーン内のオブジェクト(先ほど作成したスクリプトを含むオブジェクト)」とは、シーン内に存在し、先に作成したSceneControllerスクリプトがアタッチされているオブジェクトを指します。このスクリプトを含むオブジェクトは、シーン遷移を管理するために使用されます。もしまだそのようなオブジェクトを作成していない場合は、以下の手順で作成できます。

シーンコントローラオブジェクトの作成方法

  1. 新しい空のゲームオブジェクトの作成:
    • UnityエディタのHierarchyウィンドウで右クリックし、「Create Empty」を選択します。
    • これにより、新しい空のゲームオブジェクトがシーンに追加されます。
  2. オブジェクトの名前付け:
    • 新しく作成された空のオブジェクトを選択し、Inspectorウィンドウでその名前を「SceneController」などといったわかりやすい名前に変更します。
  3. スクリプトのアタッチ:
    • 先に作成したSceneControllerスクリプトを選択して、Hierarchyウィンドウの「SceneController」オブジェクトにドラッグ&ドロップします。
    • これにより、スクリプトがオブジェクトにアタッチされます。

スクリプトをUIボタンに割り当てる

これで、シーンコントローラオブジェクトが準備され、スクリプトがアタッチされました。次に、UIボタンにシーン遷移のアクションを割り当てることができます。

  • 「On Click ()」イベントセクションで「+」ボタンをクリックして新しいイベントを追加します。
  • 作成した「SceneController」オブジェクトをイベントの空のスロットにドラッグ&ドロップします。
  • ドロップダウンメニューからSceneControllerスクリプトのStartGameメソッドを選択します。

これで、ボタンをクリックするとStartGameメソッドが呼び出され、指定したゲームシーンに遷移するようになります。同じ方法で、ゲーム終了時のシーン遷移も設定できます。

ChatGPT会話履歴

「6. ゲームのビルド」にて、プラットフォームに「Windows」を選択して「Build」を押下すると、フォルダ選択画面が出てきました。「Assets」や「Library」のあるフォルダ階層なのですが、どのフォルダを選択するのが適切ですか。

Unityでゲームをビルドする際にフォルダを選択するステップは、ビルドされたゲームファイル(実行可能ファイル)を保存する場所を指定するためのものです。ここでの重要なポイントは、既存のプロジェクトフォルダ(「Assets」や「Library」が含まれるフォルダ)ではなく、新しい、または別の場所にビルドファイルを保存することです。これにより、プロジェクトファイルとビルドされたゲームファイルが混在することを避け、整理しやすくなります。

ビルドフォルダの選択手順

  1. 新しいフォルダの作成:
    • ビルドプロセスでフォルダ選択画面が表示されたら、「新しいフォルダ」を作成するオプションを選択します。
    • この新しいフォルダには、例えば「MyGame_Build」のような分かりやすい名前を付けます。
  2. ビルドフォルダの選択:
    • 作成した「MyGame_Build」フォルダを選択して、その中にゲームのビルドを保存します。
  3. ビルドの開始:
    • フォルダを選択した後、「選択したフォルダ」をクリックしてビルドプロセスを開始します。

注意点

  • プロジェクトフォルダ外にビルドを保存することで、プロジェクトのソースファイルと実行可能ファイルが区別され、管理が容易になります。
  • ビルドが完了すると、指定したフォルダにゲームの実行ファイル(.exeファイルなど)が生成されます。
  • ビルドされたゲームを実行するには、生成された実行ファイルをダブルクリックします。

これらのステップに従って、ゲームのビルドを進めることができます。


ひとまずビルドはできたけど……

ここまでのやり取りでビルドが完了し、exeファイルが生成されたよ。

正直、色んな設定が足りていない気がするけど、現状確認のためにもとりあえずexeファイルを実行してみよう。

うわっ、怖! ホラーゲーム画面か何かですかこれ!?

やっぱり、色々と設定が足りていないみたい……。ボタンを押しても何も反応しないし。
薄緑はスタートボタン、深緑はエンドボタンとして作ったから、表示はされているね。□は多分、文字化けか何かかな。

何にせよ、今のままでは完成とは言えない事が分かったね。
今回は長くなったからここで終わるけど、次回で問題を解消して、完成まで持っていきたいね。


次回記事の予定

いやー、一筋縄では行かなかったね。完成は次回まで持ち越しになっちゃったよ。

ChatGPT、結構教えてくれることに粗があるっすね。必要な情報が所々抜けてたっすよ。

表示文字量の都合なのかなぁ。詳しく説明しすぎると表示しきれないから、要所要所省いてる感じ。

まあ、聞けばちゃんと教えてくれるんすけどね。
それにChatGPTとの対話は荘長に任せてたんで、僕はそんなに大変じゃなかったっすけど。

いや、チャ坊主くんが居ないと、そもそも何が分からないのかが分からないから。
次回も引き続き、こんな感じでよろしくね。

次回は12/8(土)に更新予定っす。よろしくお願いしまっす!