UI Workspaceの使い方
UI Workspaceはシーン内のUIViewを視覚的に管理するエディタウィンドウです。 Tools › AchEngine › UI Workspace または Project Settings › AchEngine › UI Workspace から開くことができます。
初期設定
1. UIRootの生成
Project Settings › AchEngine › UI Workspace → UI Root生成 ボタンをクリックします。
シーンに以下の階層が自動的に生成されます。
[UIRoot]
├── Layer_Background (Canvas, SortingOrder: 0)
├── Layer_Screen (Canvas, SortingOrder: 10)
├── Layer_Popup (Canvas, SortingOrder: 20)
├── Layer_Overlay (Canvas, SortingOrder: 30)
└── Layer_Tooltip (Canvas, SortingOrder: 40)
2. UIViewCatalogの生成
Create › AchEngine › UI View Catalog でCatalogアセットを生成します。
UIRootコンポーネントのCatalogフィールドへドラッグします。
3. Viewプレハブの登録
CatalogにViewプレハブを登録します。
| フィールド | 説明 |
|---|---|
| ID | Show("このID") で開く際に使う文字列 |
| Prefab | UIViewコンポーネントが付いたプレハブ |
| Layer | レンダーレイヤー |
| Pool Size | 事前生成インスタンス数 (0 = 必要時に生成) |
Viewの開閉
var ui = ServiceLocator.Resolve<IUIService>();
// ── 開く ── ────────────────────────────────────────────
ui.Show<MainMenuView>(); // 型
ui.Show("MainMenu"); // 文字列ID
ui.Show<ItemDetailView>(v => v.SetItem(item)); // 型 + 初期化コールバック
ui.Show("ItemDetail", v => ((ItemDetailView)v) // ID + コールバック
.SetItem(item));
// ── 閉じる ────────────────────────────────────────────
ui.Close<MainMenuView>(); // 型
ui.Close("MainMenu"); // ID
ui.CloseAll(); // すべて
ui.CloseLayer(UILayerId.Popup); // レイヤー全体
Viewプレハブの作成
基本View
[GameObject]
├── Canvas Group (フェードトランジション用)
├── UIView コンポーネント ← 必須
└── UI 要素...
public class MainMenuView : UIView
{
[SerializeField] private Button _playButton;
[SerializeField] private Button _settingsButton;
protected override void OnInitialize()
{
_playButton.onClick.AddListener(OnPlay);
_settingsButton.onClick.AddListener(OnSettings);
}
private void OnPlay()
{
ServiceLocator.Resolve<ISceneService>().LoadInGame(1);
}
private void OnSettings()
{
ServiceLocator.Resolve<IUIService>().Show<SettingsPopup>();
}
}
Poolの有効化
同じViewを頻繁に開閉する場合、Poolを使ってGCを削減します。
CatalogのPool Sizeを1以上に設定すると、閉じる際にDestroyではなくPoolへ返却されます。
public class DamageNumberView : UIView
{
public override UILayerId Layer => UILayerId.Overlay;
// Pool返却時に状態を初期化
protected override void OnClosed()
{
GetComponent<Text>().text = "";
}
}
Single Instance
同じViewが重複して開かれることを防ぎます。
public class LoadingView : UIView
{
public override bool SingleInstance => true;
public override UILayerId Layer => UILayerId.Overlay;
}
UIBootstrapper設定
シーン開始時に自動的に開くViewを指定します。
[UIBootstrapper] コンポーネント
└── Auto Open Views: [MainMenuView, BGMView]