使用Slider设置变量值,而不首先接触Slider



我有一个附加到Text Game对象的短脚本,它将文本设置为显示滑块的当前值/位置。此文本游戏对象附加到滑块On Value Changed字段:ShowSliderValue->[Dynamic float]TextUpdate

按"播放"时,文本不会立即显示选定的值/位置。只有当我更改滑块的位置时,文本才会从"新文本"更改为滑块的实际值。从技术上讲,我想在按下播放键时触发"On Value Changed"。这样我就可以避免脚本中任何不必要的依赖关系。

using UnityEngine;
using UnityEngine.UI;
public class ShowSliderValue : MonoBehaviour
{
private Text text;
void Awake()
{
text = this.GetComponent<Text>();
}
public void TextUpdate(float value)
{
text.text = value.ToString("0.00");
}
}

在寻找解决方案时,我发现了以下视频。在5:06(到5:26(,他们将默认值设置为从1到30,这似乎是开箱即用的。点击此处获取youtube链接。

我的文本是否可以显示滑块值,而不首先移动滑块或在显示的脚本中主动询问滑块值?

编辑:

以下是我目前的解决方案:我在Slider中添加了一个脚本,用于更改Start((上的Slider值。由于该值需要实际更改,slider.value=slider.valid不起作用。

using UnityEngine;
using UnityEngine.UI;

public class SliderTest : MonoBehaviour
{
private void Start()
{
Slider slider = this.GetComponent<Slider>();
float originalValue = slider.value;
slider.value = slider.maxValue;
slider.value = slider.minValue;
slider.value = originalValue;
}
}

这样可以确保价值发生变化。除非minValue=maxValue-这无论如何都会使滑块过时。

您可以使用此脚本在第一帧上设置滑块的文本,之后您可以使用文本更新函数来设置文本值。这是我制作的脚本:


using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class SliderTutorial : MonoBehaviour
{
public Slider slider;
public TextMeshProUGUI txt;
// Start is called before the first frame update
void Start()
{
SetText();
}
public void SetText()
{
txt.SetText(slider.value.ToString());
}
public void TextUpdate(float value)
{
txt.SetText(value.ToString());
}
}

您也可以使用类似的东西,它将不断更新脚本本身的文本,而不是On Value Changed事件。

using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class SliderTutorial : MonoBehaviour
{
public Slider slider;
public TextMeshProUGUI txt;
// Update is called once per frame
void Update()
{
txt.SetText(slider.value.ToString());
}
}

如果您还有任何问题,请随时提出。

不是这个问题的直接解决方案,而是与相关的。刚刚在动态使用滑块时发现;slider.maxValue";必须在设置";值";,如果给定值大于maxvalue,则应用maxvalue。希望这能帮助到其他人。

最新更新