unity-dependency-injection について
具象の提供元を意識せず、抽象を通じて依存関係を指定できるUnity向けの依存性注入システムです。Awake時にシーン内の依存関係を結び、提供元がない場合はログに記録します。
主な機能
- 01属性ベースの注入
- 02インターフェース中心の依存関係
- 03Awake時のシーン全体の接続
- 04注入状況の診断ログ
活用シーン
- 01ゲームプレイクラスと実装の分離
- 02Unityシーン内での依存関係の提供
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ muharremtozan/ unity-agent-skills --skill unity-dependency-injectionインストール後、Claude Code で/unity-dependency-injectionを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/code/DependencyInjector.cs.txtDIAttributes.cs.txtDIExample.cs.txt詳細
Unity 依存性注入(DI)
SOLID の「D」を満たすための軽量なシステムです。クラスは、依存関係の提供元を知らなくても、[Inject] を使って依存関係を要求できます。
主な機能
- 属性ベースの注入:
[Inject]でフィールドを指定し、[Provide]で提供元を定義します。 - インターフェース重視:抽象化を前提としたプログラミングを促し、システムを簡単に差し替えられるようにします。
- 自動配線:シーン全体への注入は Awake で行われるため、Start の前に依存関係が準備されます。
- 診断ログ:注入の成功を記録し、提供元が見つからない場合に警告します。
主なファイル(最大 3 件)
DIAttributes.cs.txt:コンパイラー用のマーカー属性を含みます。DependencyInjector.cs.txt:シーン内の依存関係を見つけて接続するエンジンです。DIExample.cs.txt:Hero と AbilitySystem を疎結合にする方法を示します。
使用方法
1. インターフェースを定義する
public interface IWeapon { void Fire(); }
2. 実装を提供する
public class PlasmaRifle : MonoBehaviour, IWeapon {
[Provide] public IWeapon GetWeapon() => this;
public void Fire() { /* ... */ }
}
3. クライアントに注入する
public class Player : MonoBehaviour {
[Inject] private IWeapon currentWeapon;
void Start() => currentWeapon.Fire();
}
4. セットアップ
シーンまたは永続プレハブに DependencyInjector コンポーネントを配置します。
コメント
Markdown 対応