FUnityの開発が進んできたら、「実際に動くかどうか」をテストしたくなりますよね。
ここでは、FUnityパッケージ(ライブラリ) と FUnityProject(テスト用Unityプロジェクト) を分けて運用する場合の、
正しいテスト手順を紹介します。
🎯 この記事の目的
- ✅ FUnityとFUnityProjectを分離した構成を理解する
- ✅ FUnitySampleシーンをUnityで正しく実行する
- ✅
FUnityUIInitializerのアタッチ位置を確認する
📦 FUnity と FUnityProject の関係
FUnityは Unityパッケージ(ライブラリ)、
FUnityProjectは そのパッケージを利用して動作確認するプロジェクトです。
開発構成(リポジトリ別)
📁 FUnity
┣ package.json
┣ Runtime/
┣ UXML/
┗ Samples~/BasicScene/FUnitySample.unity
📁 FUnityProject
┣ Assets/
┃ ┣ Scripts/FUnityUIInitializer.cs
┃ ┗ FUnity/Resources/FUnityPanelSettings.asset
┗ Packages/manifest.json(com.papacoder.funity を参照)
🧩 Step 1:パッケージを参照設定
FUnityProject/Packages/manifest.json に次のように追記します。
{
"dependencies": {
"com.unity.textmeshpro": "3.0.6",
"com.unity.ui": "1.0.0",
"com.papacoder.funity": "https://github.com/oco777/FUnity.git"
}
}
💡 ローカルで開発中なら
"file:../FUnity"にしてもOK!
🧩 Step 2:サンプルシーンをインポート
- Unityメニュー → Window → Package Manager を開く
- 「Packages: In Project」または「My Registries」で「FUnity」を選択
- Samples → Basic Scene → Import をクリック
すると、Assets/Samples/FUnity/.../Basic Scene/FUnitySample.unity が作成されます。
🧩 Step 3:FUnityUIInitializer.csを追加
FUnityのUIを自動的に読み込むために、
プロジェクト側(FUnityProject)に次のスクリプトを追加します。
📄 Assets/Scripts/FUnityUIInitializer.cs
using UnityEngine;
using UnityEngine.UIElements;
#if UNITY_EDITOR
using UnityEditor;
#endif
[ExecuteAlways]
public class FUnityUIInitializer : MonoBehaviour
{
#if UNITY_EDITOR
private const string UxmlPath = "Packages/com.papacoder.funity/UXML/block.uxml";
#endif
private const string PanelSettingsPath = "Assets/FUnity/Resources/FUnityPanelSettings.asset";
private void OnEnable()
{
var uiDocument = GetComponent<UIDocument>();
if (uiDocument == null)
{
Debug.LogWarning("[FUnityUIInitializer] UIDocument not found.");
return;
}
#if UNITY_EDITOR
var visualTree = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(UxmlPath);
if (visualTree == null)
{
Debug.LogWarning($"[FUnityUIInitializer] UXML not found at {UxmlPath}");
return;
}
uiDocument.visualTreeAsset = visualTree;
#endif
var panel = Resources.Load<PanelSettings>("FUnityPanelSettings");
if (panel != null)
{
uiDocument.panelSettings = panel;
}
else
{
Debug.LogWarning("[FUnityUIInitializer] PanelSettings not found in Resources/FUnityPanelSettings.asset");
}
}
}
🧩 Step 4:シーンにアタッチ
- FUnitySample.unity を開く
- Hierarchyの FUnity UI を選択
- Inspectorで次のように設定:
| コンポーネント | 設定内容 |
|---|---|
| UIDocument | Panel Settings → Assets/FUnity/Resources/FUnityPanelSettings.asset |
| UIDocument | Visual Tree Asset → (空でもOK) |
| FUnityUIInitializer | アタッチ済み(自動でblock.uxmlを読み込み) |
FUnity UI に FUnityUIInitializer をアタッチするのがポイント!
✅ Step 5:再生して確認!
「Play」を押すと、block.uxml で定義されたブロックUIが表示されれば成功です 🎉
もし表示されない場合は、以下を確認してください:
Assets/FUnity/Resources/FUnityPanelSettings.assetが存在しているか- Consoleに
[FUnityUIInitializer]の警告が出ていないか Packages/com.papacoder.funity/UXML/block.uxmlのパスが正しいか
💡 Tips:Samplesはコピーされる
Package Managerで「Import」したサンプルはAssets/Samples/... にコピーされるだけで、
FUnityリポジトリ側の変更は自動反映されません。
🔧 開発中は:
Samples~/BasicSceneを直接開く
🚀 公開テスト時は:Assets/Samples/...のコピーで動作確認
🧠 まとめ
| 項目 | 内容 |
|---|---|
| FUnityリポジトリ | パッケージ本体(Runtime/UI/UXML/Samples) |
| FUnityProjectリポジトリ | テスト・検証用Unityプロジェクト |
| FUnityUIInitializer | プロジェクト側に置く(Assets/Scripts) |
| FUnity UI GameObject | UIDocument + FUnityUIInitializerをアタッチ |
📝 次回予告
次回は、Scratch風ブロックUIを動的に生成する「ブロックパレット」を実装します。
クリックやドラッグでブロックを動かす仕組みを、UI Toolkitだけで構築していきましょう!

コメント