Я портирую синглтон, который используется для управления группой NP C в Zenject. Было около 4-5 классов монобихе поведения, вызывающих его, и куча действий Behavior Designer.
Все монобихиороги работали без сбоев, просто вставляя параметр:
[Inject] GridSearch gridsearch;
Где GridSearch класс вводится с помощью моно установщика контекста сцены.
Вот фрагмент кода, показывающий 3 различных варианта, которые я пытался инициализировать переменной gridsearch:
using UnityEngine;
using Zenject;
namespace BehaviorDesigner.Runtime.Tasks
{
class HBGetGrid: Action
{
public SharedVector3 targetLocation;
// Option 1: does not get set
[Inject]
GridSearch gridsearch;
// Option 2: This function never gets called
[Inject] public void Init(GridSearch gs)
{
gridsearch = gs;
}
// Option 3: This never gets called but default constructor does. If I remove default constructor, I get compiler error
public HBGetGrid(GridSearch gs)
{
gridsearch = gs;
}
public HBGetGrid()
{
Debug.LogWarning("Initializing HBGetGrid");
}
public override TaskStatus OnUpdate()
{
// gridsearch is always null at this point
targetLocation.Value = gridsearch.GetSearchLocation(gameObject);
return TaskStatus.Success;
}
}
}
И вот как я Установка:
using UnityEngine;
using Zenject;
public class SceneInstaller : MonoInstaller
{
public override void InstallBindings()
{
Container.Bind<GridSearch>().AsSingle().NonLazy();
}
}
Я новичок в Zenject, так что, надеюсь, я упускаю что-то очевидное. Как я уже сказал, это работает хорошо везде, только в моих действиях в Behavior Designer я получаю эту проблему.
ПРИМЕЧАНИЕ. Действие НЕ наследуется от монобедения в случае возникновения проблемы.
Любые идеи будут высоко оценены! Благодаря.