| この記事の要点 |
|
基本: SceneManager.LoadScene
using UnityEngine;
using UnityEngine.SceneManagement; // ★ 必須
public class SceneChanger : MonoBehaviour {
// 衝突時に scene2 へ遷移
void OnCollisionEnter(Collision collision) {
if (collision.gameObject.name == "GoalObject") {
SceneManager.LoadScene("scene2");
}
}
// ボタンから呼ぶ場合
public void GoToTitle() {
SceneManager.LoadScene("TitleScene");
}
// インデックス指定でも可(Build Settings の順序)
public void GoToFirstScene() {
SceneManager.LoadScene(0);
}
}
事前準備: Build Settings に追加
シーン名で読み込むためには、対象シーンを Build Settings に登録しておく必要があります:
- File → Build Settings (Ctrl + Shift + B)
- 「Scenes In Build」の欄に対象シーンファイル (.unity) をドラッグ&ドロップ
- もしくは「Add Open Scenes」ボタンで現在開いているシーンを追加
- 不要なシーンはチェックを外すかリストから削除
- 各シーンに付いているインデックス番号は
LoadScene(int)引数で使用
未登録のシーンを LoadScene すると以下のエラー:
Scene 'scene2' couldn't be loaded because it has not been added to the build settings
or the AssetBundle has not been loaded.
非同期ロード (LoadSceneAsync)
重いシーンを読み込む場合、同期 LoadScene だと画面がフリーズします。非同期ロードで進捗バーを表示:
using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class LoadingScreen : MonoBehaviour {
public Slider progressBar;
public Text progressText;
public void StartLoading(string sceneName) {
StartCoroutine(LoadSceneCoroutine(sceneName));
}
IEnumerator LoadSceneCoroutine(string sceneName) {
AsyncOperation op = SceneManager.LoadSceneAsync(sceneName);
op.allowSceneActivation = false; // 読み込み完了しても自動切替しない
while (!op.isDone) {
// progress は 0.0〜0.9 まで進む(0.9 で読み込み完了、残り 0.1 はアクティブ化)
float progress = Mathf.Clamp01(op.progress / 0.9f);
progressBar.value = progress;
progressText.text = $"{(progress * 100):F0}%";
// 完了したらユーザー操作で遷移
if (op.progress >= 0.9f) {
progressText.text = "Press any key to continue";
if (Input.anyKey) {
op.allowSceneActivation = true;
}
}
yield return null;
}
}
}
加算ロード (Additive)
現在のシーンに重ねて別シーンを読み込む。広大なマップを区画分けする・UI とゲームを別シーンで管理する場合に使用:
// メインシーンを残したまま UI シーンを追加読み込み
SceneManager.LoadScene("UIScene", LoadSceneMode.Additive);
// 不要になったら個別アンロード
SceneManager.UnloadSceneAsync("UIScene");
// 現在ロードされているシーン一覧
for (int i = 0; i < SceneManager.sceneCount; i++) {
var scene = SceneManager.GetSceneAt(i);
Debug.Log($"Scene {i}: {scene.name} (loaded: {scene.isLoaded})");
}
シーン間のデータ引き継ぎ
シーン移動時、デフォルトではすべての GameObject が破棄されます。スコアやプレイヤー状態を引き継ぐには:
方式1: DontDestroyOnLoad
public class GameManager : MonoBehaviour {
public static GameManager Instance;
public int score = 0;
void Awake() {
if (Instance == null) {
Instance = this;
DontDestroyOnLoad(gameObject); // ★ シーン跨ぎで保持
} else {
Destroy(gameObject); // 重複インスタンス防止
}
}
}
// 別シーンから参照
void Start() {
Debug.Log(GameManager.Instance.score); // 前シーンのスコアが残っている
}
方式2: ScriptableObject(推奨)
[CreateAssetMenu(fileName = "GameState", menuName = "Game/State")]
public class GameState : ScriptableObject {
public int score;
public string playerName;
public int level;
}
// 各シーンの MonoBehaviour で参照
public class ScoreDisplay : MonoBehaviour {
public GameState gameState; // Inspector でアサイン
void Update() {
scoreText.text = gameState.score.ToString();
}
}
方式3: PlayerPrefs (永続化)
// セッション跨ぎで保存したい場合
PlayerPrefs.SetInt("HighScore", 12345);
PlayerPrefs.SetString("PlayerName", "Hero");
PlayerPrefs.Save();
// 読み込み
int hi = PlayerPrefs.GetInt("HighScore", 0); // デフォルト値 0
シーン読み込みイベント
void OnEnable() {
SceneManager.sceneLoaded += OnSceneLoaded;
}
void OnDisable() {
SceneManager.sceneLoaded -= OnSceneLoaded;
}
void OnSceneLoaded(Scene scene, LoadSceneMode mode) {
Debug.Log($"Scene loaded: {scene.name}, mode: {mode}");
// シーン固有の初期化処理
}
よくあるハマりどころ
- Build Settings 登録忘れ: 最頻出。エラーメッセージを必ず読む
- シーン名のスペル: 大文字小文字を含めて完全一致
- 同期 LoadScene でフリーズ: 大きいシーンは LoadSceneAsync に切替
- DontDestroyOnLoad で重複: シーン再ロード時に既存インスタンスを残しつつ新規も生成 → シングルトン判定必須
- Build 時にシーンが含まれない: Build Settings のチェックボックスが外れている
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09