如何在c#中沿水平滑块unity小部件定义停止点?

如何在c#中沿水平滑块unity小部件定义停止点?,c#,unity3d,C#,Unity3d,我正在尝试为一款流行的视频游戏的mod创建一个水平滑块小部件,我几乎得到了我需要的所有东西,但我不知道如何沿滑块设置停止点。我需要至少3个停止点,然后我可以引用为SliderValueAtZero、SliderValueAtTen和SliderValueAtTwenty。滑块本身工作良好,我只需要它不是一条具有无穷小数的连续线。感谢您的帮助 public override string SettingsCategory() => "Pawn Wealth"; public

我正在尝试为一款流行的视频游戏的mod创建一个水平滑块小部件,我几乎得到了我需要的所有东西,但我不知道如何沿滑块设置停止点。我需要至少3个停止点,然后我可以引用为SliderValueAtZero、SliderValueAtTen和SliderValueAtTwenty。滑块本身工作良好,我只需要它不是一条具有无穷小数的连续线。感谢您的帮助

public override string SettingsCategory() => "Pawn Wealth";

        public override void DoSettingsWindowContents(Rect inRect)
          {
            this.settings.PawnSkillValue1 = Widgets.HorizontalSlider(inRect.TopHalf().TopHalf(), this.settings.PawnSkillValue, 0f, 20f, true, "Pawn Skill Value: " + this.settings.PawnSkillValue + "\nDetermines the value of a pawns skills", "0", "20");
          }

只是在野外猜测,你使用的是一个

这是编辑器脚本吗?

因为如果不是,你根本不应该使用
GUI
中的东西,而应该使用组件

这意味着您可以简单地将值四舍五入到所需的相应倍数。Unity首先处理用户输入,因此您可以“不可见地”拖动滑块,但取整后您将看到效果:

var temp = Widgets.HorizontalSlider(inRect.TopHalf().TopHalf(), this.settings.PawnSkillValue, 0f, 20f, true, "Pawn Skill Value: " + this.settings.PawnSkillValue + "\nDetermines the value of a pawns skills", "0", "20");
this.settings.PawnSkillValue1 = Mathf.Round(temp / 10f) * 10f;
这将允许
0
10
20
的值


但正如前面所说,您应该使用组件。也许你的自定义小部件也能做到这一点。。我们不知道,因为我们没有看到代码

在这里,您可以将一个侦听器附加到事件,并使用如下方法:

public Slider slider;
public Text text;
public float roundToMultipleOf = 0.5f;

public void HandleChange(float value)
{
    slider.value = Mathf.Round(value / roundToMultipleOf) * roundToMultipleOf;
    text.text = slider.value.ToString("#0");
}


所以你想把它向上/向下取整以满足这个要求??只需将数字四舍五入,随着滑块的工作,它将从0到20平滑移动,并命中中间的所有点,如9.19748。我希望它停在10,但我不知道如何告诉它这样做。所以将它设置为整数,然后将值除以1,2,3等等。。。。或者把数字四舍五入,听起来不错。我该怎么做?抱歉,我还在学习。请看滑块属性。。然后,当你开始使用这个值*10时,它就消失了。