14

我正在尝试将 onValueChanged 事件附加到我的 GUI 滑块,但由于某种原因,它给了我一个强制选项来输入一个值(它是“值更改(单个)”部分中的第四个框)。然后它只发送前面提到的值,而不是滑块的实际值。

在此处输入图像描述

该事件的代码如下:

public void ChangeWindDirection(float value)
{
    Debug.Log("New wind direction: " + value);
}

我尝试重新启动 Unity 和 Visual Studio 2013 均无济于事。现在,它甚至为我尝试创建的每个新事件都赋予了价值。

4

4 回答 4

36

这是我找到的最佳答案:

(由 Jesper 作为评论发布)

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

点击这里查看图片

于 2016-03-29T23:20:57.213 回答
32

你可以这样做

public void ChangeWindDirection(Slider slider)
{
    Debug.Log("New wind direction: " + slider.value);
}

然后分配滑块: 在此处输入图像描述

这样您就可以获得滑块值或滑块具有的其他内容:-) 希望这就是您想要的 :-)

于 2015-09-20T14:42:38.867 回答
1

如果您想从 Unity 的 UI 系统传递一个“动态变量”(即ScrollRect'sscrollPosition变量或 a Slider's 值),只需在目标脚本中创建一个与值类型匹配的方法或属性。

例如,ScrollRect可以向目标脚本发送Vector2“动态”,因此在目标脚本上,您要编写如下所示的方法:

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

或者看起来像这样的属性:

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

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

  1. 如果该 UI 组件的“动态变量类型”不匹配(在本例Vector2中为ScrollRect),则上面编写的方法和属性不会在其他 UI 组件的事件回调列表中显示为“动态”。

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

我希望我没有遗漏任何东西,这些东西没有很好的文档记录(或者很容易找到)。我希望它有所帮助。

于 2015-12-21T06:37:51.117 回答
0

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

于 2015-12-31T07:54:28.630 回答