首页 > 解决方案 > 在 Unity 中交互的两个滑块

问题描述

我想要两个交互的滑块——当我改变一个时,它会立即改变另一个。现在简单地使用像“OnValueChanged”这样的事件是有问题的,因为它可能会创建一个无限循环(“OnValueChanged”实际上并不检查新值是否不同,它只是注册任何类型的值分配)。

那么有什么好的选择来获得这种期望的行为 - 即当我更改一个滑块时,它也会更改另一个滑块,但这些更改实际上并没有调用任何事件?我的一些想法是:

1,我只是检查是否与之前的值有任何实际差异。这应该可以解决问题。这应该没问题,但我仍然有点害怕一些反馈循环,特别是如果有一些类型的转换或滑块之间的东西。

2,有一段时间我关闭了其他滑块。这似乎是最合理、最安全的选择,但我不确定该怎么做。我不知道统一如何首先检查更改。所以我有点不确定关闭其他滑块的“多长时间”。

bool3,与上面类似,但一个非常hacky,安全的解决方案是在每个滑块中保留某种布尔值。如果一个滑块发生变化,并且它即将改变其他滑块的值,我首先将bool所有这些设置为 false。当在其他滑块上调用“onValueChanged”时,它会检查bool值,因为它是假的,它实际上并没有做任何事情,除了变bool回真。基本上我关闭滑块进行一次更改。

标签: unity3duser-interface

解决方案


Slider.SetValueWithoutNotify()

是你的朋友。

来自 Unity 脚本文档:

在不调用 onValueChanged 回调的情况下设置滑块的值。

滑块。SetValueWithoutNotify()


推荐阅读