unity3d - 在 Unity 中交互的两个滑块
问题描述
我想要两个交互的滑块——当我改变一个时,它会立即改变另一个。现在简单地使用像“OnValueChanged”这样的事件是有问题的,因为它可能会创建一个无限循环(“OnValueChanged”实际上并不检查新值是否不同,它只是注册任何类型的值分配)。
那么有什么好的选择来获得这种期望的行为 - 即当我更改一个滑块时,它也会更改另一个滑块,但这些更改实际上并没有调用任何事件?我的一些想法是:
1,我只是检查是否与之前的值有任何实际差异。这应该可以解决问题。这应该没问题,但我仍然有点害怕一些反馈循环,特别是如果有一些类型的转换或滑块之间的东西。
2,有一段时间我关闭了其他滑块。这似乎是最合理、最安全的选择,但我不确定该怎么做。我不知道统一如何首先检查更改。所以我有点不确定关闭其他滑块的“多长时间”。
bool
3,与上面类似,但一个非常hacky,安全的解决方案是在每个滑块中保留某种布尔值。如果一个滑块发生变化,并且它即将改变其他滑块的值,我首先将bool
所有这些设置为 false。当在其他滑块上调用“onValueChanged”时,它会检查bool
值,因为它是假的,它实际上并没有做任何事情,除了变bool
回真。基本上我关闭滑块进行一次更改。
解决方案
Slider.SetValueWithoutNotify()
是你的朋友。
来自 Unity 脚本文档:
在不调用 onValueChanged 回调的情况下设置滑块的值。
推荐阅读
- date - 如何在赛普拉斯的某个变量中存储日期
- r - 如何增加ggplot中条的高度
- python - 用于映射和复制数据的 ctypes
- python - TensorFlow 的对象检测 API 中缺少用于训练的模块和属性
- c# - MSBuild 工具离线安装
- python - 如何在 Python Flask 函数中返回变量并在另一个函数中使用它们?
- javascript - 如何使用 javascript 显示数据列表?
- postgresql - PostgreSQL 以 Json 格式搜索值
- flutter - Flutter Provider子错误:找不到正确的Provider
在此 YouBeautyApp 小部件上方 - arrays - 基于对象键组合对象键值对