バーチャル3Dクリエイター神部まゆみです(*^-^*)
この記事はunityでタイトル画面のメニュー選択を実装したメモです。
セーブデータをロードする仕組みを先に作ろうとしたけど、スタートのメニューを実装しないといけないっぽいので先にこっちをやります。
動作確認した最新バージョンは Unity6000.0.32 です。
やりたいこと:タイトル画面でメニュー選択できるようにする
前回タイトル画面からゲーム画面に遷移するところまではやったけど、キー入力されたらゲーム画面に遷移するだけのシンプルなものだった。
今回はNewGame,Continue,Optionのメニューを作って、それぞれ動作を割り当てたいですね。
まぁまだセーブとかオプション画面とかは作っていないので、NewGameを選択したらゲーム画面に遷移するだけのシンプルなやつを作ります。
ChatGPTパイセンに聞いてみる
とりあえず彼に聞いておけばなんとかなるだろう…。




UnityのUIシステムを使えば、簡単にメニューを作ることができます。以下は、UnityのUIシステムを使ってメニューを作成する基本的な流れです。
UIメニューの作成方法
1. Canvasの作成
- まず、Hierarchyウィンドウで右クリックして、
UI > Canvas
を作成します。Canvas
は、UI要素を管理するためのコンテナです。すべてのUI要素はこのCanvasの子要素として配置されます。
2. テキストやボタンの追加
次に、New GameやContinueなどのUIボタンを追加します。
- Hierarchyウィンドウで
Canvas
を右クリックし、UI > Button
を選択します。- これにより、ボタンがCanvasの子オブジェクトとして追加されます。
- Textを含んだボタンが作成されるので、Inspectorでテキストを「New Game」や「Continue」などに変更します。
- ボタンを追加したら、Inspectorウィンドウで
RectTransform
の設定を使ってボタンの位置やサイズを調整します。 - 同じ手順で、ContinueやOptionなどのボタンも追加します。
3. ボタンのアクションを設定
ボタンがクリックされた時に実行されるアクションを設定します。
- ボタンを選択し、Inspectorウィンドウの下部にある
OnClick()
イベントにスクリプトを登録します。 OnClick()
イベントに、先ほどのTitleScreen.cs
スクリプトのメソッドを設定します。- 例えば、
New Game
ボタンにはTitleScreen.OnNewGame
メソッドを設定し、Continue
ボタンにはTitleScreen.OnContinue
を設定します。
- 例えば、
4. ボタンにスクリプトを紐づける
以下のスクリプトを使って、各ボタンの動作を制御します。
TitleScreen.cs
using UnityEngine;
using UnityEngine.SceneManagement;
public class TitleScreen : MonoBehaviour
{
public void OnNewGame()
{
SceneManager.LoadScene("GameScene");
}
public void OnContinue()
{
if (SaveSystem.HasSavedData())
{
SceneManager.LoadScene("GameScene");
}
else
{
Debug.Log("No saved data found.");
}
}
public void OnOption()
{
Debug.Log("Option menu selected");
// Optionメニューを開く処理など
}
}
5. レイアウトを整える
- Vertical Layout GroupやHorizontal Layout Groupなどのレイアウトツールを使うと、ボタンを自動的に整列させることができます。
Canvas
内にEmpty GameObject
を作成し、これにVertical Layout Group
を追加して、その中にボタンを配置することで、簡単に整然としたメニューを作成できます。
動作確認
すべて設定したら、プレイモードでボタンをクリックして、New GameやContinueの動作を確認してみてください。
これで、UnityのUIシステムを使ったシンプルなメニューを作成し、各ボタンに対応するアクションを設定することができます。
……以上ここまで。
UIのボタンを追加すれば、OnClick()でスクリプトに書いたメソッドを読み込んで、シーン遷移させたり制御できるみたいですね。
まぁなんとかなりそうかな。
さっそくやってみる
ChatGPT氏はたまにちょっと間違ってたりするから動かせるか不安ですが、まぁなんとかなると思うのでやってみます。
タイトルのメニューはVertical Layout Groupで簡単に綺麗に並べられるっぽい
まずUIでキャンバスを追加、その下に空のオブジェクトを追加してMenuContainerみたいな名前にしておきます。
MenuContainerにVertical Layout Group(垂直レイアウトグループ)コンポーネントを追加します。
↓中途半端に日本語化されているのか、検索では日本語で出るけど追加すると英語になってますw
これでMenuContainerの子のUI要素は勝手に整列して並べてくれるっぽいです。便利すぎる…Σ(゚Д゚)
MenuContainerの上で右クリックしてボタンを三つ追加します。これで名前を変えればOK。
ボタンを押したらスクリプトに設定したメソッドが実行されるようにする
まず↓のスクリプトを作成して、MenuContainerにアタッチします。
using UnityEngine;
using UnityEngine.SceneManagement;
public class TitleScreen : MonoBehaviour
{
public void OnNewGame()
{
SceneManager.LoadScene("GameScene");
}
public void OnContinue()
{
if (SaveSystem.HasSavedData())
{
SceneManager.LoadScene("GameScene");
}
else
{
Debug.Log("No saved data found.");
}
}
public void OnOption()
{
Debug.Log("Option menu selected");
// Optionメニューを開く処理など
}
}
各ボタンの クリック時() ってところにMenuContainerを指定し、TitleScreen.csの各メソッドを割り当てます。
日本語化してるから クリック時() になってるけど、OnClick()のことです。
遷移できるようにシーンを追加しておく
現段階ではContinueとOption画面は作っていないので、NewGameを押した時だけゲームシーンに遷移するようにしておきます。
とりあえず私はJU TPS3アセットで作ったゲームシーンを割り当てておきますが、適当に空のシーンを作って名前をつけて保存しておけば一応遷移の確認はできます。


シーン遷移させるには、 ファイル⇒ビルド設定 のところでシーンを追加しておく必要があります。


これで動いた!
ちゃんと動作しましたね。
背景に動画を流したり、文字を大きくしたりとかボタンの背景画像を変えたりもできます。
つづく?
結構簡単にできて良かった。
ゲームってこうやって作っていけばいいのか…。
次はセーブデータを作ってコンティニューできるようにしてみたいですね。
まぁぼちぼちいじってみます(*^-^*)