C# Unity多个滑块不会同时更新

C# Unity多个滑块不会同时更新,c#,unity3d,user-interface,C#,Unity3d,User Interface,我目前正在一个Unity项目中工作,需要从JSON文件中更新8个滑块值。我测试了加载部分,一切正常,但当我将这些值应用于滑块时,它们的行为与我想象的不一样 我有一个OnButton函数:1。触发JSON加载->2。将加载的JSON值传递给静态变量->3。调用函数以更新滑块 现在问题来了:按下按钮时,每次只更新一个滑块,从上到下,我不明白为什么。因此,每次加载json文件时,在更新每个滑块之前,必须最多按8次加载按钮。当UI加载并在那里工作时,我使用相同的LoadSliders函数 谢谢你的帮助

我目前正在一个Unity项目中工作,需要从JSON文件中更新8个滑块值。我测试了加载部分,一切正常,但当我将这些值应用于滑块时,它们的行为与我想象的不一样

我有一个OnButton函数:1。触发JSON加载->2。将加载的JSON值传递给静态变量->3。调用函数以更新滑块

现在问题来了:按下按钮时,每次只更新一个滑块,从上到下,我不明白为什么。因此,每次加载json文件时,在更新每个滑块之前,必须最多按8次加载按钮。当UI加载并在那里工作时,我使用相同的LoadSliders函数

谢谢你的帮助

using UnityEngine;
using UnityEngine.UI;
.
.
.

 public void UpdateSettings(BoidPresetSaveData loadedSave)
    {
        maxSpeed = loadedSave.maxSpeed;
        
        maxForce = loadedSave.maxForce;
        arriveRadius = loadedSave.arriveRadius;
        desiredSeparation = loadedSave.desiredSeparation;
        neighbourDistance = loadedSave.neighbourDistance;
        
        //Weights
        separation = loadedSave.separation;
        alignment = loadedSave.alignment;
        cohesion = loadedSave.cohesion;
        wander = loadedSave.wander;
        avoidWalls = loadedSave.avoidWalls;
    }

    public void LoadSliders()
    {
        maxSpeedSlider.value = maxSpeed;
        maxForceSlider.value = maxForce;
        arriveRadiusSlider.value = arriveRadius;
        desiredSeperationSlider.value = desiredSeparation;
        neighbourDistanceSlider.value = neighbourDistance;

        separationSlider.value = separation;
        alignmentSlider.value = alignment;
        cohesionSlider.value = cohesion;
        wanderSlider.value = wander;
        avoidWallsSlider.value = avoidWalls;
    }
此外,OnButton功能也不是很奇特:

public void LoadPreset()
{
    var loadKey = presetDropdown.captionText.text;
    if (!SaveManager.SaveExists(loadKey,folderKey))
    {
        Debug.Log("Preset file does not exist.");
        return;
    }
    BoidPresetSaveData loadedSave = SaveManager.Load<BoidPresetSaveData>(loadKey, folderKey);
    BoidSettings.instance.UpdateSettings(loadedSave);
    BoidSettings.instance.LoadSliders();
}
public void LoadPreset()
{
var loadKey=presetDropdown.captionText.text;
如果(!SaveManager.SaveExists(loadKey、folderKey))
{
Log(“预设文件不存在”);
返回;
}
BoidPresetSaveData loadedSave=SaveManager.Load(loadKey,folderKey);
BoidSettings.instance.UpdateSettings(loadedSave);
BoidSettings.instance.LoadSliders();
}

好的,我发现slider.value调用也会调用OnSliderChange事件。考虑到这一点,上面的代码不起作用,因为您在那里创建了一种循环。 我还谎称这在Gui负载上有效,只是测试不够。 我必须拆分UpdateSettings函数,以便每个滑块都有自己的OnSliderChange方法。因此,函数代码如下所示:

 public void UpdateMaxSpeed()
{
    maxSpeed = maxSpeedSlider.value;
}
public void UpdateMaxForce()
{
    maxForce = maxForceSlider.value;
}
public void UpdateArriveRadius()
{
    arriveRadius = arriveRadiusSlider.value;
}public void UpdateDesiredSeparation()
{
    desiredSeparation = desiredSeperationSlider.value;
}
public void UpdateNeighbourDistance()
{
    neighbourDistance = neighbourDistanceSlider.value;
}
public void UpdateSeparation()
{
    separation = separationSlider.value;
}

public void UpdateAlignment()
{
    alignment = alignmentSlider.value;
}
public void UpdateCohesion()
{
    cohesion = cohesionSlider.value;
}
public void UpdateWander()
{
    wander = wanderSlider.value;
}
public void UpdateAvoidWalls()
{
    avoidWalls = avoidWallsSlider.value;
}

也许有更简洁的方法,但我对C#和Unity的了解还不够,无法给出有根据的猜测。

例如,单击按钮一次后,只更新maxSpeedSlider,单击两次后,只更新maxForceSlider?你的滑块最大值是多少?你给它们的值是多少?