はじめに
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 属性が適用された変数を定義して、
Inspector で参照を設定して使用しますが、
Zenject を使用することで、Inspector で参照を設定しなくても
他のオブジェクトが持つコンポーネントにアクセスできるようになります
検証環境
- Unity 2018.2.2f1
- Zenject 7.1.0
手順
他のスクリプトから参照したいコンポーネントを持つオブジェクトに
「Zenject Binding」をアタッチします
「Zenject Binding」の「Components」の欄に、
他のスクリプトから参照したいコンポーネントをドラッグして
このように設定します
次に、Hirarchy の「Create>Zenject>Scene Context」を選択して
「SceneContext」オブジェクトを作成します
using UnityEngine; using Zenject; public class Example : MonoBehaviour { [Inject] private PauseUI m_pauseUI; private void Start() { m_pauseUI.Open(); } }
最後に、参照を保持したい変数に「Inject」属性を適用します
これでゲームを実行すると、参照が自動で設定され、
正常にコンポーネントの機能を呼び出せることが確認できます
このように、Zenject を使用することで、Inspector で参照を設定しなくても
他のオブジェクトが持つコンポーネントにアクセスできるようになります