Unity3D Slider onValueChanged 仅发送 0(或其他定义的值)
Unity3D Slider onValueChanged sending only 0 (or other defined value)
我正在尝试将 onValueChanged 事件附加到我的 GUI 滑块,但出于某种原因,它为我提供了一个强制选项来输入值(它是 "On Value Change (Single)" 部分中的第四个框)。然后它只发送上述值,而不是滑块的实际值。
活动代码如下:
public void ChangeWindDirection(float value)
{
Debug.Log("New wind direction: " + value);
}
我尝试重新启动 Unity 和 Visual Studio 2013,但无济于事。现在它甚至会为我尝试创建的每个新事件添加一个值框。
你可以做到
public void ChangeWindDirection(Slider slider)
{
Debug.Log("New wind direction: " + slider.value);
}
然后分配滑块:
这样你就可以获得滑块值,或者滑块具有的其他东西:-)
希望这就是您想要的:-)
如果您想从 Unity 的 UI 系统传递 "dynamic variable"(即 ScrollRect
的 scrollPosition
变量或 Slider
的值) ,只需在目标脚本中创建一个与值类型匹配的方法或 属性。
例如,ScrollRect
可以发送一个Vector2
"dynamically"到一个目标脚本,所以在目标脚本上,你要写一个这样的方法:
public [any return type] MyMethod(Vector2 myDynamicVar) {}
或者像这样的 属性:
public Vector2 myDynamicVar {set; [optional get;]}
这有一些模糊但重要的含义:
上面写的方法和属性如果UI组件的"dynamic variable type" 不匹配(在本例中 Vector2
对应 ScrollRect
)。
方法的签名必须是动态变量类型。即:public void MyMethod(Vector2 myDynamicVar, bool isCantBeHere) {}
不会在组件的事件回调列表中显示为 "dynamic"。
我希望我没有遗漏任何东西,这些东西没有很好的记录(或不容易找到)。希望对你有帮助。
我遇到了完全相同的问题,旧滑块绑定得很好,但新滑块显示了您放置值的占位符。即使是以前的滑块,如果我触摸它们并将其更改为完全相同的方法,它们现在会显示值占位符并始终发送零。一个小时前我刚刚添加了一个滑块,但现在对滑块 OnChanged 的任何更改都将显示占位符值。那时我确实向目标 class 添加了一个静态字段,不确定是否是这个原因。
这是我找到的最佳答案:
(由 Jesper 作为评论发布)
确保您从检查器的 OnValueChanged 下拉列表中选择了动态浮动
我正在尝试将 onValueChanged 事件附加到我的 GUI 滑块,但出于某种原因,它为我提供了一个强制选项来输入值(它是 "On Value Change (Single)" 部分中的第四个框)。然后它只发送上述值,而不是滑块的实际值。
活动代码如下:
public void ChangeWindDirection(float value)
{
Debug.Log("New wind direction: " + value);
}
我尝试重新启动 Unity 和 Visual Studio 2013,但无济于事。现在它甚至会为我尝试创建的每个新事件添加一个值框。
你可以做到
public void ChangeWindDirection(Slider slider)
{
Debug.Log("New wind direction: " + slider.value);
}
然后分配滑块:
这样你就可以获得滑块值,或者滑块具有的其他东西:-) 希望这就是您想要的:-)
如果您想从 Unity 的 UI 系统传递 "dynamic variable"(即 ScrollRect
的 scrollPosition
变量或 Slider
的值) ,只需在目标脚本中创建一个与值类型匹配的方法或 属性。
例如,ScrollRect
可以发送一个Vector2
"dynamically"到一个目标脚本,所以在目标脚本上,你要写一个这样的方法:
public [any return type] MyMethod(Vector2 myDynamicVar) {}
或者像这样的 属性:
public Vector2 myDynamicVar {set; [optional get;]}
这有一些模糊但重要的含义:
上面写的方法和属性如果UI组件的"dynamic variable type" 不匹配(在本例中
Vector2
对应ScrollRect
)。方法的签名必须是动态变量类型。即:
public void MyMethod(Vector2 myDynamicVar, bool isCantBeHere) {}
不会在组件的事件回调列表中显示为 "dynamic"。
我希望我没有遗漏任何东西,这些东西没有很好的记录(或不容易找到)。希望对你有帮助。
我遇到了完全相同的问题,旧滑块绑定得很好,但新滑块显示了您放置值的占位符。即使是以前的滑块,如果我触摸它们并将其更改为完全相同的方法,它们现在会显示值占位符并始终发送零。一个小时前我刚刚添加了一个滑块,但现在对滑块 OnChanged 的任何更改都将显示占位符值。那时我确实向目标 class 添加了一个静态字段,不确定是否是这个原因。
这是我找到的最佳答案:
(由 Jesper 作为评论发布)
确保您从检查器的 OnValueChanged 下拉列表中选择了动态浮动