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"(即 ScrollRectscrollPosition 变量或 Slider 的值) ,只需在目标脚本中创建一个与值类型匹配的方法或 属性。

例如,ScrollRect可以发送一个Vector2"dynamically"到一个目标脚本,所以在目标脚本上,你要写一个这样的方法:

public [any return type] MyMethod(Vector2 myDynamicVar) {}

或者像这样的 属性:

public Vector2 myDynamicVar {set; [optional get;]}

这有一些模糊但重要的含义:

  1. 上面写的方法和属性如果UI组件的"dynamic variable type" 不匹配(在本例中 Vector2 对应 ScrollRect)。

  2. 方法的签名必须是动态变量类型。即:public void MyMethod(Vector2 myDynamicVar, bool isCantBeHere) {} 不会在组件的事件回调列表中显示为 "dynamic"。

我希望我没有遗漏任何东西,这些东西没有很好的记录(或不容易找到)。希望对你有帮助。

我遇到了完全相同的问题,旧滑块绑定得很好,但新滑块显示了您放置值的占位符。即使是以前的滑块,如果我触摸它们并将其更改为完全相同的方法,它们现在会显示值占位符并始终发送零。一个小时前我刚刚添加了一个滑块,但现在对滑块 OnChanged 的​​任何更改都将显示占位符值。那时我确实向目标 class 添加了一个静态字段,不确定是否是这个原因。

这是我找到的最佳答案:

(由 Jesper 作为评论发布)

确保您从检查器的 OnValueChanged 下拉列表中选择了动态浮动

click here for the image