別のSceneファイルへ移る場合はSceneManager、同じScene内でメニューを開く場合はUIの表示切替を使います。
Animatorでパネルを動かしても、別のSceneは読み込まれません。
ここではButtonからtop→homeへ移る最小のC#例を先に説明し、後半で同一Scene内のUIスライドを分けて扱います。
Scene登録はUnity 6.3のBuild Profiles、UIはuGUI 2.0の公式資料に照合しています。
掲載画像は、旧記事の資料12点と、2026年10月12日のUnity 6.6操作・実行記録3点です。
後者はBuild Profilesの画面と、OnGUIボタンを使った別の作業用サンプルのシーン遷移記録です。
本文のtop→homeをuGUI Buttonから呼ぶコードや、後半の4状態Animatorを実行した証拠ではありません。
今回のレビューではUnityのコンパイル・Scene読み込み・Animator動作を再実行していません。

Sceneの読み込みとUI画面切替の違い
| 項目・症状 | 設定・確認先 |
|---|---|
| 別のSceneへ置き換える | SceneManager.LoadSceneのSingle。最小例はtopからhomeへ。Scene内の通常オブジェクトも切り替わる。 |
| 現在のSceneを残して追加する | LoadSceneMode.Additive。追加したCamera/EventSystem/UI、アクティブScene、アンロードを管理する。 |
| 同じSceneでパネルを開く・閉じる | GameObject.SetActiveなど。別Sceneの読み込みは行わない。ボタンでUIを切り替える手順へ。 |
| 同じSceneでパネルをスライドする | RectTransformをAnimationで動かす。後半のUI移動例。表示範囲と遷移条件を指定する。 |
| 画面を重ねてフェードする | CanvasGroup/RenderTextureの記事へ。見た目の効果と読み込みタイミングを分ける。 |
1.topとhomeを作り、遷移先を見分けられるようにする
- 新しい検証用Sceneをtopとして保存します。Canvas内へButtonを作り、文字を「homeへ」にします。Canvas・EventSystem・利用する入力方式が揃っているか確認します。
- topを複製してhomeとして保存します。homeの背景や文字を変えて、遷移できたか見分けられるようにします。ファイル名のhomeとコードで渡す名前を揃えます。
- この例でボタン設定を行うのはtopです。複製したhomeに同じGameControllerやOnClickを残すと、homeを再ロードする構成になるため、home側の不要な登録を外します。
- Scene名が同じファイルを別フォルダーに作った場合は、名前だけでは区別できません。最小例は重複名を避け、必要な場合は公式APIで指定できるパスを確認します。
次は旧記事のScene作成画面です。
新しいUnity 6.3の画面ではありません。

2.Unity 6.3のScene Listへ登録する
- File → Build Profilesを開き、使用するplatform profileまたはbuild profileを選びます。PlatformのScene Listは既定で表示されます。
- 個別build profileへ独自のScene Listを追加する場合は、Add Settings → Scene Listを選びます。Scene Listを追加していないbuild profileはglobal scene listを使うため、どちらのリストを使っているかを先に確認します。
- Projectからtopとhomeを使用するScene Listへ登録し、両方のチェックが有効でビルド対象になっていることを確認します。topを最初にして開始Sceneを決めます。
- 名前で読むこの最小例にhomeの固定indexは必要ありません。index指定を使う場合は使用するリストの順番を控え、Sceneの追加・除外・並べ替え後に再確認します。
参照したUnity 6.3のScene List公式資料は、このAdd Settingsの手順を説明しています。
旧版や別版のOverride Global Scene Listという欄を、そのまま6.3の操作名として置き換えないようにしてください。
次の2画像は旧Build Settings/Scenes In Buildの登録資料です。
Unity 6.3では上の手順へ読み替え、画像の欄を探すだけで止まらないようにします。


2026年10月12日に撮影した、Unity 6.6の画面です。
「Build Profiles」を開くと、左に「Scene List」があり、プラットフォーム共通のシーン一覧が表示されます。

