Инъекция поля из ScriptableObject

У меня есть ScriptableObjectInstaller

public class Settings : ScriptableObjectInstaller<Settings>
{
    [Header("Gravity settings")] public GravityHandler.Settings GravitySettings;
    [Header("Movement settings")] public MovementHandler.Settings MovementSettings;

    public override void InstallBindings()
    {
        Container.BindInstance(GravitySettings);
        Container.BindInstance(MovementSettings);
    }
}

и класс

public class GravityHandler : IGravityHandler
{
    private readonly Settings _settings;
    private readonly BoxCollider2D _groundBox2D;

    public GravityHandler(BoxCollider2D groundBox2D, Settings settings)
    {
        _groundBox2D = groundBox2D;
        _settings = settings;
    }

    public bool IsGrounded()
    {
        if (_groundBox2D.OverlapCollider(_settings.ContactFilter2D, null) > 0)
            return true;
        return false;
    }

    [Serializable]
    public class Settings
    {
        public ContactFilter2D ContactFilter2D;
        public Vector3 GravityForce=new Vector2(0, -9.8f);
    }
}

Все, что я хочу, это иметь возможность изменять Settings.GravitySettings, а затем вставлять его значение в GravityHandler._settings, чтобы я мог использовать настройки внутри GravityHandler. Но когда я проверяю свою сцену, она показывает мне ошибку:

ZenjectException: невозможно разрешить тип "GravityHandler+Settings" при создании объекта с типом "GravityHandler". Граф объекта: Player MovementHandler GravityHandler

Что я делаю не так и как это исправить?

1 ответ

Хорошо, я просто забыл поместить объект сценариев в SceneContext. Я также должен был изменить его имя, чтобы соответствовать названию класса.

Другие вопросы по тегам