首页 > 解决方案 > 通过事件消息注入引用

问题描述

我在项目中使用 pub/sub 模式。如果一个类正在跟踪像浮点数这样的原始类型,并且其他子系统和类需要能够读取,是否可以使用消息来传递浮点数的句柄?不是价值,而是允许他们在必要时阅读它的东西。

标签: c#unity3d

解决方案


如果我理解正确,您可能会使用Func<float>. 并且只需存储一个返回浮点值的方法

例如

public class System : MonoBehaviour
{
    public SubSystem SomeSubSystem;

    private float currentFloat;

    private float GetFloat()
    {
        return currentFloat;
    }

    private void Awake ()
    {
        SomeSubSystem.Initialize(GetFloat);
    }

    private void Update()
    {
        currentFloat += Time.deltaTime;
    }
}

然后像例如使用它

public class SubSystem : MonoBehaviour
{
    private Func<float> _getFloat;

    public void Initialize (Func<float> getFloat)
    {
        _getFloat = getFloat;
    }

    private IEnumerator Start ()
    {
        while(true)
        {
            yield return new WaitForSeconds (1);

            Debug.Log(_getFloat());
        }
    }
}

当然,同样的事情也可以在像这样的事件中提供

public event Action<Func<float>> SomeEvent;

因此,该事件的侦听器不会直接接收浮点值,而是如何获取它并可以存储它以供以后使用的方法。


推荐阅读