【问题标题】:Unity3D Slider onValueChanged sending only 0 (or other defined value)Unity3D Slider onValueChanged 仅发送 0(或其他定义的值)
【发布时间】:2015-09-20 14:14:59
【问题描述】:

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

事件代码如下:

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

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

【问题讨论】:

  • 有一种方法可以使用 UnityEvents 执行此操作,但我找不到示例...
  • 感谢您提出这个问题,我认为没有人能想出一种更模糊的方法来启用此功能...

标签: unity3d unity3d-gui unity3d-editor


【解决方案1】:

这是我找到的最佳答案:

(由 Jesper 作为评论发布)

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

click here for the image

【讨论】:

  • 这是对我有帮助的答案。
  • 这其实是最好的答案。谢谢!
  • 我没有看到这个选项
  • @MichaelPacheco 您的方法需要一个 float 参数,以便该选项出现在如图所示的弹出菜单中。
  • 谢谢你。我发现传递对滑块的引用的替代方法非常愚蠢,因为您可以在设计时简单地存储该引用,我的意思是除非您在旅途中创建滑块,否则您也可以随时保留其引用。这是有道理的。传递这样一个简单的值对我来说更有意义,即使我稍后必须转换为 int。
【解决方案2】:

你可以这样做

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

然后分配滑块:

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

【讨论】:

  • 谢谢,这行得通! :) 但是它怎么可能与我在场景中的其他滑块一起工作呢?我所有的事件处理程序都是相同的(目前),但这是唯一显示第四个框的事件处理程序。
  • 你确定你在Dynamic float imgur.com/5325W7m下面选对了吗
  • 我不知道该说什么。那是确切的问题。非常感谢,Jesper!
  • 这是我第一次尝试自己在 Unity 中做某事... :)
  • 这行得通,但有点古怪。如果您只想要该值(通常),那么@dev_ter 的答案更直接:只需接受一个浮点值(如在 OP 中),但确保从“动态浮点”部分选择您的函数(然后将没有数字检查器中的字段)。
【解决方案3】:

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

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

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

或者类似这样的属性:

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

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

  1. 如果 UI 组件的“动态变量类型”不匹配,上面编写的方法和属性将不会在其他 UI 组件的事件回调列表中显示为“动态”(在这种情况下 Vector2 为 @987654329 @)。

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

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-16
      相关资源
      最近更新 更多