【问题标题】:Two sliders that interact in Unity在 Unity 中交互的两个滑块
【发布时间】:2020-06-06 15:22:36
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: unity3d user-interface


    【解决方案1】:
    Slider.SetValueWithoutNotify()
    

    是你的朋友。

    来自 Unity 脚本文档:

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

    Slider. SetValueWithoutNotify()

    【讨论】:

      猜你喜欢
      • 2019-07-21
      • 2011-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多