从ScriptableObject注入字段

时间:2017-07-19 11:41:50

标签: unity3d zenject

我有一个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:无法解析类型&#39; GravityHandler +设置&#39;同时使用类型&#39; GravityHandler&#39;构建对象。   对象图:   播放机   MovementHandler   GravityHandler

我做错了什么以及如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

好的,我忘了将脚本化对象放入SceneContext。我还必须更改其名称以匹配类的名称。