LoginSignup
3
0

More than 1 year has passed since last update.

【Unity】VContainerを使用して最短で依存コンポーネント注入

Last updated at Posted at 2022-02-14

はじめに

Extenject,Zenjectの更新が2020年から止まっているようですので、代替候補のDIパッケージ「VContainer」を試してみました。
毎回公式から手順を探すのは辛いので最短で実現できる手順のメモを残します。

VContainerとは

以下公式サイトです。

試したこと

使用例としてButtonゲームオブジェクトに依存しないようにGameMangerコンポーネント内でButtonイベントを登録してみました。

利用手順

  • "root/Packages/manifest.json"ファイルの"dependencies"に以下を追記する。
root/Packages/manifest.json
"jp.hadashikick.vcontainer": "https://github.com/hadashiA/VContainer.git?path=VContainer/Assets/VContainer#1.10.0",

※バージョン部分はその時の最新versionに書き換えること。

  • シーンに適当にボタンを配置する。 image.png
  • 配置したボタンゲームオブジェクトに"MainButton"スクリプトをアタッチする。
    スクリプトは編集不要。
GameManager.cs
using UnityEngine;

public class MainButton : MonoBehaviour
{

}
  • GameManagerオブジェクトを作成し、GameManagerスクリプトをアタッチする。
GameManager.cs
using UnityEngine;
using UnityEngine.UI;
using VContainer;
public class GameManager : MonoBehaviour
{
    Button _mainButton;

    private void Awake()
    {
        _mainButton.onClick.AddListener(OnButtonClicked);
    }

    private void OnButtonClicked()
    {
        Debug.Log("ボタンが押されました");
    }

    [Inject]
    public void Constructor(MainButton injectMainButton)
    {
        // Awakeより先に呼ばれてコンポーネントを注入する
        _mainButton = injectMainButton.GetComponent<Button>();
    }
}

ちなみにこの状態でゲームを起動してもConstructorは動作しない。

  • GameLifetimeScopeスクリプトをGameManagerにアタッチする。 このスクリプトに注入させたいコンポーネントを記述する。 注入するコンポーネントのインスタンスはゲーム開始時に自動で検索するので明示は不要である。
GameLifetimeScope.cs
using VContainer;
using VContainer.Unity;

public class GameLifetimeScope : LifetimeScope // LifetimeScopeを継承
{
    protected override void Configure(IContainerBuilder builder)
    {
        builder.RegisterComponentInHierarchy<MainButton>();
    }
}
  • InspectorからGameLifetimeScopeコンポーネントのAutoInjectionGameObjectsにGameManagerオブジェクトをアタッチする。
    これによりGameMangerスクリプト内の[inject]アトリビュートが付与されたConstractorメソッドが動作するようになる。
    image.png

  • ゲームを起動してボタンをクリックする。
    GameManagerからはButtonゲームオブジェクトを参照していませんが、イベントの発火に成功しています。
    image.png

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0