この画面では、Build Profilesのプロジェクトには、プロファイルがありませんでした。
一覧には「Scenes/SampleScene」が0、「Scenes/ScreenshotSceneB」が1で登録され、「Add Open Scenes」で、開いているシーンを追加できます。
3.GameControllerをButtonのOnClickへ登録する
GameController.csを作り、次の既存の最小コードを保存します。
ファイル名とクラス名をGameControllerに揃え、ConsoleにC#エラーがない状態にします。
この例はLoadSceneでhomeを指定し、引数を受け取らないpublic voidメソッドをButtonへ登録します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class GameController : MonoBehaviour
{
public void toGameScene()
{
SceneManager.LoadScene("home");
}
}- topのHierarchyに空のGameObjectを作り、GameControllerと名付けます。保存したGameController.csをアタッチします。Project内のスクリプトファイル自体と、Hierarchyのコンポーネント付きオブジェクトを区別してください。
- ButtonのOn Click()で+を押し、HierarchyのGameControllerをObject欄へ入れます。関数はGameController → toGameScene()を選び、同じイベントを重複登録しないようにします。
- topからPlayを開始し、Buttonをクリックします。期待する結果はhomeの背景や文字に変わり、Sceneがhomeへ置き換わることです。Consoleエラーが出た場合は、その内容を控えて後述の確認順へ進みます。
- Editorの確認後は、使用するprofileでビルドしたアプリでも遷移を確認します。EditorでSceneを開けることだけでは、ビルド対象のリストへ登録できている確認になりません。
以下は旧記事のコンポーネントと遷移GIFです。
上の操作を今回実施した証拠ではありません。


この最小コードにローディング画面、連打抑止、エラー回復、戻る操作、フェード待ちは含まれません。
Buttonが一度反応する構成を先に確認し、実際のゲームでは読み込み中の操作と失敗時の復帰を追加してください。
2つのシーンを登録して、ボタンで切り替えた例です。
切り替える前は、Hierarchyに「SampleScene」が表示され、画面の左上に「Active Scene: SampleScene」と出ていました。

「Load ScreenshotSceneB」を押すと、Hierarchyが「ScreenshotSceneB」に変わり、表示も「Active Scene: ScreenshotSceneB」になりました。

LoadScene・LoadSceneAsync・Additiveの選び方
次の呼び出し断片はメソッド内で使うAPI例で、これだけをC#ファイルとして保存するものではありません。
LoadSceneの公式資料では、読み込みは即時完了ではなく次の描画フレームで完了し、引っかかりを避けたい場合はLoadSceneAsyncを使うよう案内しています。
SceneManager.LoadScene("シーン名");
LoadSceneAsyncを選ぶ場合は、たとえばSceneManager.LoadSceneAsync("home", LoadSceneMode.Single)から返るAsyncOperationの完了を待ちます。
非同期APIを呼ぶだけで、完了前の後続処理・連打・画面操作が管理されるわけではありません。
この最小記事には、完成した非同期ローディングUIのコードや測定結果は掲載していません。
追加したSceneをアンロードする
SceneManager.UnloadSceneAsync(1);
この断片の1は「今のScene」ではなく使用中のScene Listのindexです。
読み込まれていないSceneへ無条件に実行せず、Additiveで追加した対象と残すSceneを先に決めます。
UnloadSceneAsyncの戻り値で完了を確認します。
GameObjectの破棄とAssetのメモリー解放は同一ではなく、公式資料はAssetを別に扱うことも説明しています。
indexとAdditiveの呼び出し例
// 番号1のシーンに遷移
SceneManager.LoadScene(1);
// 現在のシーンを残したまま追加読み込み
SceneManager.LoadScene(1, LoadSceneMode.Additive);
Singleは通常のSceneを置き換え、Additiveは現在のSceneを残します。
Additiveを使うだけで共通UIやポーズ処理が完成するわけではありません。
重複CameraやEventSystem、どのSceneがアクティブか、どのSceneをアンロードするかを決めてください。
現在のindex+1で次へ進む場合も、最後のSceneや除外Scene、並べ替えの条件を確認します。
次の画像は旧例の資料です。

