如何检测滚动条大小何时更改

时间:2018-04-17 08:28:16

标签: c# unity3d

这是一个用于查找滚动条值更改时的侦听器:

Scrollbar.onValueChanged.AddListener(scollBarChanged);

...

private void scollBarChanged(float value)
{
    //Do something
}

我想要一个更改滚动条大小的侦听器,而不是c#for unity

中的值

1 个答案:

答案 0 :(得分:0)

Scrollbar组件中的事件,但您可以通过在Update属性更改时签入Scrollbar.size函数来实现它。只需将其与旧Scrollbar.size值与Mathf.Approximately函数进行比较即可。最好这样做,因为Unity的UI机制也将修改它,因此需要每帧检查它。

以下是如何检测Scrollbar.size更改的示例:

public Scrollbar scrollBar;
private float oldValue;

void Start()
{
    oldValue = scrollBar.size;
}

void Update()
{
    //Check if size changed
    if (!Mathf.Approximately(oldValue, scrollBar.size))
    {
        //It changed. Update old value with the new value
        oldValue = scrollBar.size;

        //Show the data
        Debug.Log("Size Changed!: " + scrollBar.size);
    }
}

您还可以向其添加事件,以便您可以从其他脚本订阅它:

public Scrollbar scrollBar;
private float oldValue;

public delegate void SizeChanged(float oldValue, float newValue);
public event SizeChanged OnSizeChanged;

void Start()
{
    oldValue = scrollBar.size;
}

void Update()
{
    //Check if size changed
    if (!Mathf.Approximately(oldValue, scrollBar.size))
    {
        //Invoke the event
        if (OnSizeChanged != null)
            OnSizeChanged(oldValue, scrollBar.size);

        //It changed. Update old value with the new value
        oldValue = scrollBar.size;
    }
}

然后从另一个脚本订阅它:

ScrollSizeChanger otherScript;

void Awake()
{
    GameObject obj = GameObject.Find("OtherObj");
    otherScript = obj.GetComponent<ScrollSizeChanger>();
}

void OnEnable()
{
    //Reigister to event
    otherScript.OnSizeChanged += SizeChangedCallBack;
}

private void SizeChangedCallBack(float oldValue, float newValue)
{
    Debug.Log("Size changed. Old value: " + oldValue + " New value: " + newValue);
}

void OnDisable()
{
    //Un-Reigister to event
    otherScript.OnSizeChanged -= SizeChangedCallBack;
}

注意

如果要检查的大小是此UI对象的变换比例而不是Scrollbar.size,那么同样的事情仍然适用。只需将float oldValue;更改为Vector2 oldValue;,然后使用scrollBar.GetComponent<RectTransform>().sizeDelta获取大小而不是scrollBar.size。在Update函数中,还可以在没有Vector2的情况下直接比较Mathf.Approximately