这是一个用于查找滚动条值更改时的侦听器:
Scrollbar.onValueChanged.AddListener(scollBarChanged);
...
private void scollBarChanged(float value)
{
//Do something
}
我想要一个更改滚动条大小的侦听器,而不是c#for unity
中的值答案 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
。