旧記事の参考リポジトリは補助資料です。
ここで示した現行手順との一致や、同じ環境での動作を新たに確認したものではありません。
同じScene内のUIをスライドする場合
ここからはSceneManagerを使わず、同じSceneの2画面をAnimationで移動する構成です。
旧画像は当時の例として保持します。
現在の説明では、常に有効なPanelsRootの下にView1/View2を並べ、移動用クリップを往路・復路で別に作ります。
旧例のSpeed=−1だけで逆再生する設定へ依存しません。
RectTransformと表示範囲
- Canvas内にUIViewportを作り、表示領域を決めてRectMask2Dを追加します。PanelsRootを子にし、AnchorsをMin(0,0)/Max(2,1)、offsetMinとoffsetMaxを0にします。LayoutGroupでこのRectTransformを別に制御しない構成にします。
- PanelsRootの子にView1とView2を作ります。View1はMin(0,0)/Max(0.5,1)、View2はMin(0.5,0)/Max(1,1)、両方の余白は0。各Viewに背景と移動用Buttonを配置します。
- View1を見せるPanelsRootのアンカーはMin(0,0)/Max(2,1)、View2を見せる位置はMin(−1,0)/Max(1,1)です。offsetは0を保持します。親の幅をWとするとRoot幅は2W、移動量は−Wという計算上の構成です。今回Unityで寸法測定した結果ではありません。
次は旧階層・Animationの3画像です。
現在のUIViewport/PanelsRootという命名や設定を撮影したものではありません。



4つのAnimator状態を明示する
- UIViewportへAnimatorと専用Controllerを追加し、子PanelsRootのAnchor Min/Maxを記録します。View1Hold、ToView2、View2Hold、ToView1の4クリップを作り、すべてLoop Timeをオフにします。
- View1HoldはView1の位置、View2HoldはView2の位置を保持するキーにします。ToView2は0秒にView1位置、0.5秒にView2位置。ToView1はその逆を正方向のクリップとして記録します。両アンカーと必要なoffsetを揃え、記録後はRecord/Previewを解除します。
- AnimatorにView1、ToView2、View2、ToView1の4状態を作り、それぞれに対応クリップをMotionとして入れます。既定状態はView1、各Speedは1です。「3状態」と数えず、待機2+移動2に分けます。
- TriggerをGoView2とGoView1の2つ作ります。View1→ToView2はGoView2、View2→ToView1はGoView1をConditionsに指定し、Has Exit Timeはオフ、Durationは0にします。
- ToView2→View2とToView1→View1は移動後の遷移です。Conditionsを付けず、Has Exit Timeをオン、Exit Time=1、Duration=0にします。待機状態からTriggerなしで自動遷移する接続は作りません。
- View1のButtonはOnClickの対象をUIViewportにし、Animator.SetTrigger(string)へGoView2を指定します。View2のButtonも同じAnimatorを対象にGoView1を指定します。
- PlayでView1→View2→View1の位置・マスク領域・ボタン入力を確認します。遷移中の連打や途中キャンセルには別の入力管理が必要で、この最小Controllerだけで解決済みとはしていません。
以下の3画像は旧Animator設定と旧結果です。
4状態・往復2クリップの現在の説明を実行した証拠ではありません。



