| この記事の要点 |
|
基本: 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 / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38