🧩 FUnityパッケージの正しいテスト方法【Unity Package Manager対応】

FUnity Unity
FUnity

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:サンプルシーンをインポート

  1. Unityメニュー → Window → Package Manager を開く
  2. 「Packages: In Project」または「My Registries」で「FUnity」を選択
  3. 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:シーンにアタッチ

  1. FUnitySample.unity を開く
  2. Hierarchyの FUnity UI を選択
  3. Inspectorで次のように設定:
コンポーネント設定内容
UIDocumentPanel Settings → Assets/FUnity/Resources/FUnityPanelSettings.asset
UIDocumentVisual 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 GameObjectUIDocument + FUnityUIInitializerをアタッチ

FUnity UI に FUnityUIInitializer をアタッチすれば、block.uxml が自動的に読み込まれ、FUnityのUIがすぐに確認できます。

📝 次回予告

次回は、Scratch風ブロックUIを動的に生成する「ブロックパレット」を実装します。
クリックやドラッグでブロックを動かす仕組みを、UI Toolkitだけで構築していきましょう!


コメント

タイトルとURLをコピーしました