ダークモード
第12回 タイトル画面
この回でつくるもの:「SPACE SHOOTER」のタイトル画面を作ります。START ボタンでゲームが始まり、ゲームオーバーになったら TITLE ボタンでタイトルに戻れます。
この回で学ぶこと
- 新しいシーンを作り、シーンを切りかえる
- File > Build Profiles の Scene List にシーンを登録する
- タイトル画面のボタンから
SceneManager.LoadSceneを呼ぶ Application.Quitでゲームを終わらせる- プレハブを別のシーンで使い回す
前回までのふりかえり
第11回で、残機とゲームオーバーを作りました。自機は3機あり、やられると点滅しながら復活します。全部なくなると GAME OVER が出て、RETRY ボタンでやり直せます。 今回はゲームの入り口になる「タイトル画面」を作り、ゲームらしい流れを完成させます。
1. 星空をプレハブにしておく
タイトル画面の背景にも、第6回で作った星空を流したいと思います。シーンをまたいで使い回すために、先にプレハブにしておきます。
1-1. Stars_Far と Stars_Near をプレハブにする
Gameシーンが開いていることを確認する- Project で
Assets/_Game/Prefabsフォルダを開く - Hierarchy の
Stars_Farを、Prefabs フォルダへドラッグする - Hierarchy の
Stars_Nearも、Prefabs フォルダへドラッグする - Hierarchy の
Stars_FarとStars_Nearの名前が青色に変わったことを確認する - Ctrl+S(Macは Cmd+S)でシーンを保存する
ヒント
名前が青いのは「プレハブから作られたもの(プレハブのインスタンス)」というしるしです。今回は Hierarchy の星は消さずに、そのまま残しておきます。
2. 新しいシーン Title を作る
2-1. シーンを作る
- メニューの File > New Scene を選ぶ
- New Scene ウィンドウが開いたら、Basic (URP) を選ぶ(カメラとライトが最初から入っているもの)
- 右下の Create を押す
- メニューの File > Save As... を選ぶ
- 保存先に
Assets/_Game/Scenesフォルダを選ぶ - 名前を
Titleにして Save を押す - Project の
Assets/_Game/ScenesにTitleとGameの2つがあることを確認する
ヒント
New Scene ウィンドウにならんでいるテンプレートの名前は、Unity のバージョンによって少しちがうことがあります。カメラとライトが入っているもの(URP と書いてあるもの)を選べばOKです。
注意
新しいシーンを作るとき、「今のシーンを保存しますか?」と聞かれたら Save を押しましょう。Game シーンの変更が消えないようにするためです。
2-2. カメラを Game シーンと同じにする
タイトル画面のカメラも、第1回と同じ設定にします。
- Hierarchy で
Main Cameraを選ぶ - Transform の Position を (0, 0, -10)、Rotation を (0, 0, 0) にする
- Camera コンポーネントの Projection を Orthographic にする
- Size を
5にする - Environment の Background Type を Solid Color にする
- Background の色を、Game シーンと同じ黒っぽい紺色にする
- Ctrl+S(Macは Cmd+S)でシーンを保存する
ヒント
Game シーンの色をまねしたいときは、Game シーンの Main Camera の Background の色をクリックし、出てきたウィンドウの Hexadecimal(1A1A33 のような英数字)をメモしておくと、同じ色を入力できます。
2-3. 星空を置く
- Project の
Assets/_Game/PrefabsからStars_Farを Hierarchy にドラッグする Stars_Nearも Hierarchy にドラッグする- ▶ Play ボタンを押して、星が流れていることを確認する
- ▶ を押して止める
- Ctrl+S(Macは Cmd+S)でシーンを保存する
3. タイトルの文字とボタンを作る
3-1. Canvas の設定
- Hierarchy の何もないところを右クリックし、UI > Text - TextMeshPro を選ぶ
Canvas、その子のText (TMP)、EventSystemができたことを確認するCanvasを選び、Canvas Scaler の UI Scale Mode を Scale With Screen Size にする- Reference Resolution を X
1920、Y1080にする - Match を
0.5にする
ヒント
EventSystem は、マウスのクリックやキー入力を UI に伝える係です。これがないとボタンが押せません。 Inspector に「Input System を使うなら置きかえて」という黄色い注意が出たら、その下の Replace with InputSystemUIInputModule を押してください。
3-2. タイトルの文字
Text (TMP)の名前をTitleTextに変える- Rect Transform のアンカーが真ん中(middle-center)になっていることを確認する
- Pos X を
0、Pos Y を200にする - Width を
1600、Height を250にする - Text Input を
SPACE SHOOTERにする - Font Size を
150にする - Alignment の「中央よせ」と「上下の真ん中」のボタンを押す
- Vertex Color を好きな色(例: 水色)にする
3-3. START ボタン
- Hierarchy の
Canvasを右クリックし、UI > Button - TextMeshPro を選ぶ - 名前を
StartButtonに変える - Pos X を
0、Pos Y を-100にする - Width を
400、Height を100にする StartButtonの ▶ を開き、子のText (TMP)を選ぶ- Text Input を
STARTにして、Font Size を48にする
3-4. QUIT ボタン
- Hierarchy で
StartButtonを選ぶ - Ctrl+D(Macは Cmd+D)で複製する
- 名前を
QuitButtonに変える - Pos Y を
-240にする - 子の
Text (TMP)の Text Input をQUITにする - Ctrl+S(Macは Cmd+S)でシーンを保存する
4. TitleMenu スクリプト
4-1. スクリプトを書く
- Project で
Assets/_Game/Scriptsフォルダを開く - 何もないところを右クリックし、Create > Scripting > MonoBehaviour Script を選ぶ
- 名前を
TitleMenuにして Enter キーを押す - ダブルクリックして開き、中身を全部消して次のように書く
csharp
using UnityEngine;
using UnityEngine.SceneManagement;
// タイトル画面のボタン
public class TitleMenu : MonoBehaviour
{
public void StartGame()
{
SceneManager.LoadScene("Game");
}
public void QuitGame()
{
Application.Quit();
}
}- Ctrl+S(Macは Cmd+S)で保存する
コードの解説
| 行 | 意味 |
|---|---|
using UnityEngine.SceneManagement; | シーンを切りかえる SceneManager を使うための1行 |
public void StartGame() | START ボタンから呼ぶ関数。ボタンから呼ぶので public を付ける |
SceneManager.LoadScene("Game"); | Game という名前のシーンを読みこむ。今のシーン(Title)は閉じられる |
public void QuitGame() | QUIT ボタンから呼ぶ関数 |
Application.Quit(); | ゲーム(アプリ)を終わらせる |
SceneManager.LoadScene とは
LoadScene("名前") は、「今のシーンを片づけて、その名前のシーンを新しく始める」命令です。 第11回の Retry では GetActiveScene().name(今のシーンの名前)を入れて、同じシーンを読みこみ直していました。今回は "Game" と名前を直接書いています。 名前は1文字でもちがうと読みこめないので、Project のシーンの名前と大文字・小文字までそろえてください。
注意
Application.Quit() は、ビルドしたゲームでだけ動きます。Unity エディターで ▶ を押しているときは、QUIT ボタンを押しても何も起きません。こわれているわけではないので安心してください。 また、第19回で作る Web 版(ブラウザで遊ぶゲーム)でも、ブラウザのタブは閉じられません。
4-2. TitleMenu をシーンに置く
- Hierarchy の何もないところを右クリックし、Create Empty を選ぶ
- 名前を
TitleMenuに変える - Project の
TitleMenuスクリプトを、Hierarchy のTitleMenuにドラッグする
4-3. ボタンにつなぐ
- Hierarchy で
StartButtonを選ぶ - Button コンポーネントの On Click () の + を押す
- None (Object) の欄に、Hierarchy の
TitleMenuオブジェクトをドラッグする - No Function のメニューから TitleMenu > StartGame () を選ぶ
- Hierarchy で
QuitButtonを選ぶ - On Click () に、
StartButtonを複製したときの設定が残っていることを確認する - 右のメニューをクリックして TitleMenu > QuitGame () に変える
- Ctrl+S(Macは Cmd+S)でシーンを保存する
よくあるまちがい
QuitButton は StartButton を複製して作ったので、On Click () も StartGame のままコピーされています。QuitGame に変えるのを忘れると、QUIT を押してもゲームが始まってしまいます。
5. シーンを Build Profiles に登録する
5-1. Scene List に登録する
LoadScene でシーンを読みこむには、そのシーンを Scene List に登録しておく必要があります。リストの一番上(0番)のシーンが、ゲームを起動したときに最初に始まるシーンになります。
Titleシーンが開いていることを確認する- メニューの File > Build Profiles を開く
- 左の一覧で Scene List を選ぶ
- 右側の Add Open Scenes を押して、
Scenes/Titleを追加する Scenes/Gameもリストにあることを確認する(なければ、Project のGameシーンをリストにドラッグする)Scenes/Titleをドラッグして、一番上に移動する- 右はしの番号が
Titleは 0、Gameは 1 になっていることを確認する - 両方にチェックが入っていることを確認する
- Build Profiles のウィンドウを閉じる
注意
SampleScene など使わないシーンがリストに残っていたら、選んで右クリックし、Remove Selection で外しておきましょう(ファイルが消えるわけではありません)。
5-2. 動作確認
Titleシーンで ▶ Play ボタンを押す- タイトル画面が出て、星が流れていればOK
- START ボタンを押すと、Game シーンに切りかわってゲームが始まればOK
- ▶ を押して止める
注意
Game シーンに切りかわったあと、画面が暗く見えることがあります。そのときは Game シーンを開いて Window > Rendering > Lighting の Generate Lighting を押してください(第11回と同じです)。Title シーンでも同じことが起きたら、Title シーンでも押しましょう。
6. ゲームオーバーからタイトルに戻る
6-1. GameManager に BackToTitle を追加する
Project の Game シーンをダブルクリックして開きます。それから GameManager を開いて、次のように書きかえます。
csharp
using TMPro;
using UnityEngine;
using UnityEngine.SceneManagement;
// スコア・残機・ゲームの状態を管理する
public class GameManager : MonoBehaviour
{
public static GameManager instance; // どこからでも使えるようにする
public int score = 0;
public TextMeshProUGUI scoreText;
public int lives = 3; // 残機(第11回)
public TextMeshProUGUI livesText;
public GameObject gameOverPanel;
public bool isPlaying = true; // ゲーム中かどうか
void Awake()
{
instance = this;
}
void Start()
{
UpdateUI();
}
public void AddScore(int amount)
{
score += amount;
UpdateUI();
}
public void LoseLife()
{
lives--;
UpdateUI();
if (lives <= 0)
{
GameOver();
}
}
void GameOver()
{
isPlaying = false;
gameOverPanel.SetActive(true);
}
void UpdateUI()
{
scoreText.text = "SCORE " + score.ToString("D6");
livesText.text = "LIFE " + lives;
}
// ボタンから呼ぶ
public void Retry()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
public void BackToTitle() // ★追加
{ // ★追加
SceneManager.LoadScene("Title"); // ★追加
} // ★追加
}保存します。BackToTitle は、Title シーンを読みこむだけの関数です。
6-2. TITLE ボタンを作る
- Hierarchy で
GameOverPanelを選び、Inspector の名前の左のチェックを入れる(作業しやすいように一時的に表示する) GameOverPanelの ▶ を開き、RetryButtonを選ぶ- Ctrl+D(Macは Cmd+D)で複製する
- 名前を
TitleButtonに変える - Pos Y を
-240にする - 子の
Text (TMP)の Text Input をTITLEにする
6-3. TITLE ボタンに BackToTitle をつなぐ
- Hierarchy で
TitleButtonを選ぶ - On Click () に、RetryButton からコピーされた
GameManager.Retryが入っていることを確認する - 右のメニューをクリックして GameManager > BackToTitle () に変える
- Hierarchy で
GameOverPanelを選び、名前の左のチェックを外す(元どおりかくす) - Ctrl+S(Macは Cmd+S)でシーンを保存する
よくあるまちがい
GameOverPanel のチェックを外し忘れると、ゲームを始めたとたんに GAME OVER が表示されます。作業が終わったら必ず外しましょう。
7. 全体の動作確認
7-1. タイトルから最後まで遊ぶ
- Project の
Titleシーンをダブルクリックして開く - ▶ Play ボタンを押す
- START ボタンを押してゲームを始める
- わざと3回やられて、GAME OVER を出す
- TITLE ボタンを押して、タイトル画面に戻ればOK
- もう一度 START を押して、スコアが 000000、LIFE が 3 から始まればOK
- ▶ を押して止める
ヒント
▶ を押すと、今開いているシーンから始まります。タイトルから通して確かめたいときは、Title シーンを開いてから ▶ を押しましょう。ゲームの部分だけ調整したいときは、Game シーンを開いて ▶ を押せば、すぐにゲームから始められます。
チャレンジ課題
- タイトル画面の背景に、Kenney Space Kit の宇宙船や岩のモデルを置いてかざってみよう
- タイトルの下に「PRESS START」や「© 2026 自分の名前」の小さな文字を入れてみよう
- ボタンの色を変えてみよう(ヒント: Button コンポーネントの Normal Color、Highlighted Color(マウスが乗ったときの色)、Pressed Color)
- タイトル画面にも BGM を流してみよう(ヒント: 第9回と同じく Main Camera に Audio Source)
つまずきポイント
| こんなときは | ここを確認 |
|---|---|
| START を押すと「Scene 'Game' couldn't be loaded」のエラー | File > Build Profiles の Scene List に Game が入っていて、チェックがついているか |
| START を押しても何も起きない | StartButton の On Click () に TitleMenu.StartGame が入っているか。シーンに EventSystem があるか |
| QUIT を押してもゲームが終わらない | エディターの中では終わらないのが正しい動き。ビルドしたときだけ終わる |
| QUIT を押すとゲームが始まる | QuitButton の On Click () が StartGame のままになっていないか |
| TITLE を押すとゲームがやり直しになる | TitleButton の On Click () が Retry のままになっていないか |
| シーンを切りかえると画面が暗い | Window > Rendering > Lighting で Generate Lighting を押す |
まとめ
- File > New Scene で新しいシーンを作り、File > Save As... で名前を付けて保存する
LoadSceneで使うシーンは File > Build Profiles の Scene List に登録する。0番が最初に始まるシーン- ボタンの On Click () から
publicな関数を呼んで、シーンを切りかえる - プレハブにしておけば、別のシーンでも同じものを使い回せる