Вопросы действий Zenject и Behavior Designer - PullRequest
0 голосов
/ 07 января 2020

Я портирую синглтон, который используется для управления группой 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 я получаю эту проблему.

ПРИМЕЧАНИЕ. Действие НЕ наследуется от монобедения в случае возникновения проблемы.

Любые идеи будут высоко оценены! Благодаря.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...