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