Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 两个滑块在一起交互_Unity3d_User Interface - Fatal编程技术网

Unity3d 两个滑块在一起交互

Unity3d 两个滑块在一起交互,unity3d,user-interface,Unity3d,User Interface,我想有两个互动的滑块-当我改变一个,它会立即改变另一个。现在简单地使用“OnValueChanged”之类的事件是有问题的,因为它可能会创建一个无限循环(“OnValueChanged”实际上并不检查新值是否不同,它只是注册任何类型的赋值) 那么,有哪些好的选项可以获得这种期望的行为呢?即,当我更改一个滑块时,它也会更改另一个滑块,但这些更改实际上不会调用任何事件?我的一些想法是: 1,我只是检查一下与之前的值是否有任何实际差异。这应该可以解决问题。这应该没问题,但我还是有点害怕一些反馈循环,特

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

那么,有哪些好的选项可以获得这种期望的行为呢?即,当我更改一个滑块时,它也会更改另一个滑块,但这些更改实际上不会调用任何事件?我的一些想法是:

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

2,有一段时间我关闭了其他滑块。这似乎是最合理、最安全的选择,但我真的不确定如何做到这一点。我不知道unity一开始是如何检查变化的。所以我有点不确定关闭其他滑块的时间

3,与上面类似,但一个非常简单、安全的解决方案是在每个滑块中保留某种布尔值
bool
。如果一个滑块改变了,它将要改变其他滑块的值,我首先将所有这些设置中的
bool
设置为false。当在其他滑块上调用“onValueChanged”时,它会检查
bool
值,因为它为false,所以实际上它什么都不做,只是将
bool
更改回true。基本上,我关闭滑块一次改变

Slider.SetValueWithoutNotify()
他是你的朋友

从Unity脚本文档:

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