3本目のゲームで、uGUI をプロジェクトから外しました。UI は UI Toolkit だけ。動くところまで行きましたが、道は平らではありませんでした。
11件
パッケージ
uGUI は入れていない
3手
PanelSettings の置き方
2つは失敗した
1行
テーマ(.tss)の中身
無いと文字が出ない
1件
消えたエラー
作り直したら出なくなった
EventSystem は uGUI の型だった
最初に書いたシーン生成スクリプトは、こうでした。
using UnityEngine.EventSystems; // ← ここでコンパイルエラー
using UnityEngine.InputSystem.UI;
new GameObject("EventSystem", typeof(EventSystem), typeof(InputSystemUIInputModule));
error CS0234: The type or namespace name 'EventSystems' does not exist in the namespace 'UnityEngine'
EventSystem は uGUI パッケージ(com.unity.ugui)が持っている型です。uGUI を外したプロジェクトには存在しません。「UI Toolkit のボタンには EventSystem が要る」という話を前提にしていたので、ここで詰まりました。
調べ直すと、Unity 6.1 以降には PanelInputConfiguration があります。これをシーンに置くだけで、ボタンはブラウザでも反応しました(UNDO / RETRY / 面の選択、すべて実機の Chrome で確認)。
「UI Toolkit には EventSystem が必要」は、いまのバージョンでは当てはまらない。
PanelSettings を置く場所で2回失敗した
UI Toolkit を実行時に使うには PanelSettings が要ります。ここで3手かかりました。
1手目問題
エディターのスクリプトから document.panelSettings に代入 → 保存したシーンでは空のまま。SerializedObject 経由で書いても applied=False
2手目要注意
アセットにして Resources から実行時に読む → UI は出たが、Web ビルドの起動時に serialization のエラー
3手目
実行時に ScriptableObject.CreateInstance で作る → 割り当ても保存も要らなくなった
最終的にはこれだけです。
static PanelSettings CreatePanelSettings()
{
var settings = ScriptableObject.CreateInstance<PanelSettings>();
settings.themeStyleSheet = Resources.Load<ThemeStyleSheet>("DefaultRuntimeTheme");
settings.scaleMode = PanelScaleMode.ScaleWithScreenSize;
settings.referenceResolution = new Vector2Int(1080, 1920);
settings.match = 0.5f;
return settings;
}
テーマ(.tss)が無いと文字が出ない
PanelSettings にテーマを割り当てないと、文字が表示されません。テーマのファイルは自分で置けます。中身はこの1行だけで足りました。
@import url("unity-theme://default");
消せていないエラーを、そのまま書いておく
3手目まで来ても、Web ビルドの起動時に出るエラーは消えていません。
A scripted object (probably UnityEngine.UIElements.PanelInputConfiguration?) has a different serialization layout when loading. (Read 32 bytes but expected 60 bytes)
やったことと結果:
試したこと(どれでも消えなかった)
表示も入力も正常で、遊びには影響していませんでした。Unity 側の作り(エディターと実行時で持っている情報が違う)に見えますが、確かめきれなかったので、ここは「未解決」として公開しました。
追記(2026-09-19):この後のビルドで消えた
公開した数時間後、UI とは関係のない2か所(保存データの形・古くなった API の置き換え)を直してビルドし直したところ、このエラーは出なくなりました。本番のページを新しいブラウザで開いて、コンソールの全出力を数えた結果が下です。
RESULT 全件=77 serialization=0
原因は特定できていません。コードの2か所が効いたとは考えにくく、ビルドをやり直したこと自体で、古い状態が作り直された可能性が高いと見ています。同じエラーに当たったら、まず作り直してみるのは試す価値があります。
画面はこうなった

UI Toolkit を触ってみて、良かったところと引っかかったところを並べます。
良かった
引っかかった
サイズについて、言えることと言えないこと
このビルドは 6,963,556 バイト(Brotli・Managed Stripping High・IL2CPP サイズ優先)でした。2本目(uGUI のみ)は 7,524,439 バイトです。
ただし、これを「UI Toolkit のほうが軽い」とは書けません。2本のゲームは中身が違い、パッケージの数も違います(11件 と 16件)。
⚠️ 比べるなら、同じゲームで UI だけ入れ替える
サイズの差を主張したいなら、同じプロジェクトで UI の実装だけ差し替えて測る必要があります。まだやっていないので、ここでは「3本目は 6,963,556 バイトだった」という事実だけ書きます。
ちなみに、ビルド設定の効果ははっきり出ました。unity projects create の直後(Stripping 最小・速度優先)が 9,080,745 バイト、2本目と同じ設定(Stripping High・サイズ優先・スプラッシュ停止)にして 6,958,566 バイト。−23.4% です。
まとめ
- EventSystem は uGUI の型。uGUI を外したら使えないが、
PanelInputConfigurationで入力は届く PanelSettingsは実行時に作るのがいちばん確実だった(シーンに保存できない/アセットだとエラー)- テーマ(
.tss)が無いと文字が出ない。中身は@import1行 - 起動時の serialization エラーは、作り直したビルドで消えた(原因は不明・動作に影響は無かった)
- サイズの比較は、同じゲームで UI だけ入れ替えないと言えない