あなたはどっち?切り替えたい内容から選ぶ判定フロー
画面を切り替えたいときは、次の順で方法を選びます。
- 別のSceneファイルへ移りたい:SceneManager.LoadSceneのSingleを使います。現在のSceneを置き換え、Scene内の通常のオブジェクトも切り替わります。
- 現在のSceneを残したまま、別のSceneを追加したい:LoadSceneMode.Additiveを使います。追加したCamera・EventSystem・UI、アクティブなScene、アンロードを管理します。
- 読み込みで引っかかりを避けたい:LoadSceneAsyncを使い、返るAsyncOperationの完了を待ちます。
- 同じSceneの中で、メニューのパネルを開閉したい:SceneManagerは使わず、UIの表示切替(GameObject.SetActiveなど)を使います。Animatorでパネルを動かしても、別のSceneは読み込まれません。
- 追加したSceneを閉じたい:UnloadSceneAsyncを使い、戻り値で完了を確認します。
どの場合も、最初に、Sceneの切り替えなのか、同じScene内のUIの切り替えなのかを決めてください。
よくある質問:Sceneの切り替えで迷ったときのチェックリスト
SceneManagerとUIの表示切替は、何が違いますか?
別のSceneファイルへ移る場合はSceneManager、同じScene内でメニューを開く場合はUIの表示切替を使います。
Animatorでパネルを動かしても、別のSceneは読み込まれません。
LoadSceneは、すぐに読み込みが終わりますか?
すぐには終わりません。
公式資料では、読み込みは即時完了ではなく、次の描画フレームで完了するとされています。
引っかかりを避けたい場合は、LoadSceneAsyncを使うよう案内されています。
LoadSceneAsyncを使えば、連打や画面操作も管理されますか?
管理されません。
非同期APIを呼ぶだけで、完了前の後続処理・連打・画面操作が管理されるわけではありません。
返るAsyncOperationの完了を待ち、必要な制御は自分で実装します。
Additiveで読み込むと、共通UIやポーズ処理は完成しますか?
完成しません。
重複するCameraやEventSystem、どのSceneがアクティブか、どのSceneをアンロードするかを決める必要があります。
UnloadSceneAsyncで、メモリは解放されますか?
GameObjectの破棄とAssetのメモリー解放は同一ではありません。
公式資料は、Assetを別に扱うことも説明しています。
また、アンロードの引数のindexは、「今のScene」ではなく、使用中のScene Listのindexです。
シーンを現在のindex+1で進めるときの注意点は?
最後のSceneや除外するScene、並べ替えの条件を確認してください。
シーンが読み込めない・ボタンが反応しない場合
| 項目・症状 | 設定・確認先 |
|---|---|
| Sceneが登録されていないというエラー | homeの綴り、保存済みのSceneファイル、使用するprofile/globalのScene List、チェックの有効状態を確認。 |
| OnClickにtoGameSceneが出ない | ConsoleのC#エラー、GameController.csとclass名、コンポーネントの付いたHierarchyオブジェクト、public voidメソッド、対象のOnClickを確認。 |
| Buttonが押せない | EventSystemと入力方式に合う入力モジュール、CanvasのGraphicRaycaster、上に重なるGraphicとCanvasGroupのRaycast設定を確認。 |
| homeに移っても同じ画面に見える | 背景/文字を変えたか、複製したSceneやButton登録が同じままか、Hierarchyとロード対象を確認。 |
| indexで別Sceneへ移る | 現在使うScene Listの順を確認。別profileや並べ替えでindexが変わる条件を固定しない。 |
| AdditiveでCameraやUIが重なる | 読み込んだSceneと共通Sceneの役割を確認。重複するCamera/EventSystem・アクティブSceneとアンロード対象を整理。 |
| UIが移動しない・戻れない | 4状態のMotion、Triggerの綴り、往復クリップの両アンカー、offset、Exit Time、LayoutGroupとの競合を確認。 |
掲載コードの記事用リポジトリは別保存先の旧例です。
現在のBuild ProfilesやUI構成まで含む検証済みプロジェクトを配布しているとはしていません。
技術仕様はLoadSceneAsyncとAnimation transitionsの対象版資料で確認してください。
Unityの基礎と学習の記事は、ほかにもあります。




