ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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
- 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アノテーションとは
最近更新/作成されたページ
- 【django】ログイン 認証機能 2026-09-08 03:22:09
- MySQL ERROR 1063 Incorrect column specifier for column|原因と直し方 2026-09-08 03:11:09
- 【PHPエラー】Object of class stdClass could not be converted to string 2026-09-07 07:46:04
- Julia Genie ローカル開発サーバ起動完全ガイド 2026-09-07 07:46:04
- Wi-Fi とは|規格と世代(Wi-Fi 4〜7)・周波数帯・CSMA/CA・WPA3 NEW 2026-09-07 07:45:13
- set コマンドでシェルオプションと位置パラメータを操作 | bash 2026-09-07 07:45:13
- JPEG(.jpg/.jpeg)画像形式の完全ガイド — 仕様・マジックナンバー・他形式との比較・EXIF 2026-09-07 07:45:13
- UE5 Get Overlapping Actorsで特定クラスだけ処理|Class Filter・Cast To 2026-09-07 07:45:13
- Linuxで特定拡張子のファイルを再帰削除|find -deleteの安全手順 2026-09-07 07:45:13
- Django CBVでテンプレートに値を渡す|get_context_data・extra_context 2026-09-07 07:45:13
- Linuxで複数ファイルの文字列を一括置換|find・sed・xargsの安全手順 2026-09-07 07:45:13
- Laravelルートグループ|prefix・middleware・nameで一括管理 2026-09-07 07:45:13
- Linux whichコマンドの使い方|絶対パス取得とtype・command -vの違い 2026-09-07 07:45:13
- Linux catコマンドの使い方|行番号表示・複数ファイル連結 2026-09-07 07:45:13
- unable to execute 'gcc': No such file or directory 2026-09-07 07:45:13
コメントを削除してもよろしいでしょうか?