ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
基本: 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=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- クイックスタート 2026-05-15 09:54:54
- クイックスタート & チュートリアル(初心者向け) 2026-05-15 09:54:54
- コントローラーにてモデルに値を格納してビューに渡す方法 2026-05-15 09:54:54
- バリデーション 2026-05-15 09:54:54
- HTML とは?タグ・構造・現代の使い方 2026-05-15 09:54:19
- 【Veu.js】for 繰り返し処理 2026-05-15 09:54:19
- ExpressとEJSを使用した簡単なアプリ【node.js】 2026-05-15 09:54:19
- EJSにおけるテンプレートの共通化(組み込み) 2026-05-15 09:54:19
- 【Vue.js】modelとdata フォーム入力値とDOMへの即時反映 2026-05-15 09:54:19
- 【Veu.js】ifの条件分岐とtemplateを用いたグループ化 2026-05-15 09:54:19
- jQueryにおける子要素の削除 2026-05-15 09:54:19
- EJSの値の表示と処理の記述 2026-05-15 09:54:19
- Symfony 2026-05-15 09:54:19
- CakePHPとは 2026-05-15 09:54:19
- Vue.js computed (算出プロパティ) と data / methods との違い|キャッシュとリアクティブ 2026-05-15 09:54:19
コメントを削除してもよろしいでしょうか?