コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】【Zenject】シーン内のコンポーネントの参照を自動で設定する方法

はじめに

using UnityEngine;

public class PauseUI : MonoBehaviour
{
    public void Open()
    {
        Debug.Log( "Open" );
    }
}

例えば、上記のようなスクリプトが存在して、
このコンポーネントを他のスクリプトから使用したい場合、

using UnityEngine;

public class Example : MonoBehaviour
{
    public PauseUI m_pauseUI;

    private void Start()
    {
        m_pauseUI.Open();
    }
}

このように public 変数や SerializeField 属性が適用された変数を定義して、

f:id:baba_s:20180814205843p:plain

Inspector で参照を設定して使用しますが、
 
Zenject を使用することで、Inspector で参照を設定しなくても
他のオブジェクトが持つコンポーネントにアクセスできるようになります

検証環境

  • Unity 2018.2.2f1
  • Zenject 7.1.0

手順

f:id:baba_s:20180814210147p:plain

他のスクリプトから参照したいコンポーネントを持つオブジェクトに
「Zenject Binding」をアタッチします

f:id:baba_s:20180814210233p:plain

「Zenject Binding」の「Components」の欄に、
他のスクリプトから参照したいコンポーネントをドラッグして

f:id:baba_s:20180814210425p:plain

このように設定します

f:id:baba_s:20180814210433p:plain

次に、Hirarchy の「Create>Zenject>Scene Context」を選択して

f:id:baba_s:20180814210439p:plain

「SceneContext」オブジェクトを作成します

using UnityEngine;
using Zenject;

public class Example : MonoBehaviour
{
    [Inject] private PauseUI m_pauseUI;

    private void Start()
    {
        m_pauseUI.Open();
    }
}

最後に、参照を保持したい変数に「Inject」属性を適用します

f:id:baba_s:20180814210926p:plain

これでゲームを実行すると、参照が自動で設定され、
正常にコンポーネントの機能を呼び出せることが確認できます

このように、Zenject を使用することで、Inspector で参照を設定しなくても
他のオブジェクトが持つコンポーネントにアクセスできるようになります

参考サイト様